delphi - 为什么 Alt 键没有触发我的低级键盘 Hook ?

标签 delphi winapi keyboard hook

我正在尝试键盘 Hook ,似乎 Alt 键(以及其他命令键)没有被 Hook ,我不明白为什么?

下面是键盘 Hook ,其中包含一些调试代码,可打印出 vkCode、scanCode 和 lpChar 读数。

它基本上适用于所有键,但不适用于 AltCtrl

function LowLevelKeybdHookProc(nCode, wParam, lParam : integer) : integer; stdcall;
// possible wParam values: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
var info : ^KeybdLLHookStruct absolute lParam;
    lpChar : word;
    kState : TKeyboardState;

begin
result := CallNextHookEx(kHook, nCode, wParam, lParam);
with info^ do
  case WParam of
    WM_KEYDOWN : begin
      GetKeyboardState(kState);

      Form1.Memo1.Text:=Form1.Memo1.Text+'vkCode: '+inttostr(vkCode)+
             ' scanCode: '+inttostr(scanCode)+
             ' lpChar: '+inttostr(lpChar)+;
    end;
  end;
end;

最佳答案

要检测 ALT 键按下,您需要响应 WM_SYSKEYDOWN

另请注意,您忽略了 nCode 的值。您必须非常仔细地阅读文档并按照其说明进行操作。

A code the hook procedure uses to determine how to process the message. If nCode is less than zero, the hook procedure must pass the message to the CallNextHookEx function without further processing and should return the value returned by CallNextHookEx.

This parameter can be one of the following values.

HC_ACTION (0). The wParam and lParam parameters contain information about a keyboard message.

关于delphi - 为什么 Alt 键没有触发我的低级键盘 Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24119911/

相关文章:

python - 如何拦截在 Python 程序的终端窗口中(且仅在)中按下的键?

windows - 如何像在 Windows 资源管理器中一样在 Delphi 中获取排序顺序?

c - WinAPI 命名管道位置

java - 以编程方式关闭 Windows 中另一个进程打开的 txt 文件

c++ - 无法捕获子类编辑框控件的 VK_RETURN 键

java - Android 避免键盘以编程方式覆盖编辑文本

Android 键盘处理入门?

delphi - 如何在Delphi组件中存储大文本?

delphi - 让这变得更容易

delphi - 任何可用的 Delphi 趋势控件