查看已安裝的語言:
範例輸出:
在筆者目前的測試中只能切換英文/中文輸入法,無法切換微軟倉頡、微軟注音等:
InputLanguageCollection installedInputLanguages = InputLanguage.InstalledInputLanguages;
foreach (InputLanguage inputLang in installedInputLanguages)
{
Console.WriteLine($"語言文化 (Culture): {inputLang.Culture.EnglishName} - {inputLang.Culture.Name}");
Console.WriteLine($"鍵盤佈局 (Layout): {inputLang.LayoutName}");
Console.WriteLine($"語言識別碼 10 進位顯示: {inputLang.Handle.ToInt32()}");
Console.WriteLine($"語言識別碼 16 進位顯示: 0x{inputLang.Handle.ToInt32().ToString("X")}");
Console.WriteLine("---------------------------------------");
}
範例輸出:
語言文化 (Culture): Chinese (Taiwan) - zh-TW
鍵盤佈局 (Layout): 中文 (繁體) - 美式鍵盤
語言識別碼 10 進位顯示: 67372036
語言識別碼 16 進位顯示: 0x4040404
---------------------------------------
語言文化 (Culture): English (United States) - en-US
鍵盤佈局 (Layout): US
語言識別碼 10 進位顯示: 67699721
語言識別碼 16 進位顯示: 0x4090409
---------------------------------------
在筆者目前的測試中只能切換英文/中文輸入法,無法切換微軟倉頡、微軟注音等:
public const uint WM_INPUTLANGCHANGEREQUEST = 0x0050;
public const uint KLF_ACTIVATE = 1;
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags);
IntPtr foregroundWindow = GetForegroundWindow();
// string spmKLID = "67699721"; // 英文
string spmKLID = "67372036"; // 中文
// 切換輸入法
IntPtr spmLayout = LoadKeyboardLayout(spmKLID, KLF_ACTIVATE);
SendMessage(foregroundWindow, WM_INPUTLANGCHANGEREQUEST, spmLayout, IntPtr.Zero);
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com