我正在编写一个应用程序,需要在应用程序未聚焦时更改系统语言。我担心唯一的方法是使用 Windows 钩子,但我目前无法完全理解它。
你有什么想法吗?
我认为,相比于更改Windows设置,通过映射另一个键盘布局并“翻译”输入会更容易,尤其是在没有用户同意的情况下。
在我完成回答之前,ahmadali shafiee发布了我想到的代码。优雅地使用它吧。
原帖作者自己提供的解决方案,最初是问题的一部分,但已被编辑删除:
[DllImport("user32.dll")]
private static extern bool PostMessage(int hhwnd, uint msg, IntPtr wparam, IntPtr lparam);
[DllImport("user32.dll")]
private static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags);
private static uint WM_INPUTLANGCHANGEREQUEST = 0x0050;
private static int HWND_BROADCAST = 0xffff;
private static string en_US = "00000409";
private static uint KLF_ACTIVATE = 1;
private static void ChangeLanguage()
{
PostMessage(HWND_BROADCAST,WM_INPUTLANGCHANGEREQUEST, IntPtr.Zero ,LoadKeyboardLayout(en_US,KLF_ACTIVATE));
}
要更改输入语言,您可以使用以下代码:
private void ChangeKeboardLayout(System.Globalization.CultureInfo CultureInfo)
{
InputLanguage c = InputLanguage.FromCulture(CultureInfo);
InputLanguage.CurrentInputLanguage = c;
}
而且只要你的应用程序(或线程)处于打开状态,你就可以随时执行它。