如何在Wndproc中专门在C#Winform中获取IME布局?

前端之家收集整理的这篇文章主要介绍了如何在Wndproc中专门在C#Winform中获取IME布局?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个winform应用程序,我想在C#中获取当前打字语言的信息.我有 windows 10机,我选了韩文.一旦我选择韩国语,任务栏中就会有一个切换按钮可以将输入法改为英文或韩文.

以下代码总是提供韩语,但是当我用英文选择输入时应该给英文.

[DllImport("user32.dll")]
    static extern IntPtr GetForegroundWindow();
    [DllImport("user32.dll")]
    static extern uint GetWindowThreadProcessId(IntPtr hwnd,IntPtr proccess);
    [DllImport("user32.dll")]
    static extern IntPtr GetKeyboardLayout(uint thread);
    public Form1()
    {
        InitializeComponent();
        IntPtr foregroundWindow = GetForegroundWindow();
        uint foregroundProcess = GetWindowThreadProcessId(foregroundWindow,IntPtr.Zero);
        int keyboardLayout = GetKeyboardLayout(foregroundProcess).ToInt32() & 0xFFFF;
        CultureInfo info = new CultureInfo(keyboardLayout);
        int keyboardLayoutId = info.KeyboardLayoutId;
        string name = info.Name;
    }

有没有其他方式来获取输入语言信息.

您可以找到相同的附件.我已经强调了A作为英文输入.

我想在WndProc方法中使用这些信息.

问题求和:
所以我想处理用户通过切换按钮切换语言的情况,当用户通过切换按钮切换语言时,我想要任何wndproc消息或窗口边事件来获取语言信息.

解决方法

您的问题是IME模式和输入布局混乱的结果.您的输入布局在两种情况下都是韩文 – 您的IME模式有哪些变化.

您可以使用Control.ImeMode找到输入控件的IME模式(并使用Control.ImeModeChanged检查更改).这将告诉你,你是韩国人,韩国人,还是韩国人 – 阿尔法人.编辑:实际上,这只允许你强制给定的设置,而不是读取用户指定的IME模式,显然不应该使用.

进一步的复杂性是,如果您启用了全局输入(Windows 8可用),其中输入配置不再存储在每个线程中,而是全局的.在这种情况下,ImeMode不起作用,完全被忽略.我不认为从应用程序方面你可以做任何事情 – 这个设置已经不再是你的看法或者改变了.根据MSDN,适当的更换将是ImmGetConversionStatus功能,但仅适用于桌面应用程序.

猜你在找的C#相关文章