【发布时间】:2012-09-01 00:28:30
【问题描述】:
我正在使用 C++ 和 wxWidgets 编写一个 linux 应用程序。
从我的应用程序中,我需要将键盘事件发送到当前具有焦点的窗口(不属于我的应用程序!)。
我的问题是:
- 如何找出焦点所在的窗口?
- 如何将键盘事件发送到不属于我的应用程序的窗口?
谢谢
丹尼尔
【问题讨论】:
我正在使用 C++ 和 wxWidgets 编写一个 linux 应用程序。
从我的应用程序中,我需要将键盘事件发送到当前具有焦点的窗口(不属于我的应用程序!)。
我的问题是:
谢谢
丹尼尔
【问题讨论】:
XGetInputFocus(3)。Window 是 Xlib 数据类型)。使用任何有效的发送事件的方法。我知道有两种方法:XSendEvent(3) 和XTestFakeKeyEvent(3)。前一种方法不适用于某些选择忽略来自XSendEvent 的事件的程序。后一种需要XTest 扩展,它存在于大多数(但不是所有)现代服务器中。InputFocus 是XSendEvent 的有效窗口指示符,而XTestFakeKeyEvent 无论如何都会传递给具有焦点的窗口,因此您可能根本不需要调用XGetInputFocus。李>
【讨论】:
如果你使用 2.9,你可以使用wxUIActionSimulator。它旨在与同一 (wxWidgets) 应用程序的其他窗口一起工作,但 AFAICS 在使用 X11 时它实际上应该与其他应用程序的窗口一起工作(但我自己没有测试它)。
【讨论】: