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