Liste mit offenen Fenstern in einer GUI anzeigen

  • Hallo Leute,

    habe vor ein Programm zu schreiben, was alle offenen Fenster in einer GUI anzeigt. Beim Klicken auf eines der Fenster, wird sie ja markiert. Rechts sollen ein paar Buttons sein, wo man zum Beispiel auf "Verstecken", "Minimieren", etc. drücken kann. Das ganze soll ungefähr so aussehen:

    [Blockierte Grafik: http://img217.imageshack.us/img217/2241/unbenanntke.png]

    Das Problem ist, das ich nicht genau weiß wie ich die anzeigen soll... Ich hab schon hier im Forum gelesen über WinList() und und und. Leider ist mir das nicht ganz klar...

    Mit freundlichen Grüßen,
    BurakSZ

    Einmal editiert, zuletzt von BurakSZ (13. Mai 2010 um 17:07)

  • So was meinst du? Muss natürlich optimiert werden ;).

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $hWnd = GUICreate("Test", 400, 400)
    $cList = GUICtrlCreateList("", 0, 0, 340, 400)
    $cButtonMin = GUICtrlCreateButton("Minimieren", 345, 10, 50, 25)
    GUISetState()

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

    $aWinList = WinList()

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

    $sStringTmp = ""

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

    For $i = 1 To $aWinList[0][0]
    If $aWinList[$i][0] <> "" Then $sStringTmp &= $aWinList[$i][0] & "|"
    Next

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

    GUICtrlSetData($cList, $sStringTmp)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cButtonMin
    WinSetState(GUICtrlRead($cList), "", @SW_MINIMIZE)
    EndSwitch
    WEnd

    [/autoit]
  • hab hier was in meiner Sammlung gefunden:

    Spoiler anzeigen
    [autoit]

    #include <Process.au3>
    #include <GuiListView.au3>
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Run_Tidy=y
    #AutoIt3Wrapper_Run_Obfuscator=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.0.0
    Author: DrîzzIt / Thomas Schmidt

    Script Function:
    Mit diesen Programm kann man jegliches Fenster Minimieren,Wiederherstellen,Verstecken und Anzeigen

    #ce ----------------------------------------------------------------------------
    ; Script Start - Add your code below here
    Global $Key1, $Key2, $Key3, $Key4

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

    Opt("TrayIconHide", 1)

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

    GUICreate("Fenster Menü's", 300, 240)
    GUISetBkColor(0x0FF80)
    $settings = GUICtrlCreateMenu("Datei")
    $laden = GUICtrlCreateMenuItem("Laden", $settings)
    $save = GUICtrlCreateMenuItem("Speichern", $settings)
    $settings1 = GUICtrlCreateMenu("Keys Aktivieren")
    $aktiv = GUICtrlCreateMenuItem("Keys Aktivieren", $settings1)
    $deaktiv = GUICtrlCreateMenuItem("Keys Deaktivieren", $settings1)
    $settings2 = GUICtrlCreateMenu("Wichtig")
    $info = GUICtrlCreateMenuItem("Infos zu den Key's", $settings2)
    ;Tab
    GUICtrlCreateTab(10, 200, 282)
    ; Keys Tab
    GUICtrlCreateTabItem("Keys")
    GUICtrlCreateLabel("Key für MINIMIEREN äuswählen", 30, 30)
    $Min = GUICtrlCreateInput("Key", 200, 28, 70, 20, $ES_CENTER)
    GUICtrlCreateLabel("Key für MAXIMIEREN äuswählen", 30, 60)
    $Max = GUICtrlCreateInput("Key", 200, 58, 70, 20, $ES_CENTER)
    GUICtrlCreateLabel("Key für VERSTECKEN äuswählen", 30, 90)
    $Hide = GUICtrlCreateInput("Key", 200, 88, 70, 20, $ES_CENTER)
    GUICtrlCreateLabel("Key für ANZEIGEN äuswählen", 30, 120)
    $Show = GUICtrlCreateInput("Key", 200, 118, 70, 20, $ES_CENTER)
    GUICtrlCreateLabel("Name des Fensters ?!", 100, 150)
    $Name = GUICtrlCreateInput("Den korrekten Fenster-Titel hier eingeben !!!", 30, 168, 240, 20, $ES_CENTER)
    GUICtrlCreateGroup("Keys/Tasten der Einzelnen Funktionen", 15, 5, 270, 190)
    GUICtrlSetColor(-1, 0xFF0000)
    GUICtrlSetState($deaktiv, $GUI_DISABLE)
    ; Aktuelle Fenster Tab
    GUICtrlCreateTabItem("Aktuelle Fenster")
    $ListView = GUICtrlCreateListView("", 0, 0, 300, 200)
    $contextmenu1 = GUICtrlCreateContextMenu($ListView)
    $item = GUICtrlCreateMenuItem("Fenster Verstecken", $contextmenu1)
    $item2 = GUICtrlCreateMenuItem("Fenster Verkleinern", $contextmenu1)
    $item3 = GUICtrlCreateMenuItem("Fenster Wiederherstellen", $contextmenu1)
    $hListViewAnw = GUICtrlGetHandle($ListView)
    _GUICtrlListView_AddColumn($hListViewAnw, "Fenstertitel", 200)
    _GUICtrlListView_AddColumn($hListViewAnw, "Exe", 50)
    _GUICtrlListView_AddColumn($hListViewAnw, "State", 130)
    _GetFenster()
    ;Aktuelle V. Fenster
    GUICtrlCreateTabItem("Aktuelle Versteckte Fenster")
    $ListView2 = GUICtrlCreateListView("", 0, 0, 300, 200)
    $contextmenu2 = GUICtrlCreateContextMenu($ListView2)
    $item4 = GUICtrlCreateMenuItem("Fenster Anzeigen", $contextmenu2)
    $hListViewAnw2 = GUICtrlGetHandle($ListView2)
    _GUICtrlListView_AddColumn($hListViewAnw2, "Fenstertitel", 300)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $save
    _Save()
    Case $laden
    _load()
    Case $item
    _Verstecken()
    Case $item2
    _Verkleinern()
    Case $item3
    _Wiederherstellen()
    Case $item4
    _Anzeigen()
    Case $aktiv
    _HotKeySet()
    Case $deaktiv
    _DeAktivHotKeySet()
    Case $info
    MsgBox(0, "Key Infos", "Die Strg,Windows,Alt+Gr,Shift und Alt Tasten können nicht verwenden werden" & (@CRLF) & "Wenn Sie mehrere Keys gleichzeitig drücken wollen, müssen Sie es so angeben siehe Beispiel" & (@CRLF) & "z.B. AP(Für A und P drücken) oder AH(Für A und H drücken), wenn Sie die F-Tasten haben wollen einfach F1 schreiben" & (@CRLF) & "" & (@CRLF) & "Sobald Sie ein Fenster durch ein Key Verstecken wird das Fenster(Fenster Menü's) auch verteckt!")
    EndSwitch
    WEnd

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

    Func _Save()
    IniWrite(@ScriptDir & "\Fenster Menü's.ini", "Minimieren", "Key", GUICtrlRead($Min))
    IniWrite(@ScriptDir & "\Fenster Menü's.ini", "Maximieren", "Key", GUICtrlRead($Max))
    IniWrite(@ScriptDir & "\Fenster Menü's.ini", "Verstecken", "Key", GUICtrlRead($Hide))
    IniWrite(@ScriptDir & "\Fenster Menü's.ini", "Anzeigen", "Key", GUICtrlRead($Show))
    IniWrite(@ScriptDir & "\Fenster Menü's.ini", "Fenster", "Name", GUICtrlRead($Name))
    $settings1 = GUICtrlRead($deaktiv)
    If $settings1 = 68 Then IniWrite(@ScriptDir & "\Fenster Menü's.ini", "Key's", "Status", "aktiv")
    If $settings1 = 132 Then IniWrite(@ScriptDir & "\Fenster Menü's.ini", "Key's", "Status", "inaktiv")
    EndFunc ;==>_Save

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

    Func _load()
    GUICtrlSetData($Min, IniRead(@ScriptDir & "\Fenster Menü's.ini", "Minimieren", "Key", "error"))
    GUICtrlSetData($Max, IniRead(@ScriptDir & "\Fenster Menü's.ini", "Maximieren", "Key", "error"))
    GUICtrlSetData($Hide, IniRead(@ScriptDir & "\Fenster Menü's.ini", "Verstecken", "Key", "error"))
    GUICtrlSetData($Show, IniRead(@ScriptDir & "\Fenster Menü's.ini", "Anzeigen", "Key", "error"))
    GUICtrlSetData($Name, IniRead(@ScriptDir & "\Fenster Menü's.ini", "Fenster", "Name", "error"))
    $ReadKey = IniRead(@ScriptDir & "Fenster Menü's.ini", "Key's", "Status", "Nicht vorhanden")
    If $ReadKey = "aktiv" Then
    GUICtrlSetState($deaktiv, $GUI_ENABLE)
    GUICtrlSetState($aktiv, $GUI_DISABLE)
    EndIf
    EndFunc ;==>_load

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

    Func _HotKeySet()
    $Key1 = IniRead(@ScriptDir & "\Fenster Menü's.ini", "Minimieren", "Key", "error")
    $Key2 = IniRead(@ScriptDir & "\Fenster Menü's.ini", "Maximieren", "Key", "error")
    $Key3 = IniRead(@ScriptDir & "\Fenster Menü's.ini", "Verstecken", "Key", "error")
    $Key4 = IniRead(@ScriptDir & "\Fenster Menü's.ini", "Anzeigen", "Key", "error")
    $HotKey1 = HotKeySet("{" & $Key1 & "}", "_Mini")
    $HotKey2 = HotKeySet("{" & $Key2 & "}", "_Display")
    $HotKey3 = HotKeySet("{" & $Key3 & "}", "_Hide")
    $HotKey4 = HotKeySet("{" & $Key4 & "}", "_Show")
    GUICtrlSetState($aktiv, $GUI_DISABLE)
    GUICtrlSetState($deaktiv, $GUI_ENABLE)
    EndFunc ;==>_HotKeySet

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

    Func _DeAktivHotKeySet()
    $HotKey1 = HotKeySet("{" & $Key1 & "}")
    $HotKey2 = HotKeySet("{" & $Key2 & "}")
    $HotKey3 = HotKeySet("{" & $Key3 & "}")
    $HotKey4 = HotKeySet("{" & $Key4 & "}")
    GUICtrlSetState($deaktiv, $GUI_DISABLE)
    GUICtrlSetState($aktiv, $GUI_ENABLE)
    EndFunc ;==>_DeAktivHotKeySet

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

    Func _GetFenster()
    _GUICtrlListView_DeleteAllItems($hListViewAnw)
    Local $PID, $Prozessname, $WinHandle
    $Title = WinList()
    For $i = 1 To $Title[0][0]
    If $Title[$i][0] <> "" And IsVisible($Title[$i][1]) Then
    _GUICtrlListView_AddItem($hListViewAnw, $Title[$i][0], _GUICtrlListView_GetItemCount($hListViewAnw) + 999)
    $PID = WinGetProcess($Title[$i][1])
    $Prozessname = _ProcessGetName($PID)
    $state = WinGetState($Title[$i][0])
    If $state = "7" Then $state = "aktiv" ;in der hilfe zb steht das 8 minimiert wäre doch bei mri is es 7??
    If $state = "15" Then $state = "minimiert" ;in der hilfe zb steht das 16 minimiert wäre doch bei mri is es 15??
    If $state = "1" Then $state = "existiert" ;das hier stimmt soweit
    _GUICtrlListView_AddSubItem($hListViewAnw, _GUICtrlListView_GetItemCount($hListViewAnw) - 1, $Prozessname, 1)
    _GUICtrlListView_AddSubItem($hListViewAnw, _GUICtrlListView_GetItemCount($hListViewAnw) - 1, $state, 2)
    EndIf
    Next
    EndFunc ;==>_GetFenster

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

    Func _Mini()
    $FesnterN = IniRead(@ScriptDir & "\Fenster Menü's.ini", "Fenster", "Name", "error")
    WinSetState($FesnterN, "", @SW_MINIMIZE)
    WinSetState("Fenster Menü's", "", @SW_MINIMIZE)
    EndFunc ;==>_Mini

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

    Func _Display()
    $FesnterN = IniRead(@ScriptDir & "\Fenster Menü's.ini", "Fenster", "Name", "error")
    WinSetState($FesnterN, "", @SW_RESTORE)
    WinSetState("Fenster Menü's", "", @SW_RESTORE)
    EndFunc ;==>_Display

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

    Func _Hide()
    $FesnterN = IniRead(@ScriptDir & "\Fenster Menü's.ini", "Fenster", "Name", "error")
    WinSetState($FesnterN, "", @SW_HIDE)
    WinSetState("Fenster Menü's", "", @SW_HIDE)

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

    EndFunc ;==>_Hide

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

    Func _Show()
    $FesnterN = IniRead(@ScriptDir & "\Fenster Menü's.ini", "Fenster", "Name", "error")
    WinSetState($FesnterN, "", @SW_SHOW)
    WinSetState("Fenster Menü's", "", @SW_SHOW)
    EndFunc ;==>_Show

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

    Func _Verstecken()
    Local $Test, $test2
    $Test = _GuiCtrlListView_GetFirstSelected($hListViewAnw)
    If @error Then Return
    $test2 = _GUICtrlListView_GetItemText($hListViewAnw, $Test, 0)
    If WinSetState($test2, "", @SW_HIDE) Then
    _GUICtrlListView_AddItem($hListViewAnw2, $test2)
    EndIf
    EndFunc ;==>_Verstecken

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

    Func _Anzeigen()
    Local $Test, $test2
    $Test = _GuiCtrlListView_GetFirstSelected($hListViewAnw)
    If @error Then Return
    $test2 = _GUICtrlListView_GetItemText($hListViewAnw, $Test, 0)
    If WinSetState($test2, "", @SW_SHOW) Then
    _GUICtrlListView_DeleteItemsSelected($hListViewAnw2)
    EndIf
    EndFunc ;==>_Anzeigen

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

    Func _Verkleinern()
    Local $Test, $test2
    $Test = _GuiCtrlListView_GetFirstSelected($hListViewAnw)
    $test2 = _GUICtrlListView_GetItemText($hListViewAnw, $Test, 0)
    If @error Then Return
    WinSetState($test2, "", @SW_MINIMIZE)
    EndFunc ;==>_Verkleinern

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

    Func _Wiederherstellen()
    Local $Test, $test2
    $Test = _GuiCtrlListView_GetFirstSelected($hListViewAnw)
    $test2 = _GUICtrlListView_GetItemText($hListViewAnw, $Test, 0)
    If @error Then Return
    WinSetState($test2, "", @SW_RESTORE)
    EndFunc ;==>_Wiederherstellen

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

    Func _GuiCtrlListView_GetFirstSelected($hWnd)
    Global $SelectedItemi
    $SelectedItemi = _GUICtrlListView_GetSelectedIndices($hWnd, True)
    If $SelectedItemi[0] = 0 Then Return SetError(1)
    Return $SelectedItemi[1]
    EndFunc ;==>_GuiCtrlListView_GetFirstSelected

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

    Func IsVisible($handle)
    If BitAND(WinGetState($handle), 2) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc ;==>IsVisible

    [/autoit]
  • Ich hab schon hier im Forum gelesen über WinList() und und und. Leider ist mir das nicht ganz klar...

    das wichtigste ist zu wissen, dass WinList alle Fenster zurückgibt und dass du deshalb eine Routine benötigst welche nur die sichtbaren herausfiltert. Das Beispiel in der Hilfe zu WinList ist dazu gut geeignet,

    mfg (Auto)Bert

  • Das von name22 geht in die Richtung, nur das wie gesagt es noch optimiert werden muss. Reaker, guter Tipp, wenn ich was davon brauche dann seh ich mir es an. Ich versuche es irgendwie herauszufiltern, AutoBert. Danke an alle...