1

我正在使用 SetWindowsHookEx 在 c# 中创建一个低级键盘挂钩,问题是如何使键盘事件函数在主线程以外的线程上运行?另外,除了主线程之外,我目前没有其他线程,那么如何创建一个在键盘钩子事件发生之前会停止的线程?

4

2 回答 2

2

这是C# 键盘挂钩的代码。

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

于 2008-10-07T13:45:00.470 回答
0

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

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

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

不要忘记在“共享”字段周围实施适当的锁定。

于 2008-10-07T13:45:26.617 回答