Feststellen ob Desktop sichtbar ist

  • Morgen,

    ich versuche nun schon lange festzustellen ob alle Fenster minimiert sind und der Desktop sichtbar ist.
    Ich komme aber zu keiner Lösung.

    Wahrscheinlich zu früh. ?(8|

    Weiß wer ne Möglichkeit?

  • Einfachste Möglichkeit > Sende 'Windows & D" ;) dann wird alles minimiert :D
    Möglichkeit 2. Hole dir eine Liste aller Fenster und frage deren zustand ab, wenn alle Minimized sind dann ist der Desktop sichtbar (ist ja logisch)
    und sonst fällt mir auf die schnelle auch keine Lösung ein :P

    Gruß Marvin

  • Ich will ja abfragen ob alles minimiert ist und nicht selber alles minimieren.

    2. Möglichkeit hatte ich ja auch schon. Mach ich aber erst wenn nix anderes in Frage kommt.

  • ich versuche nun schon lange festzustellen ob alle Fenster minimiert sind und der Desktop sichtbar ist.
    Ich komme aber zu keiner Lösung.


    Alle Fenster minimiert, und der Desktop komplett sichtbar - oder nicht alle Fenster maximiert, und der Desktop (zumindest zu einem minimalen Teil) sichtbar?

  • Der Desktop muss zumindest angeklickt sein. D.h. ja, theoretisch könnten 50 Fenster geöffnet sein und man klickt durch eine kleine Lücke auf den Desktop und der Program Manager wäre aktiv, die anderen Fenster aber noch sichtbar - nur inaktiv.
    Ansonsten würde mir auch nur die Liste einfallen wobei das einiges an Ressourcen und Zeit in Anspruch nimmt das alles "durchzukauen" :/ Zumindest auf meinem Rechner :P

  • Hmm, habe mal versucht eine Funktion dafür zu schreiben, wo die Fenster aufgelistet werden und überprüft wird ob eines der Fenster aktiv ist.

    Jedoch bekomme ich es wohl nicht ganz gebacken, da es nicht so läuft wie erwünscht.

    Hier mal die Funktion :

    Spoiler anzeigen
    [autoit]

    $Test = _DesktopAktiv()
    While 1
    If $Test = 0 Then
    MsgBox(64,"Desktop","Desktop aktiviert")
    EndIf
    WEnd

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

    Func _DesktopAktiv()
    $Fenster = WinList ()
    $Check = 0
    For $i = 1 to $Fenster[0][0] -1
    If WinActive($Fenster[$i][0]) Then
    $Check = 1
    EndIf
    Next
    If $Check = 1 Then
    return 1
    Else
    return 0
    EndIf
    EndFunc

    [/autoit]
  • Ich hab noch eine ich such die mal kurz raus.

    Edit: Hab mich vertan, die Funktion macht etwas ähnliches. Hab ne Idee gehabt, aber die Funktioniert nicht ganz richtig:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    $aFenster = _Fenster()
    _ArrayDisplay($aFenster)
    While 1
    $Desktop = _Desktop($aFenster)
    ToolTip($Desktop)
    Sleep(5)
    WEnd

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

    Func _Fenster()
    Dim $aFenster[1][2]
    $aWinlist = WinList()
    If @error Then
    Return -1
    EndIf
    Local $j = 0
    For $i = 0 To $aWinlist[0][0]
    $iState = WinGetState($aWinlist[$i][1])
    If BitAND($iState, 8) Or BitAND($iState, 2) And StringIsSpace($aWinlist[$i][1]) = 0 Then
    $j += 1
    ReDim $aFenster[$j + 1][2]
    $aFenster[$j][0] = $aWinlist[$i][0]
    $aFenster[$j][1] = $iState
    EndIf
    Next
    $aFenster[0][0] = $j
    Return $aFenster
    EndFunc ;==>_Desktop

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

    Func _Desktop($aFenster)
    For $i = 1 To $aFenster[0][0]
    If Not BitAND($aFenster[$i][1], 16) Then
    If $aFenster[$i][0] <> "Program Manager" And $aFenster[$i][0] <> "Start" And $aFenster[$i][0] <> "" Then
    Return 0
    EndIf
    EndIf
    Next
    Return 1
    EndFunc

    [/autoit]

    Das Problem ist das manche "Fenster" in der Liste erscheinen die keinen Namen haben. Dadurch funktioniert das ganze nicht...

    Einmal editiert, zuletzt von Aquaplant (16. März 2012 um 17:54)