如何在C#中创建具有不同线程的键盘钩子?

时间:2008-10-07 13:38:32

标签: c# keyboard-hook

我正在使用SetWindowsHookEx在c#中创建一个低级键盘钩子,问题是如何让on key事件函数在主线程的其他线程上运行?另外我目前还没有主线程以外的线程,所以如何创建一个将停止直到键盘钩子事件发生的线程?

2 个答案:

答案 0 :(得分:2)

以下是C# Keyboard hook的代码。

你只需要调用Hook.CreateHook(METHODNAMEHERE);在一个新的Thread中(参见Thread类)。

答案 1 :(得分:0)

由于答案如何在新线程上设置挂钩,这只回答了问题的第二部分:

如果您使用的是Windows窗体应用程序,那么使用其他线程会有一些问题。他们需要使用Control.Invoke与表单控件进行通信。

除此之外,启动“worker”线程,并使其等待某些ManualResetEvent或AutoResetEvent。当键盘钩子收到按键通知时,使用一些“共享”字段放置键,然后重置事件,“等待”线程可以处理它。

不要忘记在“共享”字段周围实现正确的锁定。