我正在写一个屏幕键盘,只要键盘布局改变,我想重新布局我的布局。
目前我打电话给:
GetKeyboardLayout(GetwindowThreadProcessId(GetForegroundWindow(),NULL));
在每个按键上查看布局是否已经改变。 如果用户通过鼠标更改布局,则不起作用,直到按下键。
我想知道在当前前景窗口的键盘布局被改变时是否有任何方法可以得到通知,所以只要发生改变,我就可以重新绘制布局。
控件的树视图与崩溃/展开
严格的多个.NET进程的负载平衡
如何检测Windows 64位的cpu速度?
解决Windows 7中registry操作限制的解决方法?
Windows服务不能在冷启动时启动
语言栏在c#.NET中改变语言
捕获屏幕截图包括.NET中的半透明窗口
如何将Unicode转义序列转换为.NETstring中的Unicode字符?
C# – 文件path的正则expression式,例如C: test test.exe
有一种方法 …
首先,您需要注册您的应用程序以捕获前景窗口更改:
使用SetWinEventHook和EVENT_SYstem_FOREGROUND (和WINEVENT_OUTOFCONTEXT因为它的.NET) 。
如果发生这种情况:使用GetKeyboardLayout解决方案来获取该窗口的当前布局。
然后用WH_CALLWNDPROC和新的前台窗口的线程使用本地的Windows Hook (你可能使用低级别的全局密钥捕获) 。
收听该窗口的WM_INPUTLANGCHANGE消息以接收对布局的更改。
(你可能想要在另一个前景改变之后解除/
它看起来像键盘布局存储在这里:HKEY_CURRENT_USER Keyboard Layout Preload
当我改变键盘语言,那里的设置顺序改变了。
http://www.codeproject.com/KB/system/registrymonitor.aspx
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。