Bild-Handles [v1.1.23+]

Mit der folgenden Syntax können Sie ein Symbol- oder Bitmap-Handle anstelle eines Bilddateinamens verwenden:

HBITMAP:BitmapHandle
HICON:SymbolHandle

Ersetzen Sie BitmapHandle oder SymbolHandle mit dem eigentlichen Handle-Wert. Zum Beispiel hicon:%handle% (oder "hicon:" handle in einem Ausdruck), wobei handle eine Variable ist, die ein Symbol-Handle enthält.

Die folgenden Befehle und Funktionen unterstützen diese Syntax:

Ein Bitmap- oder Symbol-Handle ist ein numerischer Wert, der eine Bitmap oder ein Symbol im Arbeitsspeicher identifiziert. Viele Skripte müssen sich nie mit Handles befassen, da AutoHotkey in den meisten Fällen automatisch das Bild aus der Datei lädt und es wieder freigibt, wenn es nicht mehr benötigt wird. Die oben gezeigte Syntax sollte nur verwendet werden, wenn das Skript ein Symbol- oder Bitmap-Handle aus einer anderen Quelle bezieht, z.B. durch Senden der WM_GETICON-Meldung an ein Fenster. Die Syntax kann auch in Kombination mit LoadPicture() verwendet werden, um das mehrfache Laden eines Bildes aus einer Datei zu vermeiden.

Standardmäßig wird das Handle so behandelt, als hätte AutoHotkey das Bild aus einer Datei geladen - zum Beispiel wird eine Bitmap, die für ein Picture-Steuerelement verwendet wird, gelöscht, wenn die GUI zerstört wird, außerdem wird ein Bild grundsätzlich sofort gelöscht, wenn dessen Größe geändert werden muss. Um das zu verhindern, fügen Sie einfach ein Sternchen zwischen dem Doppelpunkt und dem Handle ein. Zum Beispiel: hbitmap:*%handle% (oder "hbitmap:*" handle in einem Ausdruck). Diese Methode zwingt den Befehl (außer ImageSearch), eine Kopie des Bildes zu erstellen.

Beispiele

Zeigt ein Menü der ersten n gefundenen Dateien an, inklusive Symbole.

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

; Speicher für eine SHFILEINFOW-Struktur reservieren.
VarSetCapacity(DateiInfo, DateiGröße := A_PtrSize + 688)

Loop, Files, %Suchmuster%, FD
{
    ; Menüpunkt pro Datei hinzufügen.
    Menu F, Add, %A_LoopFileName%, nix
    
    ; Symbol der Datei abrufen.
    if DllCall("shell32\SHGetFileInfoW", "WStr", A_LoopFileFullPath
        , "UInt", 0, "Ptr", &DateiInfo, "UInt", DateiGröße, "UInt", 0x100)
    {
        hicon := NumGet(DateiInfo, 0, "Ptr")
        ; Symbol des Menüpunkts setzen.
        Menu F, Icon, %A_Index%&, HICON:%hicon%
        ; Da wir hier ":" statt ":*" verwenden, wird das Symbol automatisch
        ; freigegeben, wenn das Programm beendet oder wenn das Menü oder der
        ; Menüpunkt gelöscht wird.
    }
}
until A_Index = n
Menu F, Show
nix:
return

Siehe auch LoadPicture-Beispiel #1.