以下代碼段可用於大多數時間,除了某些窗口。例如,在最新的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