在我的 C# 应用程序中,我想做 keyhook,但是,当按下键时调用的方法在另一个线程中调用。这样就不会发生我的程序省略一个键的情况,因为我的应用程序正忙于其他事情。我怎样才能使它在另一个线程中?我发现信息表明,根据我创建钩子的线程,按下键时调用的方法将在该线程中调用,但这不会发生。不管我在哪个线程中钩住它,这个方法总是在主线程中被调用。请帮忙。这是我的代码大纲:
int HookProc(int code, int wParam, ref lParamStruct lParam)
{
// ... this should be invoked in another thread - thread th, which I use to call SetWindowsHook
}
void SetWindowsHook()
{
lpMsg msg = new lpMsg();
PeekMessage(out msg, new IntPtr(0), 0, 0, PM_NOREMOVE);
hhook = SetWindowsHookEx(WH_KEYBOARD_LL, HookProc, new IntPtr(0), 0);
while (GetMessage(out msg, new IntPtr(0), 0, 0))
{
DefWindowProc(msg.hwnd, msg.message, msg.wParam, msg.lParam);
if (abortThreadFlag)
break;
}
UnhookWindowsHookEx(hhook);
}
SetWindowsHook 是以这种方式调用的,但 id 不会强制在另一个线程中调用该方法:
Thread th = new Thread(SetWindowsHook);
th.Start()