1

我面临的问题是,我无法获得 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 的正确方法吗?

4

1 回答 1

2

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

Marshal.GetLastWin32Error()不工作可能是因为你没有添加SetLastError = trueDllImportAttributefor SetWindowsHookEx

于 2012-05-15T10:49:23.653 回答