Bonjour à tous,
Comme on me l'a conseillé à la suite d'un sujet que j'ai ouvert (Utilisation de deux souris), j'aurais besoin de renseignements quant au fonctionnement et à l'utilisation de l'objet RawInput sur C++ Builder.
Pour réexpliquer le sujet pour ceux qui ont la flemme de lire l'autre sujet, dans le cadre d'un projet, j'ai besoin de mesurer une vitesse de déplacement d'un chariot, et pour ça j'ai pensé à une solution : utiliser une souris !
Bien entendu, au final cela fait une souris pour la navigation, et une deuxième pour les mesures. Cependant comme vous vous en doutez, lors de l'acquisition de données de la souris de mesure (que nous appellerons N2 pour plus de facilité), le curseur se déplace, comme il le fait lors de l'utilisation de la première souris (N1).
Mon but : Pouvoir mesurer avec N2 sans que le curseur ne soit affecté, et à l'inverse, naviguer avec N1, sans que les mesures ne soient affectées (des tests avec DirectInput, qui utilise le périphérique "général" des souris, ont justement révélés ce problème ...).
J'ai bien vu que c'était possible en téléchargeant USBMonitor qui est un Sniffer USB, j'ai pu sélectionner sur quelle souris je souhaitais analyser les données (donc périphériques HID identifiables séparément), et j'ai également pu faire ce que je cherche à faire.
J'ai donc désactivé l'une de mes deux souris via le gestionnaire de périphériques (mais sans la déconnecter), et j'ai lancé l'acquisition de cette même souris (N2 donc). Lors des déplacements, le curseur ne bougeait pas (vu que périphérique désactivé), mais le Sniffer recevait tout de même les trames de données, tandis que lors des déplacements de N1, le curseur bougeait, mais aucune trame n'était analysée.
En gros, il me faut pouvoir intégrer ces mêmes fonctionnalités à mon API (et une fois réussi, il me faudra décoder les trames, qui sont brutes, mais ça c'est un autre problème).
Pour ce faire on m'a conseillé d'utiliser RawInput. Le problème est que j'ai un mal fou à en comprendre le fonctionnement.
N'étant qu'en licence professionnelle, je n'ai pas un niveau d'expert, autant DirectInput a été assez simple à mettre en œuvre, autant là j'en chie comme pas permis.
Bref, voici le code que j'ai pour le moment :
Unit1.cpp
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Unit1.h
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Du coup je remet le dernier message que j'ai écrit sur l'ancien sujet :
En résumé :
J'ai fait pas mal de tests en mode pas à pas, et j'ai bien l'impression que codé comme je l'ai fait, la fonction n'est jamais appelée.
La variable "Message" a bien une valeur (qui change souvent d'ailleurs) mais j'arrive pas trop à en savoir davantage, du coup la fonction GetRawInputData n'est jamais appelée non plus, donc pas de données à analyser.
Malgré tes explications, j'ai quand même un peu de mal à saisir le concept, comment "apparaît" le message WM_INPUT ? Qu'entends-tu par le niveau de priorité défini à mon application ?
Pour ce qu'il me semble avoir compris, le bout de code que tu m'as montré renvoie le message WM_INPUT vers la fonction déclarée juste avant le BEGIN_MESSAGE_MAP dès réception de ce dernier ?
Et est-ce que c'est gênant que le driver de ma souris essaye de récupérer les mêmes infos que moi (sachant que RawInput est fait pour récupérer les données directement sur le port USB, avant le driver donc si j'ai bien compris) ?
Voilà, alors désolé du roman, mais je préfère prendre le temps de bien expliquer les choses, pour vous faciliter la tâche.
Cordialement.

 

 
		
		 
         
 

 
			
			


 
   
 


 Utilisation de RawInput
 Utilisation de RawInput
				 Envoyé par minnesota
 Envoyé par minnesota
					
 Répondre avec citation
  Répondre avec citation


 
			 
 




 
  
			 ispatch(&Message)" qui était dans ma fonction WMInput, ça compile bien, j'ai bien les valeurs de déplacement de la souris.
ispatch(&Message)" qui était dans ma fonction WMInput, ça compile bien, j'ai bien les valeurs de déplacement de la souris.
Partager