以下代码段可用于大多数时间,除了某些窗口。例如,在最新的Ubuntu下,它不适用于在文件浏览器中选择文件夹。它似乎在其他任何地方都有效,但这种差距非常显着。我怀疑它与我如何使用XQueryPointer有关,但我已经尝试过几乎所有可以找到的示例。如果我使用电脑的鼠标,它的工作很好。 FYI:我已经尝试了这些问题的答案: Sending Programmatic events Capuring Mouse Input 但他们不工作有什么不同?发送X11点击事件不适用于某些窗口
下面的代码:
#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);
}
您应该使用XTest扩展。 – ninjalj