【问题标题】:Sending keyboard events to other windows from wxwidget app in linux从 linux 中的 wxwidget 应用程序向其他窗口发送键盘事件
【发布时间】:2012-09-01 00:28:30
【问题描述】:

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

我的问题是:

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

谢谢
丹尼尔

【问题讨论】:

    标签: linux wxwidgets x11


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

    【讨论】:

    • 那么,你是说我不能在 WX 中这样做,但我必须使用 Xlib?
    • WX 似乎没有围绕这些功能提供用户可访问的包装器,所以是的,您必须直接使用它们。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 2019-07-28
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      相关资源
      最近更新 更多