2010-10-05 3 views
1

J'ai regardé MapVirtualKey() et ToAscii(). MapVirtualKey() me donne seulement le caractère non décalé. ToAscii() ne fonctionne que pour les codes vk qui traduisent en valeurs ASCII.Sous Windows, comment convertir un code de clé virtuelle en caractère décalé?

Je dois détecter par exemple, "Ctrl + Shift + 3" comme Ctrl actif, Shift actif et "#".

Des indices?

+1

Je ne comprends pas, pourquoi n'utilisez-vous pas simplement WM_CHAR? GetKeyState() pour obtenir l'état des touches Ctrl et Maj. –

+0

Vous ne pouvez pas utiliser WM_CHAR car Ctrl + 3 n'est pas mappé sur "#". En fait, j'ai gardé le code de caractère 1 pour de nombreuses combinaisons de touches Ctrl. – Plumenator

Répondre

2

Voilà comment je l'ai fait enfin:

case WM_KEYDOWN: 
     GetKeyboardState(kbs); 
     if(kbs[VK_CONTROL] & 0x00000080) 
     { 
      kbs[VK_CONTROL] &= 0x0000007f; 
      ::ToAscii(p_wParam, ::MapVirtualKey(p_wParam, MAPVK_VK_TO_VSC), kbs, ch, 0); 
      kbs[VK_CONTROL] |= 0x00000080; 
     } 
     else 
      ::ToAscii(p_wParam, ::MapVirtualKey(p_wParam, MAPVK_VK_TO_VSC), kbs, ch, 0); 

Puis-je obtenir les états de toutes les touches de modification de kbs [].

Questions connexes