加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:14:36 所属栏目:百科 来源:网络整理
导读:我有一个winform应用程序,我想在C#中获取当前打字语言的信息.我有 windows 10机,我选了韩文.一旦我选择韩国语,任务栏中就会有一个切换按钮可以将输入法改为英文或韩文. 以下代码总是提供韩语,但是当我用英文选择输入时应该给英文. [DllImport("user32.dll")]
我有一个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功能,但仅适用于桌面应用程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读