Minimize to Tray

  • Hey.

    Gibt es in AutoIt einen Befehl, der das Aktuelle Fenster in den Tray minimiert?
    Hab in der Doku nichts dazu gefunden.

    mfg

  • Also eine direkte Funktion gibt es nicht, aber man kann sich das zusammenbasteln. Ein Traymenu erstellen und dann

    [autoit]

    Opt("TrayIconHide", 1)

    [/autoit]

    hinzufügen, dass es nicht sichtbar ist. Wenn es in den Tray gesendet werden soll, einfach die gui

    [autoit]

    GUISetState(@SW_HIDE, $main_gui)

    [/autoit]

    stellen und

    [autoit]

    Opt("TrayIconHide", 0)

    [/autoit]

    .

  • Du kannst einfach das Fenster verschwinden lassen mit

    [autoit]


    GUISetState(@SW_HIDE, $gui)

    [/autoit]

    Musst dir dann halt einfach ne Funktion schreiben, die dieses ausführt.

    //Edit: Ok, leviathan's Antwort ist etwas besser :)

    • Offizieller Beitrag

    Hallo

    Startet den Editor, Minimiert ihn zum Tray und zeigt ihn wieder.

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    Run("Notepad.exe")
    WinWait("Unbenannt")
    MsgBox(0,"","Klicke auf OK um den Editor zum Tray zu minimieren...")
    TraySetIcon("Notepad.exe")
    WinSetState("Unbenannt","",@SW_HIDE)
    Opt("TrayIconHide",0)

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

    MsgBox(0,"","Klicke auf OK um den Editor wieder zu zeigen...")
    WinSetState("Unbenannt","",@SW_SHOW)
    Opt("TrayIconHide",1)
    MsgBox(0,"","Erfolgreich!")

    [/autoit]

    Mfg Spider

  • Hi,

    etwas eleganter sieht es so aus ...

    Spoiler anzeigen
    [autoit]

    Run("Notepad.exe")
    #NoTrayIcon
    WinWait("Unbenannt")
    MsgBox(0,"","Klicke auf OK um den Editor zum Tray zu minimieren...")
    TraySetIcon("Notepad.exe")
    WinSetState("Unbenannt","",@SW_MINIMIZE)
    WinSetState("Unbenannt","",@SW_HIDE)

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

    Opt("TrayIconHide",0)

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

    MsgBox(0,"","Klicke auf OK um den Editor wieder zu zeigen...")
    WinSetState("Unbenannt","",@SW_SHOW)
    Opt("TrayIconHide",1)
    MsgBox(0,"","Erfolgreich!")

    [/autoit]

    Gruß


  • das tray gehört ja dann nicht direkt zum editor.

    es wird ja extra erstellt von dir. eigentlich kann man das ja nicht machen ohne autoit o.ä^^

  • Hä? Des is ja voll unlogisch. Dass man mit AutoIt was machen kann das sonst nicht geht.

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • ich finde das das eigentlich sehr logisch ist. wie würdest du denn sonst das tray incon erstellen ohne autoit?

    und wie würdest du deine ganzen programm fertig bekommen ohne autoit? 8|

  • Aber wenn man es über AutoIt ansprechen kann muss ja irgendwo ne Versteckte Funktion integriert sein.

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • hmm....ich glaube du hast immer noch nicht verstanden.

    die funktion TraySetIcon("Notepad.exe") erstellt ein icon aber es gehört dann nicht zum notepad.

    das notepad.exe in der klammer legt nur fest wie das erstellte icon aussieht ;)

    hast du es nun verstanden? notepad hat keine verstecke funktion die das kann.

    außerdem hat snoozer doch ganz am anfang schon gesagt das, das nur mit ein paar umwegen möglich ist. ;)

  • So, hier mal meine Version:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ;
    ; Author(s): Prog@ndy
    ; Description:: Lässt ein Programm in den Tray minimieren. Dieses wird durch
    ; SHIFT-Linksklick auf das Fenster ausgewählt und so auch immer neu minimiert.
    ;
    ;===============================================================================
    ;

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

    #NoTrayIcon
    #include<Misc.au3>
    ;Run("Notepad.exe")
    Opt("TrayMenuMode",1)
    ToolTip("Fenster zum Verstecken auswählen" & @LF & "Zum Wählen [SHIFT]-LinksKlick auf das Fenster",@DesktopWidth - 50,@DesktopHeight - 50,"Minimize To Tray",-1,4)
    $WindowHandle = -1
    While 1
    While Not _IsPressed("10")
    Sleep(10)
    WEnd
    If _IsPressed("01") Then
    If IsHWnd($WindowHandle) Then
    MsgBox(0,"","")
    If $WindowHandle == WinGetHandle("") Then _Hide()
    Else
    ToolTip("")
    $WindowHandle = WinGetHandle("")
    $PID = _ProcessGetPidByWindow($WindowHandle)
    $Path = _ProcessGetPath($PID)
    TraySetIcon($Path)
    $aboutitem = TrayCreateItem(StringLeft(WinGetTitle($WindowHandle),25) & " wiederherstellen")
    TrayCreateItem("")
    $exititem = TrayCreateItem("MinimizeToTray beenden")
    _Hide()
    EndIf
    EndIf
    WEnd

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

    Func _ProcessGetPath($PID)
    $Path = DllStructCreate("char[1000]")
    $dll = DllOpen("Kernel32.dll")
    $handle = DllCall($dll,"int", "OpenProcess","dword",0x0400 + 0x0010,"int",0,"dword",$PID)
    $ret = DllCall("Psapi.dll","long","GetModuleFileNameEx","long",$handle[0],"int",0,"ptr",DllStructGetPtr($Path),"long",DllStructGetSize($Path))
    $ret = DllCall($dll,"int", "CloseHandle","hwnd",$handle[0])
    DllClose($dll)
    $ProgramPath = DllStructGetData($Path,1)
    Return $ProgramPath
    EndFunc

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

    Func _ProcessGetPidByWindow($WindowHandle)
    $ptr = DllStructCreate("long")
    $ret = DllCall("user32.dll","ptr","GetWindowThreadProcessId","hwnd",$WindowHandle,"long",DllStructGetPtr($ptr))
    $PID = DllStructGetData($ptr,1)
    Return $PID
    EndFunc

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

    Func _Hide()
    WinSetState($WindowHandle,"",@SW_MINIMIZE)
    WinSetState($WindowHandle,"",@SW_HIDE)

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

    Opt("TrayIconHide",0)
    While 1
    $msg = TrayGetMsg()
    Select
    Case $msg = 0
    ContinueLoop
    Case $msg = $aboutitem
    _Show()
    ExitLoop
    Case $msg = $exititem
    _Show()
    Exit
    EndSelect
    WEnd
    EndFunc

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

    Func _Show()
    WinSetState($WindowHandle,"",@SW_SHOW)
    WinSetState($WindowHandle,"",@SW_RESTORE)
    Opt("TrayIconHide",1)
    EndFunc

    [/autoit]


    ProgrammFenster per SHIFT-Klick auswählen. Lässt sich immer wieder minimieren. MinimizeTotray wird beendet, indem im Minimierten zustand auf beenden geklickt wird.

  • @progandy: ich denke es währe sehr praktisch wenn du das in eine udf packen könntest^^

    machst du das vllt mal?

    das script find ich aber echt gelungen.

  • Hallo zusammen,

    leider ist mir dieses Thema noch etwas unklar.

    Ich möchte meine Anwendung (welche normal kein Trayicon besitzt) durch einen Klick auf den Minimieren Button
    in den Tray minimieren (keine Anzeige mehr in der Taskleiste).

    Hab meiner GUI am Anfang noch Folgendes mitgegeben..

    [autoit]


    Opt("TrayIconHide", 1) ;Icon beim Start verstecken
    Opt("TrayMenuMode",1) ;WENN das Tray angezeigt wird, Standardtraymenüeinträge (Script pausieren/beenden) nicht anzeigen

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

    GUISetOnEvent($GUI_EVENT_MINIMIZE,"Form1_1Minimize") ;wenn Minimieren-Button gedrückt wird Funktion "Form1_1Minimize" ausführen

    [/autoit]

    Das mit dem Minimieren in den Tray funzt einwandfrei.
    Nur was ich nich versteh, wo muss ich was tipseln, damit die Anwendung bei einem Single-Click auf das Trayicon wieder angezeigt wird?? ?(

    Also Trayicon ausblenden und in Taskleiste wieder einblenden..


    Viiiieeelen Dank Leute :)

    Einmal editiert, zuletzt von wwasow (5. Mai 2009 um 14:29)

  • Hi Greenhorn,

    danke für den Hinweis.
    Bin leider trotzdem nich wesentlich weiter gekommen *g*

    C:\Program Files\AutoIt3\Include\ModernMenu.au3(23,72) : ERROR: $SRCCOPY previously declared as a 'Const'
    If Not IsDeclared("SRCCOPY") Then Global Const $SRCCOPY = 0x00CC0020
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(30,75) : ERROR: $WM_DRAWITEM previously declared as a 'Const'
    If Not IsDeclared("WM_DRAWITEM") Then Global Const $WM_DRAWITEM = 0x002B
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(31,81) : ERROR: $WM_MEASUREITEM previously declared as a 'Const'
    If Not IsDeclared("WM_MEASUREITEM") Then Global Const $WM_MEASUREITEM = 0x002C
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(33,68) : ERROR: $WM_USER previously declared as a 'Const'
    If Not IsDeclared("WM_USER") Then Global Const $WM_USER = 0x0400
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(34,71) : ERROR: $WM_TIMER previously declared as a 'Const'
    If Not IsDeclared("WM_TIMER") Then Global Const $WM_TIMER = 0x0113
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(44,71) : ERROR: $SM_CXSMICON previously declared as a 'Const'
    If Not IsDeclared("SM_CXSMICON") Then Global Const $SM_CXSMICON = 49
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(45,77) : ERROR: $SM_CXMENUCHECK previously declared as a 'Const'
    If Not IsDeclared("SM_CXMENUCHECK") Then Global Const $SM_CXMENUCHECK = 71
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(56,78) : ERROR: $DT_VCENTER previously declared as a 'Const'
    If Not IsDeclared("DT_VCENTER") Then Global Const $DT_VCENTER = 0x00000004
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(57,76) : ERROR: $DT_BOTTOM previously declared as a 'Const'
    If Not IsDeclared("DT_BOTTOM") Then Global Const $DT_BOTTOM = 0x00000008
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(58,83) : ERROR: $DT_SINGLELINE previously declared as a 'Const'
    If Not IsDeclared("DT_SINGLELINE") Then Global Const $DT_SINGLELINE = 0x00000020
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(59,76) : ERROR: $DT_NOCLIP previously declared as a 'Const'
    If Not IsDeclared("DT_NOCLIP") Then Global Const $DT_NOCLIP = 0x00000100
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(61,69) : ERROR: $COLOR_MENU previously declared as a 'Const'
    If Not IsDeclared("COLOR_MENU") Then Global Const $COLOR_MENU = 4
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(62,76) : ERROR: $COLOR_MENUTEXT previously declared as a 'Const'
    If Not IsDeclared("COLOR_MENUTEXT") Then Global Const $COLOR_MENUTEXT = 7
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(63,78) : ERROR: $COLOR_HIGHLIGHT previously declared as a 'Const'
    If Not IsDeclared("COLOR_HIGHLIGHT") Then Global Const $COLOR_HIGHLIGHT = 13
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(64,85) : ERROR: $COLOR_HIGHLIGHTTEXT previously declared as a 'Const'
    If Not IsDeclared("COLOR_HIGHLIGHTTEXT") Then Global Const $COLOR_HIGHLIGHTTEXT = 14
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(65,77) : ERROR: $COLOR_GRAYTEXT previously declared as a 'Const'
    If Not IsDeclared("COLOR_GRAYTEXT") Then Global Const $COLOR_GRAYTEXT = 17
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(210,77) : ERROR: $WM_MOUSEMOVE previously declared as a 'Const'
    If Not IsDeclared("WM_MOUSEMOVE") Then Global Const $WM_MOUSEMOVE = 0x0200
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Program Files\AutoIt3\Include\ModernMenu.au3(212,77) : ERROR: $WM_LBUTTONUP previously declared as a 'Const'
    If Not IsDeclared("WM_LBUTTONUP") Then Global Const $WM_LBUTTONUP = 0x0202
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    H:\_AutoIt\ping_assi.au3 - 18 error(s), 0 warning(s)


    WTF? 8|

    Hab die ModernMenu included.. sonst nüscht...

  • Das ist eigentlich nicht weiter schlimm, Du kannst das Skript ohne den "Wrapper" trotzdem ausführen.

    Die Konsolenausgabe ist von der au3check.exe und ist eigentlich ein Bug.

    Damit Du es tritzdem in SciTE starten kannst, musst Du die ausgegebenen Deklarationen in der ModernMenu.au3 auskommentieren.
    Oder Du nimmst diese:
    autoit.de/wcf/attachment/4692/


    Gruß
    Greenhorn