为什么VK_Control + VKHome不适合我?

Sae*_*azi 4 delphi

procedure TSell.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if (Msg.Message=WM_KEYDOWN)and(Msg.wParam=VK_CONTROL+VK_HOME)then
     begin
 end;
Run Code Online (Sandbox Code Playgroud)

RRU*_*RUZ 10

要检查VK_CONTROL虚拟键的状态,必须使用该GetKeyState功能.

试试这个样本

procedure TSell.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if (Msg.Message=WM_KEYDOWN) then
   if  (GetKeyState(VK_CONTROL) < 0) and (Msg.wParam=VK_HOME) then
    //do your stuff
end;
Run Code Online (Sandbox Code Playgroud)

  • @Saeed:欢迎来到StackOverflow.如果@ RRUZ的答案是您的问题的解决方案,请考虑接受它(使用左侧的复选标记). (2认同)

Rob*_*edy 7

VK_CONTROL+ VK_HOME= 17 + 36 = 53 = Ord('5').您正在检查用户是否按下5了键盘的顶行.(这不是你想要的吗?你的问题没有说.)

您不能只添加两个独立键的虚拟键代码来发现它们是否同时被按下.Ctrl并且Home是两个不同的键,每个键生成自己的wm_KeyDownwm_KeyUp消息.(但是不要试图按顺序检测这两个键的按键.它会比你想要的复杂得多.检测何时Home按下,然后GetKeyState像Rruz的答案所示那样用来检测Ctrl当时是否已经失效你收到了当前的键盘信息.)