autohotkey - 如何将缓冲区转换为字符串
问题描述
我使用两种键盘布局(两种语言),对于我正在编写的脚本,我需要获取当前的键盘布局。
我发现这个函数是从以下位置调用GetKeyboardLayoutNameA
的user32.dll
:https ://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getkeyboardlayoutnamea
它只接受一个参数,并指向存储区域设置标识符的缓冲区:
接收输入语言环境标识符名称的缓冲区(长度至少为 KL_NAMELENGTH 个字符),包括终止空字符。这将是提供给 LoadKeyboardLayout 函数的字符串的副本,除非发生布局替换。
所以我写了这个脚本,我曾经StrGet
将缓冲区转换为String,这似乎不起作用。我在这里做错了什么?
F7::
VarSetCapacity(LocaleID, 8, 0)
DllCall("GetKeyboardLayoutNameA", "Str", LocaleID)
MsgBox, % LocaleID
clipboard := StrGet(LocaleID)
Return
该脚本只是一个示例,我的问题是:
如何访问数据缓冲区并获取其值?
解决方案
摆脱StrGet
它会正常工作。StrGet
接受地址参数:
将写入/读取字符串的地址。
但LocaleID
不是地址。
此外,您可以使用它来获取LocaleID
键盘:
F7::
SetFormat, Integer, H
WinGet, WinID,, A
ThreadID:=DllCall("GetWindowThreadProcessId", "UInt", WinID, "UInt", 0)
LocaleID:=DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt")
MsgBox, %LocaleID%
clipboard := LocaleID
Return
键盘标识符列表(认为会有所帮助): https://msdn.microsoft.com/en-us/ie/dn938363(v=vs.94)
推荐阅读
- laravel - 一对一关系建议
- java - 程序将 *.csv 文件读入数组并打印内容。要求打印索引号
- django - “用户”对象没有属性“配置文件”
- node.js - 谷歌搜索控制台 API,google.webmasters.searchanalytics.query“startDate 字段是必需的”
- javascript - 如何通过按 Enter 按钮将焦点设置在 a 中的下一个“启用”输入框上
- android - 有没有可能改变机器人不确定进度条的速度(让它变慢)?
- html - 将厘米转换为像素,转换公式?
- javascript - 视频播放时停止轮播 - Bootstrap 4
- java - 如何一起使用 FontAwesome unicode 值和名称?
- api - 如何快速获取 OAuth 授权中的令牌?为什么我无法打印“credential.oauthToken”?