Programme verstecken

  • Nabend, da ich immer Programme offen hab die ich aber nur machmal nachschaue (Kontrollprogramme, VLC, etc.) habe ich mich immer geärgert, das ich die Taskleiste dicht habe. Es gibt natürlich Programme, die sich in die Programme einklingen und diese dann in den Systemtray ablegen, aber ich wollte auch nicht soviele Symbole daunten haben :) .

    Also zu dem Skript, es ist noch recht einfach gehalten und hat auch bestimmt noch Bugs, aber ich wollte es doch schon mal posten. Wenn das Skript gestartet ist, kann man jedes Fenster was grade aktiv ist durch Strg+Alt+v verschwinden lassen, wenn man auf das Script-Icon klickt kann man dort Programme anzeigen klicken und bekommt eine Liste mit den versteckten Programmen. Wird das Programm beendet (natürlich nicht wenn der Prozess gekillt wird) dann werden alle versteckten Fenster wiederhergestellt.


    Spoiler anzeigen
    [autoit]


    ; Includes
    #include <GUIConstants.au3>
    #Include <Constants.au3>
    #Include <WinAPI.au3>
    #include <array.au3>

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

    ; Optionen
    Opt("TrayMenuMode",1) ; Default tray menu items (Script Paused/Exit) will not be shown.

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

    ; Konstanten
    Const $SW_HIDE = 0
    Const $SW_SHOW = 1

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

    ; Variablen / Arrays
    Dim $arrTitel[1] ;Fenstertitel
    Dim $arrwHnd[1] ;Windowhandle
    Dim $hWnd ;für aktives Windowhandle
    Dim $anzahl ;Anzahl der versteckten Fenster
    Dim $selID ; ausgewälter Listenindex

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

    ; GUI
    Global $frmShow = GUICreate("Versteckte Fenster", 800, 500)
    GUICtrlCreateLabel("Versteckte Fenster:", 30, 10)
    $liste = GUICtrlCreateList("",30,25, 740,400)
    $cmdrestore = GUICtrlCreateButton("Anzeigen",30,430,120)
    $cmdcloseliste = GUICtrlCreateButton("Schliessen",180,430,120)
    GUISetState(@SW_HIDE)

    ; Defaultwerte
    $arrTitel[0] = 0
    $arrwHnd[0] = 0
    $hWnd = _WinAPI_GetDesktopWindow()
    $anzahl = 0
    $selID = -1

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

    ; Hotkeys
    HotKeySet("^!v","AktivesVerstecken")
    HotKeySet("^!b","Beenden")

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

    ; Tray Menü
    $restore = TrayCreateItem("Programme anzeigen") ;Hilfe anzeigen
    $helpitem = TrayCreateItem("Hilfe") ;Hilfe anzeigen
    $aboutitem = TrayCreateItem("Über") ;Über... anzeigen
    TrayCreateItem("")
    $exititem = TrayCreateItem("Exit") ;Programm beenden
    TraySetState()

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

    While 1
    $msg = TrayGetMsg()
    $msgGUI = GUIGetMsg()
    Select
    Case $msg = $aboutitem
    Msgbox(64,"Über:","Erstellt von J. Kröger")
    Case $msg = $exititem
    Beenden()
    Case $msg = $helpitem
    Msgbox(64,"Hilfe:","STRG+ALT+V = Aktives Fenster verstecken" & @CRLF & "STRG+ALT+B = Programm beenden")
    Case $msg = $restore
    GUIDelete($frmShow)
    GUICtrlDelete($liste)
    GUICtrlDelete($cmdrestore)
    GUICtrlDelete($cmdcloseliste)
    Global $frmShow = GUICreate("Versteckte Fenster", 800, 500)
    GUICtrlCreateLabel("Versteckte Fenster:", 30, 10)
    $liste = GUICtrlCreateList("",30,25, 740,400)
    For $i = 1 To $anzahl
    GUICtrlSetData(-1,$arrTitel[$i])
    Next
    $cmdrestore = GUICtrlCreateButton("Anzeigen",30,430,120)
    $cmdcloseliste = GUICtrlCreateButton("Schliessen",180,430,120)
    GUISetState(@SW_SHOW)
    Case $msgGUI = 0
    ContinueLoop
    Case $msgGUI = $liste
    $selID = _ArraySearch($arrTitel,GUICtrlRead($liste),1)
    Case $msgGUI = $cmdrestore
    If $selID <> -1 Then
    If _WinAPI_ShowWindow($arrwHnd[$selID],$SW_SHOW) Then
    $anzahl -= 1
    _ArrayDelete($arrwHnd,$selID)
    _ArrayDelete($arrTitel,$selID)
    For $i = 1 To $anzahl
    $strLen = StringLen($arrTitel[$i]) -2
    If $i < 10 Then
    $arrTitel[$i] = "0" & $i & StringMid($arrTitel[$i],3)
    Else
    $arrTitel[$i] = $i & StringMid($arrTitel[$i],3)
    EndIf
    Next
    EndIf
    GUIDelete($frmShow)
    EndIf
    Case $msgGUI = $cmdcloseliste
    GUIDelete($frmShow)
    EndSelect
    WEnd

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

    Func AktivesVerstecken()
    $hWnd = WinGetHandle("")

    If _ArraySearch($arrwHnd,$hWnd,1) = -1 Then
    $anzahl += 1
    _ArrayAdd($arrwHnd,$hWnd)
    If $anzahl < 10 Then
    _ArrayAdd($arrTitel,"0" & $anzahl & "-" & _WinAPI_GetWindowText($hWnd))
    Else
    _ArrayAdd($arrTitel,$anzahl & "-" & _WinAPI_GetWindowText($hWnd))
    EndIf
    _WinAPI_ShowWindow($hWnd,$SW_HIDE)
    EndIf
    EndFunc

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

    Func Beenden()
    If $anzahl > 0 Then
    For $i = 1 To $anzahl
    _WinAPI_ShowWindow($arrwHnd[$i],$SW_SHOW)
    Next
    EndIf
    Exit 0
    EndFunc

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

    Vielleicht kann es ja einer gebrauchen.

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • HAllo.

    Also das Tool ist super. Arbeitet fehlerfrei und wird den einen oder anderen ärgern, der schauen möchte, was man so laufen hat.

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • ist ganz interessant, wär aber noch schöner finde ich, wenn er für die ge"hide"eten fenster vielleicht direkt nen eintrag ins traymenü macht und wenn man auf den selbigen klickt, es wieder hergestellt wird - find es halt n bisschen umständlich, dass ne gui aufgeht man noch das fenster auswählen muss, ok drücken, bla bla bla...

    so wäre das ganze mit rechtsklick -> traymenüitem vom gewünschten fenster linksklick -> fertig

    nur son tip ;)

  • @oliverh, danke für den Tip.

    War ich auch erst am überlegen, bis mit zwei Sachen eingefallen sind :)
    1. Dann hab ich das TrayMenü voll mit Icons, also eigentlich nur die Flut von Müll von links nach rechts verschoben
    2. Es gibt solche Programme schon, mir fällt jetzt grade nur MinimizerXP ein

    Ich hab mit das Script gestern Abend auch nur in einer ruhigen Stunde zusammen gekleistert, aber vielleicht hab ich oder ein anderer ja Lust das als Zusatz mit einzubauen :)

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • ich glaube du hast mich da ein bisschen falsch verstanden....

    meinte anstatt des GUIs in dem dir die aktiven, versteckten fenster angeziegt werden und du sie dann schließen kannst, einfach für die fenster mit

    [autoit]

    TrayCreateItem($fenstertitel)

    [/autoit]

    und der entspr. funktion zum wiederherstellen usw...

    da hast du weiterhin nur ein icon im traymenü

  • Nun gefällt mir auch gut, aber es war für mich eine schöne Fingerübung und in dem Tool sind ja auch einige Funktionen mehr drinnen :) was sich dann auch in der Entwicklungszeit niederschlägt 23 Monate zu 90 Minuten :)
    Leider startet ModernMenu bei mir nicht :(

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Würde ich machen, wenn ich welchen hätte, bin noch nicht dazu gekommen seit gestern Abend was dran zu machen :)

    14:08
    Nachtrag, hab noch in der Pause mal schnell ein neues geschrieben bzw. ein etwas anderes, weniger Code und keine Gui mehr, zum verstecken Strg+Alt+v drücken. Die Liste ist jetzt beim Icon unten untergebracht.

    Einträge bei TrayIcon Version
    [autoit]

    ; Optionen
    Opt("TrayMenuMode",1) ; Default tray menu items (Script Paused/Exit) will not be shown.

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

    ; Include
    #include <array.au3>
    #Include <WinAPI.au3>

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

    ; Hotkey
    HotKeySet("^!v","AddWindow")

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

    ; Tray Menü
    $restore = TrayCreateMenu("Programme anzeigen") ;Hilfe anzeigen
    $helpitem = TrayCreateItem("Hilfe") ;Hilfe anzeigen
    $aboutitem = TrayCreateItem("Über") ;Über... anzeigen
    $exititem = TrayCreateItem("Exit") ;Programm beenden
    TraySetState()

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

    ; Variablen
    Dim $arrhWnd[1]
    Dim $arrControl[1]
    Dim $anzahl = 0

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

    ; Warteschleife
    While 1
    $msg = TrayGetMsg()
    Select
    Case $msg = 0
    ContinueLoop
    Case $msg = $aboutitem
    Msgbox(64,"Über:","Erstellt von J. Kröger")
    ContinueLoop
    Case $msg = $exititem
    If $anzahl > 0 Then
    For $x = 1 to $anzahl
    _WinAPI_ShowWindow($arrhWnd[$x],1)
    Next
    EndIf
    Exit 0
    ContinueLoop
    Case $msg = $helpitem
    Msgbox(64,"Hilfe","Zum verstecken Strg+Alt+v drücken.")
    ContinueLoop
    Case Else
    If $msg <> $exititem AND $msg > 0 Then
    $id = _ArraySearch($arrControl,$msg,1,0,1)
    $hWnd = $arrhWnd[$id]
    _WinAPI_ShowWindow($hWnd,1)
    TrayItemDelete($msg)
    _ArrayDelete($arrhWnd,$id)
    _ArrayDelete($arrControl,$id)
    $anzahl -= 1
    EndIf
    EndSelect
    WEnd

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

    Func AddWindow()
    $hWnd = WinGetHandle("")
    if _ArraySearch($arrhWnd,$hWnd,1,0,1) = -1 Then
    $titel = _WinAPI_GetWindowText($hWnd)
    $newcontrol = TrayCreateItem($titel,$restore)
    _ArrayAdd($arrhWnd,$hWnd)
    _ArrayAdd($arrControl,$newcontrol)
    _WinAPI_ShowWindow($hWnd,0)
    $anzahl += 1
    EndIf
    EndFunc

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

    Einmal editiert, zuletzt von McPoldy (6. Februar 2008 um 13:57)

  • Ey das is wirklich klasse .. aba ich habe herausgefunden das wenn nur der Desktop aktiv is und man die Tastenkombi drückt das denn die Icons weg sind und in der liste als Program Manager drin stehen XD
    Also ich würde sagen das das ein bug is .

    EDIT:
    Ach ja jetzt is auch die Taskleiste weg XD ... shit
    das is wohl ein riesen bug.
    _____________
    MfG [KdD]Wolf :rock:

  • Also ich würd das jetzt nicht als Bug bezeichen, denn es ist doch nur logisch, dass das Programm auch den Desktop oder die Taskleiste verstecken kann?! :D
    blos blöd isses wenn man die Taskleiste versteckt, dann kann man das Programm nämlich nur noch killen...oder einfach den PC neustarten, dass man wieder alles da hat, weil ja das Programm beim "bösen" beenden die Fenster nicht wieder herstellt.
    Wäre vlt am einfachsten zu lösen, indem man eine Art Panik Key einbaut, bei dem das Programm dann beendet wird und die Fenster auch wieder hergestellt werden können.

  • Ich hab hier mal 2 Möglichkeiten für einen Panic Key:
    Taskleiste anzeigen mit [Strg]+[Alt]+[t].
    und Panic beenden mit [Strg]+[Alt]+[p].

    Spoiler anzeigen
    [autoit]

    ; Optionen
    Opt("TrayMenuMode",1) ; Default tray menu items (Script Paused/Exit) will not be shown.

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

    ; Include
    #include <array.au3>
    #Include <WinAPI.au3>

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

    ; Hotkey
    HotKeySet("^!v","AddWindow")
    HotKeySet("^!t","Panic")
    HotKeySet("^!p","Panic2")

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

    ; Tray Menü
    $restore = TrayCreateMenu("Programme anzeigen") ;Hilfe anzeigen
    $helpitem = TrayCreateItem("Hilfe") ;Hilfe anzeigen
    $aboutitem = TrayCreateItem("Über") ;Über... anzeigen
    $exititem = TrayCreateItem("Exit") ;Programm beenden
    TraySetState()

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

    ; Variablen
    Dim $arrhWnd[1]
    Dim $arrControl[1]
    Dim $anzahl = 0

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

    ; Warteschleife
    While 1
    $msg = TrayGetMsg()
    Select
    Case $msg = 0
    ContinueLoop
    Case $msg = $aboutitem
    Msgbox(64,"Über:","Erstellt von J. Kröger")
    ContinueLoop
    Case $msg = $exititem
    If $anzahl > 0 Then
    For $x = 1 to $anzahl
    _WinAPI_ShowWindow($arrhWnd[$x],1)
    Next
    EndIf
    Exit 0
    ContinueLoop
    Case $msg = $helpitem
    Msgbox(64,"Hilfe","Zum verstecken Strg+Alt+v drücken." & @CRLF & "Taskleiste anzeigen mit [Strg]+[Alt]+[t]."& @CRLF & "Panic beenden mit [Strg]+[Alt]+[p].")
    ContinueLoop
    Case Else
    If $msg <> $exititem AND $msg > 0 Then
    $id = _ArraySearch($arrControl,$msg,1,0,1)
    $hWnd = $arrhWnd[$id]
    _WinAPI_ShowWindow($hWnd,1)
    TrayItemDelete($msg)
    _ArrayDelete($arrhWnd,$id)
    _ArrayDelete($arrControl,$id)
    $anzahl -= 1
    EndIf
    EndSelect
    WEnd

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

    Func Panic()
    $hWnd = WinGetHandle("[CLASS:Shell_TrayWnd]")
    $id = _ArraySearch($arrhWnd,$hWnd,1,0,1)
    $hWnd = $arrhWnd[$id]
    _WinAPI_ShowWindow($hWnd,1)
    TrayItemDelete($arrControl[$id])
    _ArrayDelete($arrhWnd,$id)
    _ArrayDelete($arrControl,$id)
    $anzahl -= 1
    EndFunc
    Func Panic2()
    If $anzahl > 0 Then
    For $x = 1 to $anzahl
    _WinAPI_ShowWindow($arrhWnd[$x],1)
    Next
    EndIf
    Exit 0
    EndFunc
    Func AddWindow()
    $hWnd = WinGetHandle("")
    if _ArraySearch($arrhWnd,$hWnd,1,0,1) = -1 Then
    $titel = _WinAPI_GetWindowText($hWnd)
    $newcontrol = TrayCreateItem($titel,$restore)
    _ArrayAdd($arrhWnd,$hWnd)
    _ArrayAdd($arrControl,$newcontrol)
    _WinAPI_ShowWindow($hWnd,0)
    $anzahl += 1
    EndIf
    EndFunc

    [/autoit]
  • Mhh, das ist ja wirklich doof :)

    Das mit den Panik Köpfen ist eine feine Sache, aber habe mal das verstecken der Taskleiste raus genommen ( Zeile78 ).

    Spoiler anzeigen
    [autoit]


    ; Optionen
    Opt("TrayMenuMode",1) ; Default tray menu items (Script Paused/Exit) will not be shown.

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

    ; Include
    #include <array.au3>
    #Include <WinAPI.au3>

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

    ; Hotkey
    HotKeySet("^!v","AddWindow")
    HotKeySet("^!t","Panic")
    HotKeySet("^!p","Panic2")

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

    ; Tray Menü
    $restore = TrayCreateMenu("Programme anzeigen") ;Hilfe anzeigen
    $helpitem = TrayCreateItem("Hilfe") ;Hilfe anzeigen
    $aboutitem = TrayCreateItem("Über") ;Über... anzeigen
    $exititem = TrayCreateItem("Exit") ;Programm beenden
    TraySetState()

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

    ; Variablen
    Dim $arrhWnd[1]
    Dim $arrControl[1]
    Dim $anzahl = 0

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

    ; Warteschleife
    While 1
    $msg = TrayGetMsg()
    Select
    Case $msg = 0
    ContinueLoop
    Case $msg = $aboutitem
    Msgbox(64,"Über:","Erstellt von J. Kröger")
    ContinueLoop
    Case $msg = $exititem
    If $anzahl > 0 Then
    For $x = 1 to $anzahl
    _WinAPI_ShowWindow($arrhWnd[$x],1)
    Next
    EndIf
    Exit 0
    ContinueLoop
    Case $msg = $helpitem
    Msgbox(64,"Hilfe","Zum verstecken Strg+Alt+v drücken." & @CRLF & "Taskleiste anzeigen mit [Strg]+[Alt]+[t]."& @CRLF & "Panic beenden mit [Strg]+[Alt]+[p].")
    ContinueLoop
    Case Else
    If $msg <> $exititem AND $msg > 0 Then
    $id = _ArraySearch($arrControl,$msg,1,0,1)
    $hWnd = $arrhWnd[$id]
    _WinAPI_ShowWindow($hWnd,1)
    TrayItemDelete($msg)
    _ArrayDelete($arrhWnd,$id)
    _ArrayDelete($arrControl,$id)
    $anzahl -= 1
    EndIf
    EndSelect
    WEnd

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

    Func Panic()
    $hWnd = WinGetHandle("[CLASS:Shell_TrayWnd]")
    $id = _ArraySearch($arrhWnd,$hWnd,1,0,1)
    $hWnd = $arrhWnd[$id]
    _WinAPI_ShowWindow($hWnd,1)
    TrayItemDelete($arrControl[$id])
    _ArrayDelete($arrhWnd,$id)
    _ArrayDelete($arrControl,$id)
    $anzahl -= 1
    EndFunc
    Func Panic2()
    If $anzahl > 0 Then
    For $x = 1 to $anzahl
    _WinAPI_ShowWindow($arrhWnd[$x],1)
    Next
    EndIf
    Exit 0
    EndFunc
    Func AddWindow()
    $hWnd = WinGetHandle("")
    If $hWnd = WinGetHandle("[CLASS:Shell_TrayWnd]") Then Return -1 ;Tray-Bar kann nicht versteckt werden
    if _ArraySearch($arrhWnd,$hWnd,1,0,1) = -1 Then
    $titel = _WinAPI_GetWindowText($hWnd)
    $newcontrol = TrayCreateItem($titel,$restore)
    _ArrayAdd($arrhWnd,$hWnd)
    _ArrayAdd($arrControl,$newcontrol)
    _WinAPI_ShowWindow($hWnd,0)
    $anzahl += 1
    EndIf
    EndFunc

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)