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