如何在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方法中使用这些信息. 问题求和: 解决方法
您的问题是IME模式和输入布局混乱的结果.您的输入布局在两种情况下都是韩文 – 您的IME模式有哪些变化.
您可以使用Control.ImeMode找到输入控件的IME模式(并使用Control.ImeModeChanged检查更改).这将告诉你,你是韩国人,韩国人,还是韩国人 – 阿尔法人.编辑:实际上,这只允许你强制给定的设置,而不是读取用户指定的IME模式,显然不应该使用. 进一步的复杂性是,如果您启用了全局输入(Windows 8可用),其中输入配置不再存储在每个线程中,而是全局的.在这种情况下,ImeMode不起作用,完全被忽略.我不认为从应用程序方面你可以做任何事情 – 这个设置已经不再是你的看法或者改变了.根据MSDN,适当的更换将是ImmGetConversionStatus功能,但仅适用于桌面应用程序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |