Evenement souris sous linux

cs_bordeaux Messages postés 35 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 14 juin 2008 - 3 mars 2006 à 17:49
cs_bordeaux Messages postés 35 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 14 juin 2008 - 3 mars 2006 à 18:19
Bonjour a tous,

j'ai cree une application qui permet de recuperer la position de la souris, et aussi de la deplacer.
Mais je n'arrive pas a envoyer un clic souris.

Est-ce que quelqu'un pourrait m'aider.
Je post mon code, ca evitera aux autres de chercher pendant des heures s'ils veulent bouger leur souris.

Apparement c'est dans la fonction cursorClick faut bidouiller avec le XButtonPress, perso j'y ai passé deux bonnes heures et j'ai pas trouvé.

Merci d'avance.

/***************************************************************************
mouse - a simple program to move mouse on screen
Azundris <hacks@azundris.com>
inspired by movemouse by Philippe Brochard <hocwp@free.fr>
***************************************************************************/

/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <X11/Xlib.h>
#include <X11/extensions/XTest.h>

char *me=NULL;
Display *dpy;
int r=0;
Window root;
Window NULL_B[1];
unsigned int NULL_A[1];

void cursorClose(){
XCloseDisplay(dpy);
}

void cursorInit(){
char *display="";
int i,j=0;

#define MAXMOUSE 3
int md[MAXMOUSE]={ 0, 0, 0};

int pointer_x[1],pointer_y[1];


if(!(dpy=XOpenDisplay(display))) {
fprintf(stderr, "Can not open display "%s"...\n",display);
exit(1);
}

root=DefaultRootWindow(dpy);
}

void cursorMove(int x , int y){
XWarpPointer(dpy,None,(r?None:root),None,None,None,None,x,y);
}

void cursorClick(int x, int y){
XButtonEvent buttonEvt;
buttonEvt.type=ButtonPress;
buttonEvt.display = dpy;
buttonEvt.root = RootWindow(dpy,0);
buttonEvt.state = 0;
buttonEvt.button = 0;
buttonEvt.window = root;
buttonEvt.time = CurrentTime;
buttonEvt.same_screen = True;
buttonEvt.subwindow = None;
buttonEvt.x=x;
buttonEvt.y=y;
buttonEvt.x_root=x;
buttonEvt.y_root=y;
XEvent evt;
evt.xbutton = buttonEvt;

XSendEvent(dpy,root,True,ButtonPressMask,&evt);
}

void cursorPosition(int *root_x, int *root_y,int *win_x, int *win_y){
XQueryPointer( dpy, (r?None:root), NULL_B, NULL_B, root_x , root_y , win_x , win_y, NULL_A);
}

int main(int argc, char **argv) {

int root_x,root_y,win_x,win_y;

cursorInit();

cursorPosition(&root_x,&root_y,&win_x,&win_y);
printf("mouse is Root : %d,%d Win %d %d\n",root_x,root_y,win_x,win_y);

if (argc>1)
cursorMove(atoi(argv[1]),atoi(argv[2]));

cursorClick(atoi(argv[1]),atoi(argv[2]));

cursorClose();

return 0;
}

2 réponses

cs_ralebole Messages postés 208 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 5 janvier 2023 1
3 mars 2006 à 18:13
Va voir ma source il y a les evenements souris
http://www.cppfrance.com/codes/CODE-COULEUR-GERER-COULEUR-X11_35547.aspx

Signer Ralebole
0
cs_bordeaux Messages postés 35 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 14 juin 2008
3 mars 2006 à 18:19
Merci pour ton aide, mais toi tu fais l'inverse.

Tu obtiens un evenement puis tu le gères, alors que moi ce que je veux c'est l'inverse :
Creer un evenement de clique souris et l'exécuter.
Creer avec XButtonEvent
et exécuter avec XSendEvent

Merci quand meme.
0
Rejoignez-nous