[英]Mouse button simulation - right button and context menu problem
我正在编程远程触摸板。 所以我需要在C++中模拟Linux上的鼠标按键。 我使用 Xlib 函数来做到这一点。
两个触摸板按钮几乎都可以正常工作,但是例如,当我在 Linux 桌面上按下右键时,会显示上下文菜单,然后无法通过左键按下模拟从中选择任何内容。 我什至无法通过单击外部菜单来摆脱该上下文菜单。
有人能帮我如何让我的模拟触摸板按钮表现得像真实的吗?
这是我的代码:
void MainWindow::mouseClick(int button)
{
// Open X display
Display *display = XOpenDisplay (NULL);
if (display == NULL)
{
cerr << "Can't open display!" << endl;
}
// Create and setting up the event
XEvent event;
memset (&event, 0, sizeof (event));
event.xbutton.button = button;
event.xbutton.same_screen = True;
XQueryPointer (display, RootWindow(display, DefaultScreen(display)),
&event.xbutton.root, &event.xbutton.subwindow,
&event.xbutton.x_root, &event.xbutton.y_root,
&event.xbutton.x, &event.xbutton.y,
&event.xbutton.state);
event.xbutton.subwindow = event.xbutton.window;
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);
}
// Press
event.type = ButtonPress;
if (XSendEvent (display, PointerWindow, True, 0xfff, &event) == 0) cerr << "Error to send the event!" << endl;
XFlush (display);
usleep (1);
// Release
event.type = ButtonRelease;
event.xbutton.state = 0x100;
if (XSendEvent (display, PointerWindow, True, 0xfff, &event) == 0) cerr << "Error to send the event!" << endl;
XFlush (display);
usleep (1);
XCloseDisplay (display);
}
我在处理 Xlib 时遇到了类似的问题。 我最终最终使用了 Xtest 库。 这很简单。 只需在您的 linux 盒子上安装 libxtst。
XTestFakeMotionEvent(display, -1, x, y, CurrentTime );
XTestFakeButtonEvent(display, button, True, CurrentTime); //Mouse down
XTestFakeButtonEvent(display, button, False, CurrentTime); //Mouse up
您完全不必担心 windows 层次结构!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.