【发布时间】:2013-03-12 10:12:02
【问题描述】:
我对在 Microsoft Word 等特定应用程序的上下文中进行键盘监听很感兴趣。谷歌搜索表明,解决此问题的唯一方法是使用全局键盘挂钩。
全局键盘挂钩监听所有活动应用程序中的所有按键事件。例如,用户在 Microsoft Word 中输入文本(我需要捕捉这些事件),同时在 Facebook 上给他的朋友写一些消息。这意味着我的键盘监听器也处理 Facebook 消息,但这对我来说是多余的信息。
所以我的问题是,如何确定最后按下的键的主机应用程序?或者换句话说,我如何确定当前活动的应用程序以了解按键被按下的“上下文”?
【问题讨论】:
-
如果您想跟踪任何应用程序中发生的关键事件,则需要一个全局挂钩,但如果您仅需要与其中一个进行交互像 Microsoft Word 这样的单个应用程序,您可能最好使用 Word 特定的机制来实现这一点。例如,某种加载项在与 Word 相同的上下文中运行,并且只在 Word 接收事件时接收事件。
-
可能是GetForegroundWindow 并检查 Microsoft Word 是否是活动窗口。然后,如果不是用户正在处理的窗口,您的键盘侦听器可以忽略所有按键。
-
关于“特定于 Word 的机制” - 我已经在开发 COM 插件,但不幸的是,开发人员没有工具来处理按键事件。谷歌说 - 全局键盘挂钩或宏。但是没有人回答我之前在 stackoverflow 上关于使用 MS Word 宏进行按键监听的问题。这就是为什么我要询问全局键盘挂钩上下文。关于 GetForegroundWindow - 谢谢,我试试看。
-
不需要安装全局钩子。您可以为您感兴趣的线程安装一个线程钩。
标签: c# winapi com hook keyboard-hook