![](/img/trans.png)
[英]Is there a way to switch between installed windows keyboard layouts in c#?
[英]Switch keyboard layouts for other programs
我編寫的程序應該更改程序的布局,這是重點。 我有一個代碼,獲取當前鍵盤布局的ID:
const int KL_NAMELENGTH = 9;
const uint KLF_ACTIVATE = 1;
[DllImport("user32.dll")]
public static extern long LoadKeyboardLayout(string pwszKLID, uint Flags);
[DllImport("user32.dll")]
public static extern long GetKeyboardLayoutName(System.Text.StringBuilder pwszKLID);
public static string getKLName()
{
System.Text.StringBuilder name = new System.Text.StringBuilder(KL_NAMELENGTH);
GetKeyboardLayoutName(name);
return name.ToString();
}
例如:EN-“ 00000409” DE-“ 00000407” FR-“ 0000040C”
我也有以下代碼:
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
private void ChangeLang(String code)
{
PostMessage(GetForegroundWindow(), 0x0050, 2, 0);
}
如今,調用函數ChangeLang ,該程序將當前語言切換到下一語言。 但是我需要它來使ChangeLang函數將消息傳遞給其他程序,在什么布局上切換(使用代碼布局)。 這怎么可能呢?
[DllImport("user32.dll")]
private static extern bool PostMessage(IntPtr hhwnd, uint msg, IntPtr wparam, IntPtr lparam);
[DllImport("user32.dll")]
private static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags);
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
private const uint WM_INPUTLANGCHANGEREQUEST = 0x0050;
private const uint KLF_ACTIVATE = 1;
private const string en_US = "00000409";
private static void ChangeLanguage(string code)
{
PostMessage(GetForegroundWindow(), WM_INPUTLANGCHANGEREQUEST, IntPtr.Zero, LoadKeyboardLayout(code, KLF_ACTIVATE));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.