要使用图标或位图句柄代替图像文件名, 请使用以下语法:
HBITMAP:BitmapHandle HICON:IconHandle
用实际句柄值替换 BitmapHandle 或 IconHandle. 例如, "hicon:" handle
, 其中 handle 是包含图标句柄的变量.
以下内容支持此语法:
位图或图标句柄是一个数字值, 用于标识内存中的位图或图标. 大多数脚本不需要处理句柄, 因为在大多数情况下, AutoHotkey 会从文件中加载图像并在不再需要时释放图像. 上面的语法是当脚本从其他资源中取得图标或位图时(如发送 WM_GETICON 消息到某个窗口) 供脚本使用的. 这也可以和 LoadPicture 一起使用, 以避免多次从文件中加载图像.
默认情况下, AutoHotkey 会将句柄视为从文件中载入图像 - 例如, 销毁 GUI 时会删除 Picture 控件上使用的位图, 并且如果需要调整图像大小, 通常会立即删除该图像. 为避免这种情况, 请在冒号和句柄之间放置一个星号. 例如: "hbitmap:*" handle
. 除了 ImageSearch, 这会强制该函数获取图像的副本.
pattern := A_ScriptDir "\*" n := 15 ;创建菜单. Fmenu := Menu() ; 为 SHFILEINFOW 结构体申请内存. fileinfo := Buffer(fisize := A_PtrSize + 688) Loop Files, pattern, "FD" { ; 为每个文件添加一个菜单项. Fmenu.Add A_LoopFileName, (*) => "" ; 什么也不做. ; 获取文件的图标. if DllCall("shell32\SHGetFileInfoW", "WStr", A_LoopFileFullPath , "UInt", 0, "Ptr", fileinfo, "UInt", fisize, "UInt", 0x100) { hicon := NumGet(fileinfo, 0, "Ptr") ; 设置菜单项的图标. Fmenu.SetIcon A_Index "&", "HICON:" hicon ; 因为我们使用了 ":" 而不是 ":*", 在程序退出或菜单被删除时 ; 这些图标也会被自动释放. } } until A_Index = n Fmenu.Show
另请参阅: LoadPicture 的示例 #1.