【发布时间】:2008-10-07 13:38:32
【问题描述】:
我正在使用 SetWindowsHookEx 在 c# 中创建一个低级键盘挂钩,问题是如何使键盘事件函数在主线程以外的线程上运行?另外我目前除了主线程之外没有其他线程,那么如何创建一个在键盘钩子事件发生之前会停止的线程?
【问题讨论】:
标签: c# keyboard-hook
我正在使用 SetWindowsHookEx 在 c# 中创建一个低级键盘挂钩,问题是如何使键盘事件函数在主线程以外的线程上运行?另外我目前除了主线程之外没有其他线程,那么如何创建一个在键盘钩子事件发生之前会停止的线程?
【问题讨论】:
标签: c# keyboard-hook
这是C# Keyboard hook的代码。
你只需要调用 Hook.CreateHook(METHODNAMEHERE);在一个新的 Thread 中(参见 Thread 类)。
【讨论】:
由于有一个如何在新线程上设置钩子的答案,这仅回答了问题的第二部分:
如果您使用的是 Windows 窗体应用程序,则在使用附加线程时会遇到一些问题。他们需要使用 Control.Invoke 与表单控件进行通信。
除此之外,启动您的“工作”线程,并使其等待某个 ManualResetEvent 或 AutoResetEvent。当您的键盘挂钩收到按键通知时,使用一些“共享”字段来放置按键,然后重置事件,以便“等待”线程可以处理它。
不要忘记在“共享”字段周围实施适当的锁定。
【讨论】: