为什么VK_Control + VKHome不适合我?

时间:2011-06-28 03:28:37

标签: 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;

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:7)

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

您不能只添加两个独立键的虚拟键代码来发现它们是否同时被按下。 Ctrl Home 是两个不同的密钥,每个密钥都会生成自己的wm_KeyDownwm_KeyUp消息。 (但是不要试图按顺序检测这两个键的按键。它会比你想要的复杂得多。检测 Home 被按下时,然后使用GetKeyState,就像Rruz的答案演示了,在您收到当前键盘消息时检测 Ctrl 是否已经关闭。)