Bonjour,
j'intercepte les message windows afin d'obtenir la saisie d'un lecteur code barre,
je cherche comment obtenir le code caractere du VK_KKChose
exemple : VK_NUMPAD8 -> '8' et ce pour tout les caracteres VK_....
Merci
Bonjour,
j'intercepte les message windows afin d'obtenir la saisie d'un lecteur code barre,
je cherche comment obtenir le code caractere du VK_KKChose
exemple : VK_NUMPAD8 -> '8' et ce pour tout les caracteres VK_....
Merci
tu veux la liste des correspondances c'est ca ? si oui, c'est dans msdn
si non, j'ai pas compris la question![]()
il faut faire a la main ?
y'a pas de fonction pour faire ca ?
faut reellement faire comme ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
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 BOOL DlScanner::PreTranslateMessage(MSG* pMsg) { if ( pMsg->message == WM_KEYDOWN ) // evenement = pression d'une touche { // Ecart maximal de 250 ms entre chaque touche sinon on vide le buffer DWORD dwNow = GetTickCount(); if ( (dwNow - p_dwLastInput) > 250 ){ p_KeyInput = ""; p_dwLastInput = dwNow; } TRACE("%c : %d \n\r", pMsg->wParam,pMsg->wParam); // winuser.h // VK_NUMPAD0 -> VK_NUMPAD9 if ( (pMsg->wParam >= 0x60) && (pMsg->wParam <= 0x69 )) { p_KeyInput.AppendFormat("%c", pMsg->wParam - VK_NUMPAD0 + '0'); return TRUE; // fin de l'analyse du message } // ascii else if ( (pMsg->wParam >= 32) && (pMsg->wParam <= 128)) { p_KeyInput.AppendFormat("%c", pMsg->wParam); return TRUE; // fin de l'analyse du message } else if (pMsg->wParam == VK_RETURN) // touche [ ENTER ] { if (p_KeyInput != "") { AnalyseCodeBarre(p_KeyInput); } p_KeyInput = ""; return TRUE; // fin de l'analyse du message } } return CDialog::PreTranslateMessage(pMsg); // retransmission du message si non traité }
remarquez,
ce code est faux car comment savoir qu'il s'agit du code VK_NUMPAD1 est non du caractere ASCII 'a'
OK, je capte, en fait j'avais mal interpreté le message WM_KEYDOWN
Lui ne retourne que les codes virtuels, et quand le terminal de scan retourne de l'ascii, c'est avec WM_CHAR
du coup, le code suivant semble fonctionner avec les differentes douchettes code-barres que j'ai :
Alors, en test, on a ou WM_CHAR ou WM_KEYDOWN, ma question : ce sera toujours comme ca, ou les 2 peuvent intervenir ? et du coup, j'aurai une double lecture
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
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
63
64 BOOL DlScanner::PreTranslateMessage(MSG* pMsg) { if ( pMsg->message == WM_CHAR ) // evenement = pression d'une touche { // Ecart maximal de 100 ms entre chaque touche sinon on vide le buffer DWORD dwNow = GetTickCount(); if ( (dwNow - p_dwLastInput) > 1000 ){ p_KeyInput = ""; p_dwLastInput = dwNow; } // winuser.h p_KeyInput.AppendFormat("%c", pMsg->wParam); TRACE("KEY : %c - %d - %s \n\r", pMsg->wParam,pMsg->wParam, p_KeyInput); return TRUE; // fin de l'analyse du message } else if ( pMsg->message == WM_KEYDOWN ) // evenement = pression d'une touche { // Ecart maximal de 100 ms entre chaque touche sinon on vide le buffer DWORD dwNow = GetTickCount(); if ( (dwNow - p_dwLastInput) > 1000 ){ p_KeyInput = ""; p_dwLastInput = dwNow; } // winuser.h // VK_NUMPAD0 -> VK_NUMPAD9 if ( (pMsg->wParam >= 0x60) && (pMsg->wParam <= 0x69 )) { p_KeyInput.AppendFormat("%c", pMsg->wParam - VK_NUMPAD0 + '0'); TRACE("DOWN : %c - %d - %s \n\r", pMsg->wParam,pMsg->wParam, p_KeyInput); return TRUE; // fin de l'analyse du message } // VK_A - VK_Z else if ( (pMsg->wParam >= 0x41) && (pMsg->wParam <= 0x5A )) { p_KeyInput.AppendFormat("%c", pMsg->wParam - 0x41 + 'A'); TRACE("DOWN : %c - %d - %s \n\r", pMsg->wParam,pMsg->wParam, p_KeyInput); return TRUE; // fin de l'analyse du message } else if (pMsg->wParam == VK_RETURN) // touche [ ENTER ] { if (p_KeyInput != "") { AnalyseCodeBarre(p_KeyInput); } p_KeyInput = ""; TRACE("DOWN : %c - %d - %s \n\r", pMsg->wParam,pMsg->wParam, p_KeyInput); return TRUE; // fin de l'analyse du message } } return CDialog::PreTranslateMessage(pMsg); // retransmission du message si non traité }
salut,
le 'sens' du message est clair :
keydown c'est sur l'appui d'une touche.
wm_char c'est sur la réception d'un caractère.
d'un coté on parle de touche enfoncée ,de l'autre de caractère reçu ...
leur usage est différent et il est évident que si tu traites les deux messages tu auras deux fois la réponse..
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
Partager