2010-11-13 86 views
0

我想抓住俄羅斯字符GetAsyncKeyState() win32 api,但顯然它似乎不工作,除了與英語。Unicode /俄羅斯字符和Win32 api [C++]

任何想法??

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

嗯......你可以使用消息系統來獲得實際的字符......我認爲像你的問題中的函數更關鍵的狀態......但不太確定 – thecoshman 2010-11-13 15:02:52

+0

請發佈更多的代碼。此外,[GetAsyncKeyState()](http://msdn.microsoft.com/en-us/library/ms646293%28VS.85%29.aspx)可能不是* catch * Cyrillic字符的最佳選擇,因爲它處理與[虛擬鍵碼](http://msdn.microsoft.com/en-us/library/dd375731%28v=VS.85%29.aspx)而不是實際的字符。 – 2010-11-13 15:05:35

+0

添加了一些代碼,這是我如何獲得密鑰,我只能得到英文字符... – snoofkin 2010-11-13 15:18:04

回答

2

GetAsyncKeyState(),您可以檢查虛擬鍵。虛擬鍵不會成爲俄羅斯字形,直到Windows通過TranslateMessage()處理WM_KEYDOWN消息,並根據當前鍵盤佈局將該消息轉換爲WM_CHAR。

使用VkKeyScanEx()可以將字形映射回虛擬鍵。如果字形是由死鍵生成的,這可能會變得非常複雜。換句話說,需要多個擊鍵。不知道俄羅斯的鍵盤佈局是什麼樣子,ymmv。

+0

我明白了,那麼如何使用TranslateMessage()手動將虛擬鍵號碼轉換爲Unicode字符? – snoofkin 2010-11-13 15:54:22

+0

這就是相反的映射,ToUnicodeEx()。 – 2010-11-13 16:05:01