2015-01-16 4 views
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를 사용하지 않고 마우스 클릭을 보낼 수 있습니까?

+0

에서 사용 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

답변

관련 문제