要在图像文件名的位置使用一个图标或位图的句柄, 使用如下的语法:
HBITMAP:BitmapHandle HICON:IconHandle
用真实的句柄值替换 BitmapHandle 或 IconHandle. 例如, hicon:%handle%
(或在表达式中的 "hicon:" handle
), 这里的 handle 是一个包含图标句柄的变量.
下列命令和函数支持这种语法:
位图或图标句柄是一个标识该位图或图标所处内存的数值. 大多数脚本没有必要处理该句柄, 因为在大多数情况下, AutoHotKey 会自动从文件载入图像并在不用时释放. 上面的语法是当脚本从其他资源中取得图标或位图时(如发送 WM_GETICON 消息到某个窗口) 供脚本使用的. 这也可以和 LoadPicture() 一起使用以避免从文件中多次载入同一图像.
AutoHotKey 默认将 Image 句柄当作从文件中载入图像一样, 比如, 当 GUI 被销毁时用于 Picture 控件的位图也会被释放, 当图像需要调整尺寸时通常也会被立即释放. 为避免此种情况, 在分号和句柄之间加入一个星号, 如: hbitmap:*%handle%
(或在表达式中的 "hbitmap:*" handle
). 例外的是用在 ImageSearch 命令中会使该命令复制一份图像.
pattern := A_ScriptDir "\*" n := 15 ; 为 SHFILEINFOW 结构体申请内存. VarSetCapacity(fileinfo, fisize := A_PtrSize + 688) Loop, Files, %pattern%, FD { ; 为每个文件添加一个菜单项. Menu F, Add, %A_LoopFileName%, donothing ; 获取文件的图标. if DllCall("shell32\SHGetFileInfoW", "Wstr", A_LoopFileFullPath , "UInt", 0, "Ptr", &fileinfo, "UInt", fisize, "UInt", 0x100) { hicon := NumGet(fileinfo, 0, "Ptr") ; 设置菜单项的图标. Menu F, Icon, %A_Index%&, HICON:%hicon% ; 因为我们使用了 ":" 而不是 ":*", 在程序退出或菜单被删除时 ; 这些图标也会被自动释放 } } until A_Index = n Menu F, Show donothing: return
参阅: LoadPicture() 的示例 #1.