C# 了解键盘布局何时更改
我正在编写一个屏幕键盘,并希望在键盘布局更改后立即重新绘制布局 目前我呼吁:C# 了解键盘布局何时更改,c#,.net,windows,keyboard,keyboard-layout,C#,.net,Windows,Keyboard,Keyboard Layout,我正在编写一个屏幕键盘,并希望在键盘布局更改后立即重新绘制布局 目前我呼吁: GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)); 每按一次键,查看布局是否已更改。如果用户用鼠标更改布局,直到按下该键,它才起作用 我想知道是否有办法得到通知 当前前景窗口的键盘布局更改时, 因此,一旦发生更改,我就可以重新绘制布局。键盘布局似乎存储在此处: HKEY_当前用户\键盘布局\预加载 当我改变键盘语言时,那里
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL));
每按一次键,查看布局是否已更改。如果用户用鼠标更改布局,直到按下该键,它才起作用
我想知道是否有办法得到通知
当前前景窗口的键盘布局更改时,
因此,一旦发生更改,我就可以重新绘制布局。键盘布局似乎存储在此处: HKEY_当前用户\键盘布局\预加载 当我改变键盘语言时,那里的设置顺序改变了 因此,您可以监视注册表项。这里有一个方法: 有一种方法… 首先,您需要注册应用程序以捕获前台窗口更改:
与
EVENT\u SYSTEM\u front
(以及WINEVENT\u OUTOFCONTEXT
作为.NET)一起使用
如果出现这种情况:使用GetKeyboardLayout
解决方案获取该窗口的当前布局
然后使用本地(您可能在全局低级别使用它来捕获关键帧)和新前景窗口的线程。收听该窗口的消息,以接收对布局的更改。
(在另一次前台更改后,您可能需要解除锁定/重新锁定)只有在更改默认键盘布局或添加新键盘布局时,HKEY_CURRENT_USER\Keyboard Layout\Preload中的值顺序才会更改