gpt4 book ai didi

c++ - 鼠标按键模拟——右键和上下文菜单问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:06 25 4
gpt4 key购买 nike

我正在对远程触摸板进行编程。所以我需要在 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

您根本不需要担心窗口层次结构!

关于c++ - 鼠标按键模拟——右键和上下文菜单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5802177/

25 4 0