Donc 'key' est le keycode. Cette valeur, ainsi que la veaeur renvoyée par
GetKeyState() est exactement la même, que j'appuie sur Ctrl gauche ou
AltGr.
J'ai lu la doc de MSDN, cherché sur Google et fait des tests dans tous les
sens depuis 2 jours, sans rien trouver. Comme ça me paraît étrange que ce
soit si difficile de différencier ces 2 Ctrl gauche, je dois passer à côté
de quelque chose de simple.
Donc si quelqu'un a une idée pour résoudre le problème...
Donc 'key' est le keycode. Cette valeur, ainsi que la veaeur renvoyée par GetKeyState() est exactement la même, que j'appuie sur Ctrl gauche ou AltGr. J'ai lu la doc de MSDN, cherché sur Google et fait des tests dans tous les sens depuis 2 jours, sans rien trouver. Comme ça me paraît étrange que ce soit si difficile de différencier ces 2 Ctrl gauche, je dois passer à côté de quelque chose de simple. Donc si quelqu'un a une idée pour résoudre le problème...
Pour tester AltGr =>
if (GetKeyState(VK_RMENU) < 0 && GetKeyState(VK_LCONTROL) < 0) { //...
Vincent Torri a écrit :
Donc 'key' est le keycode. Cette valeur, ainsi que la veaeur renvoyée par
GetKeyState() est exactement la même, que j'appuie sur Ctrl gauche ou
AltGr.
J'ai lu la doc de MSDN, cherché sur Google et fait des tests dans tous les
sens depuis 2 jours, sans rien trouver. Comme ça me paraît étrange que ce
soit si difficile de différencier ces 2 Ctrl gauche, je dois passer à côté
de quelque chose de simple.
Donc si quelqu'un a une idée pour résoudre le problème...
Pour tester AltGr =>
if (GetKeyState(VK_RMENU) < 0 && GetKeyState(VK_LCONTROL) < 0)
{
//...
Donc 'key' est le keycode. Cette valeur, ainsi que la veaeur renvoyée par GetKeyState() est exactement la même, que j'appuie sur Ctrl gauche ou AltGr. J'ai lu la doc de MSDN, cherché sur Google et fait des tests dans tous les sens depuis 2 jours, sans rien trouver. Comme ça me paraît étrange que ce soit si difficile de différencier ces 2 Ctrl gauche, je dois passer à côté de quelque chose de simple. Donc si quelqu'un a une idée pour résoudre le problème...
Pour tester AltGr =>
if (GetKeyState(VK_RMENU) < 0 && GetKeyState(VK_LCONTROL) < 0) { //...
Vincent Torri
Christian ASTOR wrote in news:jattp2$jmt$:
Pour tester AltGr =>
if (GetKeyState(VK_RMENU) < 0 && GetKeyState(VK_LCONTROL) < 0) { //...
Ben, je ne vois pas en quoi ça m'aide. Je fais ceci:
Christian ASTOR wrote in news:jauojc$o0h$1 @speranza.aioe.org:
Vincent Torri a écrit :
Christian ASTOR wrote in news:jattp2$jmt$:
Pour tester AltGr =>
if (GetKeyState(VK_RMENU)< 0 && GetKeyState(VK_LCONTROL)< 0) { //...
Ben, je ne vois pas en quoi ça m'aide.
Si, c'est la méthode standard pour tester AltGr. Il suffit de la mettre dans le timer de la WndProc principale pour tester et on voit que ça marche
SetTimer(hWnd, 1, 100, NULL);
et
case WM_TIMER: { if (GetKeyState(VK_RMENU) < 0 && GetKeyState(VK_LCONTROL) < 0) Beep(200,100); } break;
c'est bizarre, mais il ne me semble pas avoir lu dans ta première réponse qu'il fallait utiliser un timer...
Et comment j'intègre ça dans mon switch ? Car franchement, tes réponses sont ultra courtes.
Christian ASTOR
Vincent Torri a écrit :
c'est bizarre, mais il ne me semble pas avoir lu dans ta première réponse qu'il fallait utiliser un timer...
Je n'ai pas dit d'utiliser un timer, c'est juste une façon rapide pour tester que le test est bon. On met le test dans une fonction par exemple et on l'appelle où l'on veut ensuite (dans "case WM_CHAR:" en principe)
Vincent Torri a écrit :
c'est bizarre, mais il ne me semble pas avoir lu dans ta première réponse
qu'il fallait utiliser un timer...
Je n'ai pas dit d'utiliser un timer, c'est juste une façon rapide pour
tester que le test est bon.
On met le test dans une fonction par exemple et on l'appelle où l'on
veut ensuite (dans "case WM_CHAR:" en principe)
c'est bizarre, mais il ne me semble pas avoir lu dans ta première réponse qu'il fallait utiliser un timer...
Je n'ai pas dit d'utiliser un timer, c'est juste une façon rapide pour tester que le test est bon. On met le test dans une fonction par exemple et on l'appelle où l'on veut ensuite (dans "case WM_CHAR:" en principe)
torri
On Mon, 28 Nov 2011 09:10:00 +0100, Christian ASTOR wrote:
Vincent Torri a écrit :
c'est bizarre, mais il ne me semble pas avoir lu dans ta première réponse qu'il fallait utiliser un timer...
Je n'ai pas dit d'utiliser un timer, c'est juste une façon rapide pour tester que le test est bon. On met le test dans une fonction par exemple et on l'appelle où l'on veut ensuite (dans "case WM_CHAR:" en principe)
Ok. Je vais peut-être faire autrement : apparemment, quand j'appuie sur AltGr, le message KEYDOWN pour le 'fake' Ctrl est lancé, puis tout de suite, le message KEYDOWN pour le Alt est lancé, avec le même timestamp. Donc je vais utiliser PeekMessage avec NO_REMOVE quand je reçois un KEYDOWN pour un Ctrl gauche, et voir si le message suivant est un KEYDOWN pour un Alt gauche avec le même timestamp.
Trouves-tu ceci raisonnable ?
On Mon, 28 Nov 2011 09:10:00 +0100, Christian ASTOR wrote:
Vincent Torri a écrit :
c'est bizarre, mais il ne me semble pas avoir lu dans ta première
réponse qu'il fallait utiliser un timer...
Je n'ai pas dit d'utiliser un timer, c'est juste une façon rapide pour
tester que le test est bon.
On met le test dans une fonction par exemple et on l'appelle où l'on
veut ensuite (dans "case WM_CHAR:" en principe)
Ok. Je vais peut-être faire autrement : apparemment, quand j'appuie sur
AltGr, le message KEYDOWN pour le 'fake' Ctrl est lancé, puis tout de
suite, le message KEYDOWN pour le Alt est lancé, avec le même timestamp.
Donc je vais utiliser PeekMessage avec NO_REMOVE quand je reçois un
KEYDOWN pour un Ctrl gauche, et voir si le message suivant est un KEYDOWN
pour un Alt gauche avec le même timestamp.
On Mon, 28 Nov 2011 09:10:00 +0100, Christian ASTOR wrote:
Vincent Torri a écrit :
c'est bizarre, mais il ne me semble pas avoir lu dans ta première réponse qu'il fallait utiliser un timer...
Je n'ai pas dit d'utiliser un timer, c'est juste une façon rapide pour tester que le test est bon. On met le test dans une fonction par exemple et on l'appelle où l'on veut ensuite (dans "case WM_CHAR:" en principe)
Ok. Je vais peut-être faire autrement : apparemment, quand j'appuie sur AltGr, le message KEYDOWN pour le 'fake' Ctrl est lancé, puis tout de suite, le message KEYDOWN pour le Alt est lancé, avec le même timestamp. Donc je vais utiliser PeekMessage avec NO_REMOVE quand je reçois un KEYDOWN pour un Ctrl gauche, et voir si le message suivant est un KEYDOWN pour un Alt gauche avec le même timestamp.
Trouves-tu ceci raisonnable ?
Christian
torri a écrit :
On Mon, 28 Nov 2011 09:10:00 +0100, Christian ASTOR wrote:
Vincent Torri a écrit :
c'est bizarre, mais il ne me semble pas avoir lu dans ta première réponse qu'il fallait utiliser un timer...
Je n'ai pas dit d'utiliser un timer, c'est juste une façon rapide pour tester que le test est bon. On met le test dans une fonction par exemple et on l'appelle où l'on veut ensuite (dans "case WM_CHAR:" en principe)
Ok. Je vais peut-être faire autrement : apparemment, quand j'appuie sur AltGr, le message KEYDOWN pour le 'fake' Ctrl est lancé, puis tout de suite, le message KEYDOWN pour le Alt est lancé, avec le même timestamp. Donc je vais utiliser PeekMessage avec NO_REMOVE quand je reçois un KEYDOWN pour un Ctrl gauche, et voir si le message suivant est un KEYDOWN pour un Alt gauche avec le même timestamp. Trouves-tu ceci raisonnable ?
Pas trop non :-) Je ne comprends pas pourquoi ne pas utiliser ce simple test, plutôt dans WM_KEYDOWN que WM_CHAR en fait, ce qui est plus standard. Windows lui-même l'utilise dans le Shell, au niveau des menus...
torri a écrit :
On Mon, 28 Nov 2011 09:10:00 +0100, Christian ASTOR wrote:
Vincent Torri a écrit :
c'est bizarre, mais il ne me semble pas avoir lu dans ta première
réponse qu'il fallait utiliser un timer...
Je n'ai pas dit d'utiliser un timer, c'est juste une façon rapide pour
tester que le test est bon.
On met le test dans une fonction par exemple et on l'appelle où l'on
veut ensuite (dans "case WM_CHAR:" en principe)
Ok. Je vais peut-être faire autrement : apparemment, quand j'appuie sur
AltGr, le message KEYDOWN pour le 'fake' Ctrl est lancé, puis tout de
suite, le message KEYDOWN pour le Alt est lancé, avec le même timestamp.
Donc je vais utiliser PeekMessage avec NO_REMOVE quand je reçois un
KEYDOWN pour un Ctrl gauche, et voir si le message suivant est un KEYDOWN
pour un Alt gauche avec le même timestamp.
Trouves-tu ceci raisonnable ?
Pas trop non :-)
Je ne comprends pas pourquoi ne pas utiliser ce simple test, plutôt dans
WM_KEYDOWN que WM_CHAR en fait, ce qui est plus standard.
Windows lui-même l'utilise dans le Shell, au niveau des menus...
On Mon, 28 Nov 2011 09:10:00 +0100, Christian ASTOR wrote:
Vincent Torri a écrit :
c'est bizarre, mais il ne me semble pas avoir lu dans ta première réponse qu'il fallait utiliser un timer...
Je n'ai pas dit d'utiliser un timer, c'est juste une façon rapide pour tester que le test est bon. On met le test dans une fonction par exemple et on l'appelle où l'on veut ensuite (dans "case WM_CHAR:" en principe)
Ok. Je vais peut-être faire autrement : apparemment, quand j'appuie sur AltGr, le message KEYDOWN pour le 'fake' Ctrl est lancé, puis tout de suite, le message KEYDOWN pour le Alt est lancé, avec le même timestamp. Donc je vais utiliser PeekMessage avec NO_REMOVE quand je reçois un KEYDOWN pour un Ctrl gauche, et voir si le message suivant est un KEYDOWN pour un Alt gauche avec le même timestamp. Trouves-tu ceci raisonnable ?
Pas trop non :-) Je ne comprends pas pourquoi ne pas utiliser ce simple test, plutôt dans WM_KEYDOWN que WM_CHAR en fait, ce qui est plus standard. Windows lui-même l'utilise dans le Shell, au niveau des menus...
torri
On Mon, 28 Nov 2011 21:32:33 +0100, Christian wrote:
torri a écrit :
Pas trop non :-)
Ca me semble très raisonnable, pourtant :-)
Je ne comprends pas pourquoi ne pas utiliser ce simple test, plutôt dans WM_KEYDOWN que WM_CHAR en fait, ce qui est plus standard. Windows lui-même l'utilise dans le Shell, au niveau des menus...
Je trouve que l'utilisation d'un timer est super bizarre, juste pour tester si une touche arrive un petit peu après une autre, dans un cas comme celui-ci, surtout si on sait que le timestamp de ces 2 touches est exactement le même.
Et franchement, faire confiance à ce que fait Windows, mouais. Vu comment c'est galère de faire certaines choses, j'ai des doutes : le problème en question (AltGr), la notification de fichiers/répertoires, les layered windows, les named/unnamed pipes pour de l'IPC (émulation de AF_UNIX), etc... J'ai touché à tout ça, passé des mois à trouver comment ça marche ; j'ai eu énormément d'avis contradictoires, donc pour se faire une opinion c'est galère (Et quelques fois sans pouvoir résoudre mes problèmes (les layered windows, je bloque toujours))
J'ai fait le code avec la méthode que j'ai décrite (je l'ai trouvée dans le port Windows du server X de Xorg). J'essaierai ta méthode. Si les 2 marchent, j'en choisirai une.
merci pour la réponse
On Mon, 28 Nov 2011 21:32:33 +0100, Christian wrote:
torri a écrit :
Pas trop non :-)
Ca me semble très raisonnable, pourtant :-)
Je ne comprends pas pourquoi ne pas utiliser ce simple test, plutôt dans
WM_KEYDOWN que WM_CHAR en fait, ce qui est plus standard. Windows
lui-même l'utilise dans le Shell, au niveau des menus...
Je trouve que l'utilisation d'un timer est super bizarre, juste pour
tester si une touche arrive un petit peu après une autre, dans un cas
comme celui-ci, surtout si on sait que le timestamp de ces 2 touches est
exactement le même.
Et franchement, faire confiance à ce que fait Windows, mouais. Vu comment
c'est galère de faire certaines choses, j'ai des doutes : le problème en
question (AltGr), la notification de fichiers/répertoires, les layered
windows, les named/unnamed pipes pour de l'IPC (émulation de AF_UNIX),
etc... J'ai touché à tout ça, passé des mois à trouver comment ça
marche ; j'ai eu énormément d'avis contradictoires, donc pour se faire
une opinion c'est galère (Et quelques fois sans pouvoir résoudre mes
problèmes (les layered windows, je bloque toujours))
J'ai fait le code avec la méthode que j'ai décrite (je l'ai trouvée dans
le port Windows du server X de Xorg). J'essaierai ta méthode. Si les 2
marchent, j'en choisirai une.
On Mon, 28 Nov 2011 21:32:33 +0100, Christian wrote:
torri a écrit :
Pas trop non :-)
Ca me semble très raisonnable, pourtant :-)
Je ne comprends pas pourquoi ne pas utiliser ce simple test, plutôt dans WM_KEYDOWN que WM_CHAR en fait, ce qui est plus standard. Windows lui-même l'utilise dans le Shell, au niveau des menus...
Je trouve que l'utilisation d'un timer est super bizarre, juste pour tester si une touche arrive un petit peu après une autre, dans un cas comme celui-ci, surtout si on sait que le timestamp de ces 2 touches est exactement le même.
Et franchement, faire confiance à ce que fait Windows, mouais. Vu comment c'est galère de faire certaines choses, j'ai des doutes : le problème en question (AltGr), la notification de fichiers/répertoires, les layered windows, les named/unnamed pipes pour de l'IPC (émulation de AF_UNIX), etc... J'ai touché à tout ça, passé des mois à trouver comment ça marche ; j'ai eu énormément d'avis contradictoires, donc pour se faire une opinion c'est galère (Et quelques fois sans pouvoir résoudre mes problèmes (les layered windows, je bloque toujours))
J'ai fait le code avec la méthode que j'ai décrite (je l'ai trouvée dans le port Windows du server X de Xorg). J'essaierai ta méthode. Si les 2 marchent, j'en choisirai une.
merci pour la réponse
Christian ASTOR
torri a écrit :
Je ne comprends pas pourquoi ne pas utiliser ce simple test, plutôt dans WM_KEYDOWN que WM_CHAR en fait, ce qui est plus standard. Windows lui-même l'utilise dans le Shell, au niveau des menus...
Je trouve que l'utilisation d'un timer est super bizarre, juste pour tester si une touche arrive un petit peu après une autre, dans un cas comme celui-ci, surtout si on sait que le timestamp de ces 2 touches est exactement le même.
Comme je disais, le timer était juste pour vérifier rapidement que le test marche, ça ne sert à rien ! Il faut juste faire, par exemple : case WM_KEYDOWN: { if (GetKeyState(VK_RMENU) < 0 && GetKeyState(VK_LCONTROL) < 0) { // Traitement pour AltGr } } break;
torri a écrit :
Je ne comprends pas pourquoi ne pas utiliser ce simple test, plutôt dans
WM_KEYDOWN que WM_CHAR en fait, ce qui est plus standard. Windows
lui-même l'utilise dans le Shell, au niveau des menus...
Je trouve que l'utilisation d'un timer est super bizarre, juste pour
tester si une touche arrive un petit peu après une autre, dans un cas
comme celui-ci, surtout si on sait que le timestamp de ces 2 touches est
exactement le même.
Comme je disais, le timer était juste pour vérifier rapidement que le
test marche, ça ne sert à rien !
Il faut juste faire, par exemple :
case WM_KEYDOWN:
{
if (GetKeyState(VK_RMENU) < 0 && GetKeyState(VK_LCONTROL) < 0)
{
// Traitement pour AltGr
}
}
break;
Je ne comprends pas pourquoi ne pas utiliser ce simple test, plutôt dans WM_KEYDOWN que WM_CHAR en fait, ce qui est plus standard. Windows lui-même l'utilise dans le Shell, au niveau des menus...
Je trouve que l'utilisation d'un timer est super bizarre, juste pour tester si une touche arrive un petit peu après une autre, dans un cas comme celui-ci, surtout si on sait que le timestamp de ces 2 touches est exactement le même.
Comme je disais, le timer était juste pour vérifier rapidement que le test marche, ça ne sert à rien ! Il faut juste faire, par exemple : case WM_KEYDOWN: { if (GetKeyState(VK_RMENU) < 0 && GetKeyState(VK_LCONTROL) < 0) { // Traitement pour AltGr } } break;
torri
On Tue, 29 Nov 2011 02:03:06 +0100, Christian ASTOR wrote:
Comme je disais, le timer était juste pour vérifier rapidement que le test marche, ça ne sert à rien ! Il faut juste faire, par exemple : case WM_KEYDOWN: { if (GetKeyState(VK_RMENU) < 0 && GetKeyState(VK_LCONTROL) < 0) { // Traitement pour AltGr } } break;
ce test arrive trop tard : le keydown pour le Ctrl envoyé par AltGr est déjà reçu, et le test est vrai que après. L'ordre est:
1) j'appuie sur AltGr 2) KEYDOWN est envoyé pour la touche Ctrl gauche 3) le test est faux, donc je gère la touche Ctrl gauche (ce qui n'est pas bon) 4) KEYDOWN est envoyé, pour la touche Alt droit 5) le test est vrai, mais de toute façon il ne me sert plus 6) Je gère Alt droit.
Donc, ce que je veux, c'est à l'étape 2), savoir si la touche Ctrl gauche est celle d'un appuie de AltGr
On Tue, 29 Nov 2011 02:03:06 +0100, Christian ASTOR wrote:
Comme je disais, le timer était juste pour vérifier rapidement que le
test marche, ça ne sert à rien !
Il faut juste faire, par exemple :
case WM_KEYDOWN:
{
if (GetKeyState(VK_RMENU) < 0 && GetKeyState(VK_LCONTROL) < 0) {
// Traitement pour AltGr
}
}
break;
ce test arrive trop tard : le keydown pour le Ctrl envoyé par AltGr est
déjà reçu, et le test est vrai que après. L'ordre est:
1) j'appuie sur AltGr
2) KEYDOWN est envoyé pour la touche Ctrl gauche
3) le test est faux, donc je gère la touche Ctrl gauche (ce qui n'est pas
bon)
4) KEYDOWN est envoyé, pour la touche Alt droit
5) le test est vrai, mais de toute façon il ne me sert plus
6) Je gère Alt droit.
Donc, ce que je veux, c'est à l'étape 2), savoir si la touche Ctrl gauche
est celle d'un appuie de AltGr
On Tue, 29 Nov 2011 02:03:06 +0100, Christian ASTOR wrote:
Comme je disais, le timer était juste pour vérifier rapidement que le test marche, ça ne sert à rien ! Il faut juste faire, par exemple : case WM_KEYDOWN: { if (GetKeyState(VK_RMENU) < 0 && GetKeyState(VK_LCONTROL) < 0) { // Traitement pour AltGr } } break;
ce test arrive trop tard : le keydown pour le Ctrl envoyé par AltGr est déjà reçu, et le test est vrai que après. L'ordre est:
1) j'appuie sur AltGr 2) KEYDOWN est envoyé pour la touche Ctrl gauche 3) le test est faux, donc je gère la touche Ctrl gauche (ce qui n'est pas bon) 4) KEYDOWN est envoyé, pour la touche Alt droit 5) le test est vrai, mais de toute façon il ne me sert plus 6) Je gère Alt droit.
Donc, ce que je veux, c'est à l'étape 2), savoir si la touche Ctrl gauche est celle d'un appuie de AltGr