簡體   English   中英

切換其他程序的鍵盤布局

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM