イメージハンドル

画像ファイル名の代わりにアイコンやビットマップハンドルを使うには、以下の構文を使います:

HBITMAP:BitmapHandle
HICON:IconHandle

BitmapHandleまたはIconHandleを実際のハンドル値に置き換える。例えば、"hicon:" handleのように、handleはアイコンハンドルを含む変数である。

以下のものがこの構文をサポートしている:

ビットマップやアイコンのハンドルは、メモリ上のビットマップやアイコンを識別する数値です。ほとんどの場合、AutoHotkeyがファイルから画像を読み込み、不要になったら画像を解放します。上に示した構文は、スクリプトがウィンドウにWM_GETICONメッセージを送るなどして、他のソースからアイコンやビットマップハンドルを取得するときに使用するためのものです。また、LoadPictureと組み合わせて使用することで、ファイルから画像を何度も読み込むことを避けることができます。

デフォルトでは、AutoHotkeyは画像をファイルから読み込んだものとしてハンドルを扱います。例えば、ピクチャコントロールで使用されているビットマップは、GUIが破棄されると削除されますし、画像のサイズを変更する必要がある場合は、通常すぐに削除されます。これを避けるには、コロンとハンドルの間にアスタリスクを入れる。For example: "hbitmap:*" handle. ImageSearchを除き、この関数は強制的に画像のコピーを取ります。

パターンにマッチする最初のn個のファイルとそのアイコンのメニューを表示する。

pattern := A_ScriptDir "\*"
n := 15

; メニューを作ります。
Fmenu := Menu()

; Allocate memory for a SHFILEINFOW struct.
fileinfo := Buffer(fisize := A_PtrSize + 688)

Loop Files, pattern, "FD"
{
    ; Add a menu item for each file.
    Fmenu.Add A_LoopFileName, (*) => "" ; 何もしません。
    
    ; Get the file's icon.
    if DllCall("shell32\SHGetFileInfoW", "WStr", A_LoopFileFullPath
        , "UInt", 0, "Ptr", fileinfo, "UInt", fisize, "UInt", 0x100)
    {
        hicon := NumGet(fileinfo, 0, "Ptr")
        ; Set the menu item's icon.
        Fmenu.SetIcon A_Index "&", "HICON:" hicon
        ; Because we used ":" and not ":*", the icon will be automatically
        ; freed when the program exits or if the menu or item is deleted.
    }
}
until A_Index = n
Fmenu.Show

See also LoadPicture example #1.