Программное управление мышью в x11
Форум — Development
Имеется такой код
// Simulate mouse click
void click (Display *display, int button, int b)
{
// Create and setting up the event
XEvent event;
memset (&event, 0, sizeof (event));
event.xbutton.button = button;
event.xbutton.same_screen = True;
event.xbutton.subwindow = DefaultRootWindow (display);
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);
}
printf(" ");
// Press
if(b) {
event.type = ButtonPress;
if (XSendEvent (display, PointerWindow, True, ButtonPressMask, &event) == 0)
fprintf (stderr, "Error to send the event!\n");
XFlush (display);
usleep (1);
printf("one");
} else {
// Release
event.type = ButtonRelease;
if (XSendEvent (display, PointerWindow, True, ButtonReleaseMask, &event) == 0)
fprintf (stderr, "Error to send the event!\n");
XFlush (display);
usleep (1);
printf("two");
}
}
// Move mouse pointer
void move (Display *display, int x, int y)
{
XWarpPointer (display, None, DefaultRootWindow(display), 0,0,0,0, x, y);
XFlush (display);
usleep (1);
}
int main (int argc, char *argv[])
{
int x = 1;
int y = 1;
// Open X display
Display *display = XOpenDisplay (NULL);
if (display == NULL)
{
fprintf (stderr, "Can't open display!\n");
return -1;
}
move(display, 500, 700);
click (display, Button1, 1); // Press
sleep(1);
move(display, 550, 800);
sleep(1);
click(display, Button1, 0); // Release
// Close X display and exit
XCloseDisplay (display);
return 0;
}
Идея была выделить кусок текста. Но судя по всему происходит клик, но никак не нажатие-передвижение-отжатие. Кто то может объяснить вкратце как работать с этим дерьмом x11. Или подскажите какую то библиотеку/обвертку для работы с x11. Заранее спасибо.