Evenement souris sous linux

Signaler
Messages postés
35
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
14 juin 2008
-
Messages postés
35
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
14 juin 2008
-
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

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

Signer Ralebole
Messages postés
35
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
14 juin 2008

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.