【问题标题】:Send keystroke to non-foreground window将击键发送到非前景窗口
【发布时间】:2011-11-18 16:31:31
【问题描述】:

根据msdn上的this article,可以将特定窗口设置为前台窗口,然后然后向它发送击键...但是我需要向其中的窗口发送击键背景,这样用户正在做的任何事情都可以不间断地继续。

【问题讨论】:

  • 这在 Windows 中是不可能的。

标签: c# .net keypress simulate


【解决方案1】:

也许您应该在前台窗口中捕获击键并将它们传递给后台窗口(委托)。或者,如果它们有些复杂,您可以使用全局热键。无论如何,将键从前台表单传递到后台表单应该是更好的解决方案。

我发现了一个很好的例子,它与热键无关,但这个概念也应该适用于你的情况。

http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx

【讨论】:

    【解决方案2】:

    所以基本上是一个按键监听器? Java 有一个机器人类,它可以监听击键并对其进行操作(例如,我键入“Hello World”,该类会自动将其写入文件或其他窗口)。

    我过去曾创造过类似的东西。您可以创建一个 java 程序,在后台以恒定的 while 循环运行,并且只监听击键。将程序设置为将每次击键写入文件或特定位置。因为这是一个短暂的while循环,只有在按键被按下时才会做出反应,所以它几乎不占用处理能力,也不影响前台程序的性能。

    【讨论】:

    • 我需要后台程序接收按键事件,就好像它被聚焦并且用户按下了键盘上的一个键一样。
    【解决方案3】:

    我用快捷键来做到这一点。我有一个侧面有多个子窗口的应用程序。主窗口启用子窗口的Form.KeyPreview 属性,然后在该子窗口上注册适当的事件(KeyPress、KeyDown 或 KeyUp)。通过此设置,主窗口可以处理子窗口中的所有键。

    【讨论】:

      【解决方案4】:

      我在 Windows Mobile/CE 上使用的技术是挂钩键盘,然后简单地使用 PostMessage() 将它们发送到目标窗口以正常处理。这种技术也应该适用于桌面。 Code Project 中有几个挂钩键盘的示例 - http://www.codeproject.com/KB/system/globalsystemhook.aspx。您的问题不清楚前景窗口是否是您的应用程序的一部分。如果是这样,您不是简单地从后台表单订阅前台表单关键事件之一吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多