C# 全局键盘钩子发射两次
我有以下方法,试图截获全局按下ALT+Z键:C# 全局键盘钩子发射两次,c#,windows,hook,C#,Windows,Hook,我有以下方法,试图截获全局按下ALT+Z键: private int KbHookProc(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0) { var hookStruct = (KbLLHookStruct)Marshal.PtrToStructure(lParam, typeof(KbLLHookStruct)); bool altDown = GetKeyState
private int KbHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0)
{
var hookStruct = (KbLLHookStruct)Marshal.PtrToStructure(lParam, typeof(KbLLHookStruct));
bool altDown = GetKeyState(VK_ALT) != 0;
if (altDown)
{
if(hookStruct.vkCode == 0x5A) //alt + z
{
MessageBox.Show("ALT + Z");
}
}
}
return CallNextHookEx(_hookHandle, nCode, wParam, lParam);
}
这种方法几乎可以工作,但是每次输入key命令时,都会显示两次消息“ALT+Z”
起初,我认为我捕获了两次事件,一次是在按下Z
时,一次是在释放Z
时。我试图修改代码来检查wParam
变量,以查看事件是键向上还是键向下事件
public const int WM_KEYDOWN = 0x0100;
...
if(hookStruct.vkCode == 0x5A && wParam == (IntPtr)WM_KEYDOWN) //alt + z
{
MessageBox.Show("ALT + Z");
}
但是,在这种情况下,当我输入key命令时,不会显示任何消息
我错过了什么 为什么要在有API调用时使用钩子呢?这确实让事情变得简单多了!:)谢谢