根据msdn上的这篇文章,可以将特定窗口设置为前台窗口,然后向其发送击键...但我需要将击键发送到后台窗口,这样无论用户在做什么都可以继续不间断。
4 回答
我用快捷键来做到这一点。我有一个侧面有多个子窗口的应用程序。主窗口启用子窗口的Form.KeyPreview属性,然后在该子窗口上注册适当的事件(KeyPress、KeyDown 或 KeyUp)。通过此设置,主窗口可以处理子窗口中的所有键。
我在 Windows Mobile/CE 上使用的技术是挂钩键盘,然后简单 PostMessage()
地将它们发送到目标窗口以正常处理。这种技术也应该适用于桌面。关于挂钩键盘的代码项目有几个示例 - http://www.codeproject.com/KB/system/globalsystemhook.aspx。您的问题不清楚前景窗口是否是您的应用程序的一部分。如果是,您不会简单地从后台表单订阅前台表单关键事件之一吗?
所以基本上是一个击键监听器?Java 有一个机器人类,它监听击键并可以对它们采取行动(例如,我键入“Hello World”,该类将自动将其写入文件或其他窗口)。
我过去创造了类似的东西。您可以创建一个 java 程序,在后台以恒定的 while 循环运行,并且只监听击键。将程序设置为将每次击键写入文件或特定位置。因为这是一个短暂的while循环,并且只在按键被按下时才做出反应,所以它几乎不占用处理能力,也不影响前台程序的性能。
也许您应该只在前台窗口中捕获击键并将它们传递给后台窗口(委托)。或者,如果它们有些复杂,您可以使用全局热键。无论如何,将键从前台表单传递到后台表单应该是更好的解决方案。
我找到了一个很好的例子,它不是关于热键的,但这个概念也应该适用于你的情况。
http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx