2010-11-13 6 views
0

J'essaie d'attraper les caractères russes avec GetAsyncKeyState() win32 api, mais apparemment, il ne semble pas fonctionner, sauf avec l'anglais.caractères Unicode/russes et Win32 api [C++]

Une idée?

CODE:

   for(unsigned char c = 1; c < 255; c++){ 
         SHORT rv = GetAsyncKeyState(c); 
        if(rv & 1){ // on press button down 
         string out = ""; 
         if(c == 1) 
           out = "[LMOUSE]"; // mouse left 
... 
+0

Eh bien ... vous pouvez utiliser le système de messagerie pour obtenir les caractères réels ... Je pense que des fonctions comme celle de votre question sont plus pour les états clés ... mais pas trop sûr – thecoshman

+0

S'il vous plaît poster plus de votre code. En outre, [GetAsyncKeyState()] (http://msdn.microsoft.com/en-us/library/ms646293%28VS.85%29.aspx) n'est probablement pas le meilleur choix pour * attraper * caractères cyrilliques, car il traite avec [codes de clé virtuelle] (http://msdn.microsoft.com/en-us/library/dd375731%28v=VS.85%29.aspx) au lieu de caractères réels. –

+0

du code ajouté, voici comment j'essaie d'obtenir des clés, je peux seulement obtenir des caractères anglais ... – snoofkin

Répondre

2

GetAsyncKeyState() vous permet d'inspecter virtuels clés. Une clé virtuelle ne devient un glyphe russe que lorsque le message WM_KEYDOWN est traité par Windows via TranslateMessage(), transformant ce message en WM_CHAR en fonction de la disposition de clavier actuelle.

Le mappage d'un glyphe à une clé virtuelle est possible avec VkKeyScanEx(). Cela peut devenir rapidement très compliqué si le glyphe est généré par des clés mortes. En d'autres termes, nécessitant plus d'une frappe. Aucune idée à quoi ressemble une disposition de clavier russe, ymmv.

+0

Je vois, alors comment est-ce que je tourne manuellement un numéro de clé virtuelle en utilisant TranslateMessage() vers un caractère Unicode? – snoofkin

+0

C'est le mappage opposé, ToUnicodeEx(). –