有
LowLevelKeyboardProc
和KeyboardProc
。我想在 Windows 中全局监控 Alt+Q 等组合键,并根据按下 Alt+Q 执行操作。哪个钩子是最好的选择,我将如何继续检测热键中的所有键当前是否都被按下,而不是在钩子回调中逐一监视每个键?
你别无选择,WH_KEYBOARD_LL 是你唯一可以用 C# 编写的。 WH_KEYBOARD需要编写一个可以注入到另一个进程中的DLL。 托管代码不可能,CLR 无法正确初始化。
还要考虑RegisterHotKey()。示例代码就在那里,您会在页面下方找到 C#。
正如 Hans Passant 的回答所述,从技术上讲,除了连接到
WH_KEYBOARD_LL
钩子之外,没有其他办法。尽管如此,有一个托管库MouseKeyHook as nuget,它为您提供了一个方便的托管包装器。 github上的源代码。
最近添加了对检测快捷键、组合键和序列的支持。这是一个使用示例:
void DoSomething()
{
Console.WriteLine("You pressed UNDO");
}
Hook.GlobalEvents().OnCombination(new Dictionary<Combination, Action>
{
{Combination.FromString("Control+Z"), DoSomething},
{Combination.FromString("Shift+Alt+Enter"), () => { Console.WriteLine("You Pressed FULL SCREEN"); }}
});
有关详细信息,请参阅:检测按键组合和序列