Statusbar-Icon aus @scriptfullpath?

  • Hallo Leute,
    hab mal wieder ein Problem...
    Ich möchte in meine Statusbar mein Programm-Icon integrieren. Es funktioniert,wenn ich es ein zweitesmal installiere und aufrufe:
    FILEINSTALL('test.ico',@TempDir&'\test.ico')
    Global $hIcon = _WinAPI_LoadImage(0,@TempDir&'\test.ico', $IMAGE_ICON, 16, 16, $LR_LOADFROMFILE)

    nun meine Frage:
    Ist es möglich den Aufruf so umzustellen, das Icon aus dem @Scriptfullpath zu erhalten?

    Danke, Gremlin78

    2 Mal editiert, zuletzt von Gremlin78 (26. Juni 2013 um 20:51)

    • Offizieller Beitrag

    Ich weiß nicht mehr von wem die Funktion "__WinAPI_ShellExtractIcons" stammt, aber so geht es jedenfalls (bei compilierten Script):

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <WinAPI.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $hgui = GUICreate("test", 500, 500)
    $hStatus = _GUICtrlStatusBar_Create($hgui)
    Global $aParts[4] = [75, 150, 300, 400]
    _GUICtrlStatusBar_SetParts($hStatus, $aParts)
    $hIcon = __WinAPI_ShellExtractIcons(@ScriptFullPath, 0, 24, 24)
    _GUICtrlStatusBar_SetIcon($hStatus, 0, $hIcon)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    _WinAPI_DestroyIcon($hIcon)
    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func __WinAPI_ShellExtractIcons($sIcon, $iIndex, $iWidth, $iHeight)
    Local $Ret = DllCall('shell32.dll', 'int', 'SHExtractIconsW', 'wstr', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr*', 0, 'ptr*', 0, 'int', 1, 'int', 0)
    If (@error) Or ($Ret[0] = 0) Or ($Ret[5] = Ptr(0)) Then Return SetError(1, 0, 0)
    Return $Ret[5]
    EndFunc ;==>__WinAPI_ShellExtractIcons

    [/autoit]