了解键盘布局何时被更改

本文关键字:何时 键盘 布局 了解 | 更新日期: 2023-09-27 18:15:59

我正在编写一个屏幕键盘,并希望在键盘布局改变后尽快重新绘制我的布局。

当前我调用:

GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL));

键,以确定布局是否发生了变化。如果用户通过鼠标更改布局,则此操作将不起作用,直到按下键。

我想知道是否有什么方法可以得到通知当当前前景窗口的键盘布局发生变化时,这样我就可以在改变的时候重新绘制我的布局

了解键盘布局何时被更改

有一种方法…

首先你需要注册你的应用程序来捕捉前台窗口的变化:
使用SetWinEventHookEVENT_SYSTEM_FOREGROUND (和WINEVENT_OUTOFCONTEXT,因为它是。net)

如果发生这种情况:使用GetKeyboardLayout解决方案来获取该窗口的当前布局。

然后使用本地Windows钩子(你可能使用它低级别全局键捕获)WH_CALLWNDPROC和新的前台窗口的线程。侦听 WM_INPUTLANGCHANGE 消息到该窗口以接收布局的更改。

看起来键盘布局存储在这里:HKEY_CURRENT_USER '键盘布局'预加载

当我改变键盘语言时,设置的顺序也改变了。

所以你可以监控注册表项。有一种方法:

http://www.codeproject.com/KB/system/registrymonitor.aspx