SetWindowsHookEx 返回 0,GetLastWin32Error() 也返回 0

本文关键字:返回 SetWindowsHookEx GetLastWin32Error | 更新日期: 2023-09-27 18:34:16

我遇到了一个问题,我的我无法获得SetWindowsHookEx返回的有效hookID,并且GetLastWin32Error()也返回0。我写了下面的代码:

_LowLevelhookID = SetWindowsHookEx((int)HookType.WH_KEYBOARD_LL, LowLevelKeyboardHookHandler, IntPtr.Zero, GetCurrentThreadId());
int errorCode = -1;
if(_LowLevelhookID == (IntPtr)0)
{
    errorCode = Marshal.GetLastWin32Error(); 
}

实际上,我只想为我的应用程序创建一个低级键盘钩子,根据 SetWindowsHookEx 参数描述,如果我想设置当前线程 ID 并仅捕获应用程序的键事件,我将 hMod 参数设置为 null。

任何人都可以确认 GetCurrentThreadId() 是需要运行我的应用程序的 ThreadID 的正确方法吗?

SetWindowsHookEx 返回 0,GetLastWin32Error() 也返回 0

WH_KEYBOARD_LL钩子是全局的,您不能仅为您的应用程序安装它。

Marshal.GetLastWin32Error()不起作用可能是因为您没有将SetLastError = true添加到DllImportAttribute中以进行SetWindowsHookEx