[英]LoadKeyboardLayout doesn't change keyboard layout
我正在嘗試將鍵盤布局更改為英語,但更改未反映在Windows中。
布局已安裝,我已經使用GetKeyboardLayoutList進行了檢查。
碼:
#include <windows.h>
int main()
{
LoadKeyboardLayout("00000409", KLF_ACTIVATE);
return 0;
}
GetKeyboardLayoutName顯示語言已更改,但在Windows中看不到
測試代碼:
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
TCHAR keyboard[KL_NAMELENGTH];
GetKeyboardLayoutName(keyboard);
cout << keyboard << endl;
LoadKeyboardLayout("00000409", KLF_ACTIVATE);
GetKeyboardLayoutName(keyboard);
cout << keyboard << endl;
return 0;
}
輸出:
00000405
00000409
[Finished in 2.2s]
更新:嘗試在不同的Windows計算機上運行.exe,結果相同
使用鍵盤布局非常棘手,對於控制台和GUI應用程序則有所不同。 而且, LoadKeyboardLayout
是, LoadKeyboardLayout
僅使布局“可用”以進行激活。
圖形用戶界面
GetMessage
, TranslateMessage
, DispatchMessage
周期。 (崇高具有GetMessage
周期) 您可以通過兩次順序調用來切換布局
DWORD dwNewKeybLayout = 0x00000409; // Layout must be already loaded! PostMessage(hWnd, WM_INPUTLANGCHANGEREQUEST, 0, (LPARAM)dwNewKeybLayout); PostMessage(hWnd, WM_INPUTLANGCHANGE, 0, (LPARAM)dwNewKeybLayout);
安慰
具有int main()
的應用程序是控制台應用程序,它沒有GetMessage
循環。 所有消息都由conhost本身處理。 這就是為什么您的GetKeyboardLayoutName
將不會返回正確的結果。 決不! 沒門!
但是,您仍然可以更改在此控制台窗口中運行的所有進程的布局。 但是請記住,托管服務器會異步處理消息,並且實際布局(您無法確定或檢查)可能會在一段時間后更改。
HWND hCon = GetConsoleWindow();
DWORD dwNewKeybLayout = 0x00000409; // Layout must be already loaded!
PostMessage(hCon, WM_INPUTLANGCHANGEREQUEST, 0, (LPARAM)dwNewKeybLayout);
PostMessage(hCon, WM_INPUTLANGCHANGE, 0, (LPARAM)dwNewKeybLayout);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.