发送 X11 点击事件不适用于某些窗口

2023-12-20

以下代码片段在大多数情况下都有效,除了在某些窗口中。例如,在最新的 Ubuntu 下,它无法在文件资源管理器中选择文件夹。它似乎在其他地方都适用,但这个差距是巨大的。我怀疑这与我使用 XQueryPointer 的方式有关,但我已经尝试了几乎所有我能找到的示例。如果我改用电脑的鼠标,那就没问题了。 仅供参考:我已经尝试过这些问题的答案:发送程序化事件 https://stackoverflow.com/questions/4402216/sending-programtic-mouse-events-to-x 捕获鼠标输入 https://stackoverflow.com/questions/2607010/linux-how-to-capture-screen-and-simulate-mouse-movements但它们的工作原理并没有什么不同...

这是代码:

#include <string.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

void SendClick(int button, int down) {
    Display *display = XOpenDisplay(NULL);
    XEvent event;

    if(display == NULL)
    {
        return;
    }

    memset(&event, 0, sizeof(event));

    event.xbutton.button = button;
    event.xbutton.same_screen = True;
    event.xbutton.subwindow = DefaultRootWindow (display);

    while (event.xbutton.subwindow)
    {
      event.xbutton.window = event.xbutton.subwindow;
      XQueryPointer (display, event.xbutton.window,
             &event.xbutton.root, &event.xbutton.subwindow,
             &event.xbutton.x_root, &event.xbutton.y_root,
             &event.xbutton.x, &event.xbutton.y,
             &event.xbutton.state);
    }

    event.type = down ? ButtonPress : ButtonRelease;

    XSendEvent(display, PointerWindow, True, down ? ButtonPressMask : ButtonReleaseMask, &event); 

    XFlush(display);

    XCloseDisplay(display);
}

感谢 ninjalj 上面的评论让我走上了正轨。我不喜欢依赖扩展来执行此操作的想法以及它创建的额外依赖项,但它也是一个非常标准的扩展。工作完美...

对于那些遇到与我相同问题的人,以下代码块替换了我之前使用的代码并且运行良好:

#include <X11/extensions/XTest.h>

void SendClick(int button, Bool down) {
    Display *display = XOpenDisplay(NULL);
    XTestFakeButtonEvent(display, button, down, CurrentTime);
    XFlush(display);
    XCloseDisplay(display);
}

矮得多!

对于 Ubuntu,不要忘记安装 libxtst-dev 软件包。请务必将 -lXtst 添加到您的 LDFLAGS。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

发送 X11 点击事件不适用于某些窗口 的相关文章

  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 如何将 ggrough 图表另存为 .png

    说我正在使用R包裹ggrough https xvrdm github io ggrough https xvrdm github io ggrough 我有这个代码 取自该网页 library ggplot2 library ggroug
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum

随机推荐

  • 过滤字典以仅包含某些键?

    我有一个dict有一大堆条目 我只对其中的少数几个感兴趣 有没有一种简单的方法可以删除所有其他的 构造一个新的字典 dict you want key old dict key for key in your keys 使用字典理解 如果您
  • 我可以在改造方法声明中使用可变参数吗?

    我有一个 API 端点 定义为 GET https api server com something id or ids where ids可以是一个单个对象 IDor以逗号分隔的 ID 列表 e g https api server co
  • uint 数据类型的 ODP .NET 参数问题

    从本机 NET oracle 数据提供程序更新到 Oracle ODP NET 后 我遇到了以下问题 我有一个存储过程 它是包的一部分 它接受 32 个参数 除了一个指定为 OUT 参数之外 全部为 IN 参数 无论如何 这是我遇到的问题
  • Android Gcm 接收器/Gcm 侦听器服务在接收时强制应用程序到前台

    我在 Android 最低 SDK 15 上实现 GCM 时遇到了问题 我完全能够接收来自 GCM 的推送通知 并且我的GcmListenerService实施已发挥作用onMessageReceived 打回来 但我的问题是 每当一个或另
  • 如何在 Spring IoC XML 配置中从 web.xml 获取显示名称

    准确地说 我怎样才能得到的值
  • 我可以将 UIToolbar 项目居中吗?

    我正在 UIToolbar 上放置一个标签 根据此提示 将 UILabel 添加到 UIToolbar https stackoverflow com questions 333441 adding a uilabel to a uitoo
  • 使用 ACCOUNT_FORMS 覆盖 Django allauth 登录表单

    我已经用简单的设置变量覆盖了注册表单ACCOUNT SIGNUP FORM CLASS但要覆盖您需要使用的登录表单ACCOUNT FORMS login yourapp forms LoginForm 我有我想要的表单 并且它可以通过 Cr
  • Java对象的内存分配过程的步骤

    当一个类实例化以下对象时 内存中会发生什么 public class SomeObject private String strSomeProperty public SomeObject String strSomeProperty th
  • 如何区分USB设备类型?

    读完后这个问题 https stackoverflow com questions 68749 working with usb devices in net关于使用 USB 设备 我想知道操作系统使用什么方法来区分 USB 设备类型 例如
  • 重新映射键的热键不会触发热字符串

    我有一个热键和热字符串似乎不能一起工作 9 ob0 left 1 为了提供一些上下文 在代码的一部分中 我将所有符号重新映射到它们下面的数字 反之亦然 所以9打印括号 后来 我放置了一个热字符串 该热字符串将在左括号后键入右括号 然后将光标
  • 如何制作具有最小高度的可扩展div

    如果我有一个高度 100 和宽度 100 的div 它的背景颜色将主要取决于浏览器的高度和宽度 但是 如果该 div 内的内容动态增长 则该 div 将不会根据内容扩展 文本将重叠并流过该 div 另一方面 如果我将 min height
  • 将“任何 CPU/首选 32 位”设为 VS 中的默认构建设置背后的基本原理

    假设在 x64 Windows 机器上使用最新版本的 Visual Studio 和 C 并分配大量数据 果然 当使用默认构建设置进行编译时 如下图所示为 VS 2019 Preview 2 1 当进程达到 4 GB 时 您将耗尽用户虚拟地
  • 多线程性能超越核心

    如果我有一个启动的进程X线程数量 是否会有性能增益X高于数量CPU核心 假设所有线程都同步工作 没有对存储 网络的异步调用 例如 如果我有两个核心CPU 我会减慢应用程序启动 3 个以上持续工作线程的速度吗 这实际上取决于您的代码的作用 它
  • gitignore 不忽略文件夹

    在我的项目的根目录中我有一个foo文件夹 在 的里面foo文件夹我有一个bar文件夹 我想忽略对我的内部所有文件的所有更改bar文件夹 我的里面有这个gitignore foo bar 检查该文件夹 它存在并且包含要忽略的文件 gitign
  • 此版本的 Microsoft.AspNetCore.All 仅与 netcoreapp2.1 目标框架兼容

    当我从 2 0 升级到 NET Core 2 1 后尝试将应用程序发布到 Web 服务器时 收到以下消息 此版本的 Microsoft AspNetCore All 仅与 netcoreapp2 1 目标框架兼容 请以 netcoreapp
  • 在 DOM 元素上调用自定义方法

    我想在 DOM 元素上调用自定义方法 像这样 div div 我该如何开发这个问题 是否有必要使用jQuery 您不需要使用 jQuery 您可以使用document getElementById MyObject 获取 DOM 节点的引用
  • 加载库 193

    我正在创建一个 C CLI dll 它将加载到旧版 C 应用程序中 遗留应用程序通过传统的 LoadLibrary 调用来完成此操作 应用程序和 C CLI dll 均以 64 位模式编译 当发生 LoadLibrary 调用时 它会失败并
  • Rails 中的社交网络 - 哪个框架

    我应该使用 社区引擎 Insoshi 少爱 轨道空间 自己卷 我希望快速建立一个支持移动浏览的社交网络 虽然我熟悉 Ruby 和 Rails 但我不是专家 已经构建了一些基本的 Rails 应用程序 已经编写了一堆用于企业集成的 Ruby
  • 创建方案 .avsc Avro 时出现问题

    我在创建 avro 方案时遇到问题 下面我将放置我的方案 推特 avsc type record name twitter schema namespace com miguno avro fields name id type recor
  • 发送 X11 点击事件不适用于某些窗口

    以下代码片段在大多数情况下都有效 除了在某些窗口中 例如 在最新的 Ubuntu 下 它无法在文件资源管理器中选择文件夹 它似乎在其他地方都适用 但这个差距是巨大的 我怀疑这与我使用 XQueryPointer 的方式有关 但我已经尝试了几