在如何在vba中使用GetKeyboardLayoutName函数? 一文中我们介绍了api函数GetKeyboardLayoutName返回的值,它的返回值其实也是键盘布局的句柄。
比如运行如下的代码:
Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameW" (ByVal pwszKLID As Long) As Long Sub QQ1722187970() Dim str1 As String '先填充缓存区 str1 = Space(100) '获取str1变量的实际存储地址 i = StrPtr(str1) '传递i的值 GetKeyboardLayoutName i '获取返回的键盘布局的名称 str1 = Trim(VBA.Replace(str1, Chr(0), "")) Debug.Print str1 End Sub
立即窗口中输出的值为:E0210804。
那么E0210804到底是什么,它对应的又是什么呢?
所有的这些都可以在注册表HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Keyboard Layouts中找到答案。
如下图所示:
有了以上的知识,我们就可以灵活地对键盘布局进行判断,用如下的代码可以返回键盘布局实际对应的名称:
Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameW" (ByVal pwszKLID As Long) As Long Sub QQ1722187970() Dim str1 As String '先填充缓存区 str1 = Space(100) '获取str1变量的实际存储地址 i = StrPtr(str1) '传递i的值 GetKeyboardLayoutName i '获取返回的键盘布局的名称 str1 = Trim(VBA.Replace(str1, Chr(0), "")) Debug.Print str1 MsgBox RegRead(str1) End Sub Function RegRead(ByVal sKB As String) Dim oWShell Set oWShell = CreateObject("WScript.Shell") Dim sValue As String Dim sKey As String '键的名称 sKey = "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Keyboard Layouts\" & sKB '键值的名称 sValue = "Layout Text" With oWShell 'sKey & "\" & sValue返回的是键的指定键值的数据 RegRead = .RegRead(sKey & "\" & sValue) End With End Function
当运行了上述代码后,将弹出如下图所示的信息对话框:
通过这样的方式,我们可以快速地判断当前使用的输入法。
发表评论