1
창 ID를 알고 있다고 가정 해 봅시다. 내가 제거하면x11 - 포인터를 이동하지 않고 마우스 클릭 보내기
Display *display = XOpenDisplay(NULL);
if(display == NULL)
{
std::cout<<"Cannot open display"<<std::endl;
exit(EXIT_FAILURE);
}
XWarpPointer(display, None, RootWindow(display, DefaultScreen(display)), 0, 0, 0, 0, 300, 200);
XEvent event;
memset(&event, 0x00, sizeof(event));
event.type = ButtonPress;
event.xbutton.button = button;
event.xbutton.same_screen = True;
event.xbutton.root = RootWindow(display, DefaultScreen(display));
event.xbutton.window = 75497473;
event.xbutton.subwindow = 0;
event.xbutton.x_root = 300;
event.xbutton.y_root = 200;
event.xbutton.x = 300;
event.xbutton.y = 200;
event.xbutton.state = 0;
XSendEvent(display, PointerWindow, True, ButtonPressMask, &event) == 0)
XFlush(display);
usleep(100000);
event.type = ButtonRelease;
event.xbutton.state = 0x100;
XSendEvent(display, PointerWindow, True, ButtonReleaseMask, &event) == 0)
XFlush(display);
는 그 코드가 작동하지 않습니다 :
XWarpPointer(display, None, RootWindow(display, DefaultScreen(display)), 0, 0, 0, 0, 300, 200);
그럼 내가 (너무 루트 및 창 좌표가 같은 전체 화면 창입니다) 해당 창에이 방법을 마우스 클릭을 보낼 수 있습니다
XQueryPointer를 사용하지 않으므로 어디에 문제가 있는지 이해하지 못합니다. XWarpPointer를 사용하지 않고 마우스 클릭을 보낼 수 있습니까?
에서 사용 XTestFakeMotionEvent 당신이 XWarpPointer에 X/Y 위치를 변경하는 경우, 마우스를 눌러 이벤트가 발생합니까? (300,200) 또는 XWarpPointer에 주어진 위치에 있습니까? 또한 buttonPressEvent에 대해 event.xbutton.state를 0으로 설정하여 버튼을 실제로 누르지 않았 음을 나타냅니다. 마지막으로, ButtonRelease에 하드 코딩 된 값 '0x100'을 사용하고 있습니다. 그러지 않으려면 Button * Mask 상수를 사용하십시오 (http://www.tronche.com/gui/x/xlib/events/keyboard-pointer/keyboard-pointer.html 참조). – JvO