用于组合的全局低级键盘钩

时间:2012-03-09 06:47:18

标签: c# .net winapi keyboard-shortcuts keyboard-hook

由于this教程,我知道如何做“全局低级键盘挂钩”

我还想监控组合键或快捷键,

我的想法是,我可以拥有一系列标志,可以代表键盘按键的向下状态。

当falg SET或1 时,按键关闭,当 UNSET或0 时,按键启动。

我可以将它用于组合键\快捷键。当一个键关闭时,钩子将把我带到一个我将处理事件的函数。我要做的是,检查是否设置了任何其他特定标志。如果是,那么这意味着同时按下两个键,因此我有我的组合。

我可以让这个技巧奏效。

我正在寻找的是一个更好的选择。有没有。

1 个答案:

答案 0 :(得分:4)

是的,更好的选择是RegisterHotKey function

全局钩子是一种非常重的方法,只应在绝对必要的地方使用。在这种情况下,听起来不仅是不必要的全局钩子,而且实际上比每次按下所需的键序列时响应自动生成的简单WM_HOTKEY message更复杂。

由于您使用的是.NET,因此需要P / Invoke RegisterHotKey函数 定义看起来像这样:

[DllImport("user32.dll", SetLastError = true)]
static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);

WM_HOTKEY消息,您可以通过覆盖表单的WndProc method(调用RegisterHotKey函数时指定其句柄的消息)来处理,该消息对应于以下值: / p>

const int WM_HOTKEY = 0x0312;

RegisterHotKey函数的链接文档中明确提供了其他必需值。当然,文档需要阅读;否则你会错过重要的警告。