1

我正在使用 C++ 和 wxWidgets 编写一个 linux 应用程序。
从我的应用程序中,我需要将键盘事件发送到当前具有焦点的窗口(不属于我的应用程序!)。

我的问题是:

  1. 如何找出焦点所在的窗口?
  2. 如何将键盘事件发送到不属于我的应用程序的窗口?

谢谢
丹尼尔

4

2 回答 2

2
  1. XGetInputFocus(3).
  2. X11 不关心“应用程序”。只有窗户。有一个窗口 ID(Window是 Xlib 数据类型)就足够了。使用任何有效的发送事件的方法。我知道有两种方法:XSendEvent(3)XTestFakeKeyEvent(3)。前一种方法不适用于某些选择忽略来自XSendEvent. 后一个需要XTest扩展,该扩展存在于大多数(但不是所有)现代服务器中。
  3. 请注意,这InputFocus是 的有效窗口指示符XSendEvent,并且XTestFakeKeyEvent无论如何都会传递到具有焦点的窗口,因此您可能根本不需要调用XGetInputFocus
于 2012-09-07T12:07:28.173 回答
1

如果你使用 2.9,你可以使用wxUIActionSimulator。它旨在与同一 (wxWidgets) 应用程序的其他窗口一起使用,但 AFAICS 在使用 X11 时它实际上应该与其他应用程序的窗口一起使用(但是我自己没有测试它)。

于 2012-09-08T13:47:38.030 回答