下面的代码片段工作的大部分时间,除了在某些窗口。 例如,最新的Ubuntu下它不会在文件浏览器中选择文件夹的工作。 它似乎工作只是在其他地方,但这种差距是显著。 我怀疑它与我如何使用XQueryPointer做的,但我已经试过几乎所有的例子我能找到。 如果我使用电脑的鼠标,相反,它的工作的罚款。 FYI:我已经尝试了这些问题的答案: 发送纲领性事件 Capuring鼠标输入 ,但他们不工作有什么不同?
下面的代码:
#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);
}