Название: Имитация мышки
Отправлено: west от Февраль 24, 2008, 17:30
Надо сделать програмку по имитации работы мышки, т.е. управлять ей с клавы, по сети, с файла - все равно. Что касается ее позиционирования - все понятно, как сделать "клик", и даже "дабл клик" - чего-то вообще не ясно. Есть идеи? Клик должен быть полноценный :-\, с сохранением всех последствий и эффектов.
Название: Re: Имитация мышки
Отправлено: SiRuS от Февраль 26, 2008, 10:11
Делал через events из XLib. Либо гугли xlib mouse events, либо жди до завтра и я выложу сорс.
Название: Re: Имитация мышки
Отправлено: west от Февраль 26, 2008, 10:30
Я пошел гуглить, но сорсы жду с нетерпеньем ;)
Название: Re: Имитация мышки
Отправлено: SiRuS от Февраль 27, 2008, 18:56
#include <stdio.h> #include <stdlib.h> #include <string.h>
#include <unistd.h>
#include <X11/Xlib.h> #include <X11/Xutil.h>
void mouseClick(int button) { Display *display = XOpenDisplay(NULL);
XEvent event; if(display == NULL) { fprintf(stderr, "Errore nell'apertura del Display !!!\n"); exit(EXIT_FAILURE); } memset(&event, 0x00, sizeof(event)); event.type = ButtonPress; event.xbutton.button = button; event.xbutton.same_screen = True; XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.xbutton.root, &event.xbutton.window, &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); } if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "Errore nell'invio dell'evento !!!\n"); XFlush(display); usleep(100000); event.type = ButtonRelease; event.xbutton.state = 0x100; if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "Errore nell'invio dell'evento !!!\n"); XFlush(display); XCloseDisplay(display); } int main(int argc,char *argv[]) { if(argc!=3) { printf("Usage: %s <clics> <sec>\n",argv[0]); exit(0); } int i; int cl=atoi(argv[1]); while(1) { for(i=0;i<cl;i++) mouseClick(1); sleep(atoi(argv[2])); } return 0; }
Собственно работа с евентами чесно взята с буржуйского сайта. С какого точно не помню..
|