2015-01-16 3 views
1

Предположим, что я знаю идентификатор окна. Тогда я могу послать мыши к окну таким образом (это окно на весь экран так корневые и оконные координаты совпадают):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

Если изменить положение х/у в XWarpPointer, где имеет место пресса события мыши? На (300,200) или в позиции, предоставленной XWarpPointer? Кроме того, вы устанавливаете event.xbutton.state в 0 для ButtonPressEvent, указывая, что кнопка не была нажата. Наконец, вы используете жестко закодированное значение «0x100» для ButtonRelease; не делайте этого, используйте константы Button * Mask (см. http://www.tronche.com/gui/x/xlib/events/keyboard-pointer/keyboard-pointer.html) – JvO

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^