GetKeyboardLayout(0)似乎已經決定我的線程正在使用LANG_GERMAN
,SUBLANG_GERMAN
,LANG_ENGLISH
和SUBLANG_ENGLISH_US
的某種混合。我試着把它放在一個新的項目中,但問題仍然存在......這是我用來測試它的代碼。GetKeyboardLayout返回奇怪的佈局
#include <iostream>
#include <Windows.h>
#include <kbd.h>
int main(int argc, char* argv[])
{
std::cout << "Keyboard Layout ID: " << GetKeyboardLayout(0) << "\n";
std::cin.ignore(100, '\n');
return 0;
}
這令返回04070409
雖然我不認爲應該是可能的。 (或者是嗎?如果是,我將如何構建這個與MAKELANGID
?)根據msdn映射到上述語言的混合。我試過使用LoadKeyboardLayout
與MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN)
,但我只是得到一個標準的LANG_ENGLISH, SUBLANG_ENGLISH
(04090409)佈局。我剛剛閱讀文檔錯誤和搞砸了什麼,或者這裏發生了什麼?我沒有想法...
這是*非常*不清楚你想解決什麼問題。除此之外,很可能你不應該解決它。切換鍵盤佈局應該完全由用戶來完成,使用語言欄非常簡單。 – 2013-05-08 13:40:42
問題是ToUnicodeEx需要一個鍵盤佈局,我很難得到。我不想強制用戶進入佈局 – mwerschy 2013-05-08 13:43:23
不,GetKeyboardLayout()就是你使用的。進一步的限制是它是一個特定於進程的值,並且您無法獲得另一個進程的活動鍵盤佈局。這使得在低級別鍵盤中使用ToUnicodeEx會導致失敗的原因。仍然是一個XY問題。 – 2013-05-08 14:05:59