- 版本 v1.1.15.01
- 指南和概述
- 常见问题(FAQ)
- 按字母排序的命令和函数索引
- AutoHotkey 脚本展示
- 变更和新功能
- 基本用法和语法
- 迁移到 AutoHotkey 1.1(AutoHotkey_L)
- 环境管理
- 本机代码互操作
- 文件、目录和磁盘管理
- Drive
- DriveGet
- DriveSpaceFree
- FileAppend
- FileCopy
- FileCopyDir
- FileCreateDir
- FileCreateShortcut
- FileDelete
- FileEncoding [AHK_L 42+]
- FileGetAttrib
- FileGetShortcut
- FileGetSize
- FileGetTime
- FileGetVersion
- FileInstall
- FileMove
- FileMoveDir
- FileOpen [AHK_L 42+]
- FileReadLine
- FileRead
- FileRecycle
- FileRecycleEmpty
- FileRemoveDir
- FileSelectFile
- FileSelectFolder
- FileSetAttrib
- FileSetTime
- IfExist / IfNotExist
- IniDelete
- IniRead
- IniWrite
- Loop(文件和文件夹)
- Loop(读取文件内容)
- SetWorkingDir
- SplitPath
- 流程控制
- 内置函数
- GUI、MsgBox、InputBox 及其他对话框
- 鼠标和键盘
- 鼠标和键盘
- #InstallKeybdHook
- #InstallMouseHook
- #KeyHistory
- BlockInput
- Click [v1.0.43+]
- ControlClick
- ControlSend / ControlSendRaw
- CoordMode
- GetKeyState
- KeyHistory
- KeyWait
- Input
- MouseClick
- MouseClickDrag
- MouseGetPos
- MouseMove
- Send / SendRaw / SendInput / SendPlay / SendEvent: 发送按键和点击
- SendLevel [v1.1.06+]
- SendMode [v1.0.43+]
- SetDefaultMouseSpeed
- SetKeyDelay
- SetMouseDelay
- SetCapsLockState/SetNumLockState/SetScrollLockState
- SetStoreCapslockMode
- 数学相关
- 屏幕管理
- 杂项命令
- 进程管理
- 注册表管理
- 声音命令
- 字符串管理
- 窗口管理
- 控件
- 窗口组
- #WinActivateForce
- DetectHiddenText
- DetectHiddenWindows
- SetTitleMatchMode
- SetWinDelay
- StatusBarGetText
- StatusBarWait
- WinActivate
- WinActivateBottom
- WinClose
- WinGet
- WinGetActiveStats
- WinGetActiveTitle
- WinGetClass
- WinGetPos
- WinGetText
- WinGetTitle
- WinHide
- WinKill
- WinMaximize
- WinMinimize
- WinMinimizeAll / WinMinimizeAllUndo
- WinMove
- WinRestore
- WinSet
- WinSetTitle
- WinShow
- WinWait
- WinWaitActive / WinWaitNotActive
- WinWaitClose
- #指令
StrPut() / StrGet() [AHK_L 46+]
复制字符串到内存地址或来自内存地址, 并可以对其在指定代码页间进行转换.
StrPut(String [, Encoding = None ] ) StrPut(String, Address [, Length] [, Encoding = None ] ) StrGet(Address [, Length] [, Encoding = None ] )
参数
- String
任何字符串. 也可以接受数字.
- Address
字符串将被写入或读取的地址.
- Length
需读取/写入的字符的最大数目, 需要时包含空终止符. 请参阅返回值。
- Encoding
用于 StrGet 的源编码或用于 StrPut 的目标编码; 例如, "UTF-8", "UTF-16" 或 "CP936". 如果 Address 和 Length 都没有指定, 那么数值标识符必须加上 "CP" 前缀. 指定空字符串或 "CP0" 则使用系统默认 ANSI 代码页.
返回值
对每个函数, 无效的参数会让它们返回空字符串.
StrPut 返回写入的字符数, 如果没有指定 Address 则返回以字符数表示的必须的缓冲区大小, 如果遇到错误则返回 0. 如果 Length 小于源字符串的长度, 那么函数失败且返回 0. 如果 Length 准确等于源字符串的长度, 那么字符串不包含空终止符; 否则返回的数目包含空终止符.
StrGet 返回所请求的进行必要转换后的字符串.
备注
注意 StrPut 的 String 参数或 StrGet 的返回值总是为当前可执行程序的 原生编码, 而 Encoding 则指定写入的或从指定 Address 读取的字符串编码. 如果未指定 Encoding, 则对字符串进行简单长度计算或复制而不进行转换.
如果需要在代码页之间转换, 那么需要的缓存大小可能不同于源 String 的大小.
需要兼容于 AutoHotkey Basic 的脚本仍可以使用 StrPut 和 StrGet, 此时它们是由安装在 函数库 中的 相应的脚本文件 提供的. 这些脚本可以在 AutoHotkey 社区论坛 中找到.
相关
脚本兼容性, FileEncoding, VarSetCapacity()
示例
Length 或 Encoding 都可以在 Address 后直接指定, 不过此时 Encoding 必须用非数值表示:
strA := StrGet(addressA, "cp0") ; OK strA := StrGet(addressA, length, 0) ; OK strA := StrGet(addressA, 0) ; 错误
可以调用一次 StrPut 来计算字符串在特殊编码时需要的缓冲区大小, 然后再进行编码并把字符串写入缓冲区. 如果您常用 StrPut 操作变量, 那么考虑把此函数添加到您 库 中:
StrPutVar(string, ByRef var, encoding) { ; 确定容量. VarSetCapacity( var, StrPut(string, encoding) ; StrPut 返回字符数, 但 VarSetCapacity 需要字节数. * ((encoding="utf-16"||encoding="cp1200") ? 2 : 1) ) ; 复制或转换字符串. return StrPut(string, &var, encoding) }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论