我们如何用Xlib / C模拟鼠标点击?

问题描述 投票:0回答:4

我想找到 C / Xorg 代码来“输入”鼠标左键单击。我期望一行代码,但我发现用 C 编写的唯一代码大约有两打行长,而且它们无论如何都不起作用:( 似乎可以在 Windows 中完成,但我在 Linux 中.

问题的原因是我编写了一个实用程序,可以让我使用键盘在多个屏幕之间移动鼠标指针。唯一的问题是,如果我移动到窗口 abc 曾经所在的位置,但另一个窗口 xyz 已加载到同一位置的顶部,则鼠标指针移动到 xyz 就可以了,但 xyz 没有焦点 - 直到我点击鼠标左键。所以,我想将“点击”构建到我的代码中。

我尝试过但不起作用的代码是基于 XSendEvent() 的。

c xlib
4个回答
5
投票

是的,我或多或少明白了。无论如何,似乎就是这样:

{
#include <X11/extensions/XTest.h>
XTestFakeButtonEvent(display, 1, True, CurrentTime);
XTestFakeButtonEvent(display, 1, False, CurrentTime);
XFlush(display);
}

...并将“-lXtst”添加到 Makefile 中的 LDFLAGS 行。

Xlib 看起来太难了。我曾建议使用其他库,我希望我知道如何进行更改。

谢谢R。


3
投票

为什么不直接升起/聚焦窗口而不是尝试制作假点击事件?这应该更可靠,并且适用于所有窗口管理器,甚至是非点击聚焦的窗口管理器。


2
投票

xdotool 是执行此操作的简单方法。它是一个命令行工具。您可以在简单的脚本中使用它。例如:

#!/bin/sh
xdotool mousemove x y
xdotool click 1

0
投票

我也需要同样的东西。我需要做的是让窗口管理器相信发生了硬件级鼠标单击。如果窗口已经映射并且完全(或部分)被遮挡,XMapRaished 不起作用 - XMapRaished 不会根据需要“将其带到顶部”。 我想从 C++ 的 X11 级别执行此操作,而不是从任何愚蠢的 shell 命令执行此操作。 大家有什么想法吗?

© www.soinside.com 2019 - 2024. All rights reserved.