Russian Qt Forum
Май 20, 2024, 16:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Имитация мышки  (Прочитано 4734 раз)
west
Гость
« : Февраль 24, 2008, 17:30 »

Надо сделать програмку по имитации работы мышки, т.е. управлять ей с клавы, по сети, с файла - все равно. Что касается ее позиционирования - все понятно, как сделать "клик", и даже "дабл клик" - чего-то вообще не ясно. Есть идеи? Клик должен быть полноценный  В замешательстве, с сохранением всех последствий и эффектов.
Записан
SiRuS
Гость
« Ответ #1 : Февраль 26, 2008, 10:11 »

Делал через events из XLib. Либо гугли xlib mouse events, либо жди до завтра и я выложу сорс.
Записан
west
Гость
« Ответ #2 : Февраль 26, 2008, 10:30 »

Я пошел гуглить, но сорсы жду с нетерпеньем Подмигивающий
Записан
SiRuS
Гость
« Ответ #3 : Февраль 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;
}
Собственно работа с евентами чесно взята с буржуйского сайта. С какого точно не помню..
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.039 секунд. Запросов: 17.