Bild-Handles

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, wobei handle eine Variable ist, die ein Symbol-Handle enthält.

Die folgenden Dinge 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. Diese Methode zwingt die Funktion (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

; Ein Menü erstellen.
DateiMenü := Menu()

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

Loop Files, Suchmuster, "FD"
{
    ; Menüpunkt pro Datei hinzufügen.
    DateiMenü.Add A_LoopFileName, (*) => "" ; Nichts tun.
    
    ; 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.
        DateiMenü.SetIcon 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
DateiMenü.Show

Siehe auch LoadPicture-Beispiel #1.