1
我正在編程遠程觸摸板。所以我需要在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);
}