Image 句柄 [v1.1.23+]
要在图像文件名(image filename)的位置使用一个图标或位图的句柄, 使用如下的表示法:
HBITMAP:bitmap-handle HICON:icon-handle
用真实的句柄值替换 bitmap-handle 或 icon-handle . 例如, hicon:%handle%
(或在 表达式 中 "hicon:" handle
), 这里的 handle 是一个包含图标句柄的变量.
下列命令支持这种表示法:
- Gui Add, Picture (当使用 GuiControl 设置一个Picture控件的内容时).
- IL_Add
- LoadPicture
- SB_SetIcon
- ImageSearch
- Menu Tray, Icon 或 Menu MenuName, Icon
- SplashImage
位图或图标句柄是一个标识该位图或图标所处内存的数值. 大多数脚本从没有必要处理该句柄, 就像大多数情况下AutoHotKey会自动从文件载入图像并在不用时释放. 上面的表示法是当脚本从其他资源中取得图标或位图时(如发送WM_GETICON消息到某个窗口)供脚本使用的.这也可以和 LoadPicture 一起使用以避免从文件中多次载入同一图像.
AutoHotKey默认将Image句柄当作从文件中载入图像一样, 比如, 当GUI被销毁时 用于Picture控件的位图也会被释放, 当图像需要调整尺寸时通常也会被立即释放. 为避免此种情况, 在分号和句柄之间加入一个星号, 如: hbitmap:*%handle%
(或在表达式中 "hbitmap:*" handle
). 例外的是用在ImageSearch命令中会使该命令复制一份图像.
示例
; 显示一个匹配前n个文件的列表菜单,菜单图标为图标文件本身. 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.