Bild-Handles [v1.1.23+]

Die folgende Syntax kann angewendet werden, um ein Symbol- oder Bitmap-Handle anstelle eines Bild-Dateinamens zu nutzen:

HBITMAP:Bitmap-Handle
HICON:Symbol-Handle

Ersetzen Sie Bitmap-Handle oder Symbol-Handle mit dem eigentlichen Handle-Wert. Zum Beispiel hicon:%handle% (oder "hicon:" handle in einem Ausdruck), wo 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 kennzeichnet. Die Mehrheit der Skripte muss nie auf Handles zurückgreifen, weil AutoHotkey sich in den meisten Fällen darum kümmert, das Bild aus einer Datei zu laden und es wieder freizugeben, wenn es nicht länger benötigt wird. Die oben gezeigte Syntax sollte man nur einsetzen, wenn das Skript ein Symbol- oder Bitmap-Handle aus einer anderen Quelle bezieht, z. B. durch Senden der WM_GETICON-Meldung an ein Fenster. Man kann sie auch in Kombination mit LoadPicture() verwenden, um ein mehrfaches Laden eines Bildes aus einer Datei zu vermeiden.

Standardmäßig behandelt AutoHotkey das Handle, als ob das Bild aus einer Datei geladen wurde - zum Beispiel wird eine Bitmap auf einem Picture-Steuerelement gelöscht, wenn das GUI zerstört wird, und ein Bild wird in der Regel 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 anzulegen.

Beispiele

#1: Zeigt ein Menü der ersten n Dateien an, die dem Muster entsprechen, und ihre Symbole.

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

; Reserviert Speicher für eine SHFILEINFOW-Struktur.
VarSetCapacity(Dateiinfo, Dateigröße := A_PtrSize + 688)

Loop, Files, %Muster%, FD
{
    ; Fügt ein Menüpunkt für jede Datei ein.
    Menu F, Add, %A_LoopFileName%, nix
    
    ; Ruft das Symbol der Datei ab.
    if DllCall("shell32\SHGetFileInfoW", "WStr", A_LoopFileFullPath
        , "UInt", 0, "Ptr", &Dateiinfo, "UInt", Dateigröße, "UInt", 0x100)
    {
        hicon := NumGet(Dateiinfo, 0, "Ptr")
        ; Setzt das Symbol des Menüpunktes.
        Menu F, Icon, %A_Index%&, HICON:%hicon%
        ; Da wir hier ":" anstelle von ":*" verwenden, wird das Symbol automatisch
        ; freigegeben, wenn das Programm beendet oder wenn das Menü oder der Menüpunkte gelöscht wird.
    }
}
until A_Index = n
Menu F, Show
nix:
return

Siehe auch: LoadPicture().