Desktop mit AutoIT bereinigen

  • Hallo zusammen,

    seit einiger Zeit benutze ich aktiv AutoIT. An dieser Stelle würde ich mich über Ideen Eurerseits wirklich freuen.


    Ich habe einen Schulungs PC, dessen Desktop ich bereinigen möchte. Das heißt:

    - Papierkorb leeren (ok, bekomme ich hin)

    - Desktopsymbole, die hinzugefügt wurden entfernen. Und hier habe ich keine Idee, wie ich das machen soll. Eine Anordnung nach Änderungsdatum erscheint sinnvoll. Nur wenn der Benutzer vorher die Auflösung verändert hat stehe ich mit MouseMove ziemlich dumm da.

    Über Ideen und Hilfen würde ich mich sehr freuen


    Lg

    Jan

  • Danke für die Idee.

    Da es sich hier aber um Image Installationen handelt und meisten nur eine Hand voll PCs betroffen sind ist alles, was mehr als 1-2 Mausklicks erfordert mehr arbeit als das eigentliche Löschen.


    Lg

    Jan

  • Zitat

    Verstehe das Problem nicht...

    Ich schon^^
    Übersetzt bedeutet das "Wenn hier jemand ein Desktopbereinigungsprogramm hat oder für mich schreibt, dann freue ich mich, ansonsten ist mir das zuviel Arbeit und ich mach die dafür erforderlichen 3-4 Mausklicks lieber von Hand!"

  • Zitat

    Ich schon^^
    Übersetzt bedeutet das "Wenn hier jemand ein Desktopbereinigungsprogramm hat oder für mich schreibt, dann freue ich mich, ansonsten ist mir das zuviel Arbeit und ich mach die dafür erforderlichen 3-4 Mausklicks lieber von Hand!"

    Weit gefehlt :P

    Mein Programm sieht im Moment so aus:

    Spoiler anzeigen
    [autoit]


    $desktopsymbole = 24

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

    ; Script zum bereinigen des Desktops

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

    ;Desktop im Explorer anzeigen
    Run("explorer.exe", "", @SW_MAXIMIZE)
    Sleep(3000)
    Send("{PGUP}")
    WinWaitActive("Desktop")

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

    ;neue Datei erstellen
    Send("!d")
    Send("n")
    Send("t")
    Send("test123.txt")
    Send("{ENTER}")

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

    ; Um sicher zu gehen, dass die Reihenfolge fortlaufend und nicht umgekehrt ist, werden die Symbole zuerst nach Namen und dann nach Änderungsdatum sortiert

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

    Send("!a")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{right}")
    Send("{ENTER}")

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

    Send("!a")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{right}")
    Send("{down}")
    Send("{down}")
    Send("{down}")
    Send("{ENTER}")

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

    ; Nach oben Navigieren und X Elemente nach unten gehen
    Send("{PGUP}")
    Send("{PGUP}")
    Send("{PGUP}")

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

    $i = 0
    While $i <= $desktopsymbole
    Send("{down}")
    $i = $i + 1
    WEnd

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

    Send("{SHIFTDOWN}")

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

    $i = 0
    While $i <= 10
    Send("{down}")
    $i = $i + 1
    WEnd
    Send("{SHIFTUP}")

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

    sleep(500)

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

    ;löschen der Dateien

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

    send("{DELETE}")
    WinWaitActive("Löschen")
    Send("{ENTER}")

    [/autoit]


    Problem bei diesem Programm:

    Wird ein Desktopsymbol gelöscht, bleibt dafür ein anderes, später entstandenes Desktop Symbol bestehen.

    Das Problem könnte man, denke ich, höchstens durch eine Abfrage lösen:
    a) markiere ein Symbol
    b) Prüfe ob das Symbol der Arbeitsplatz, der Papierkorb oder Verknüpfung X ist.
    c1) Wenn ja => weiter zum nächsten Symbol
    c2) Wenn nein => löschen

    Problem:
    Ich kenne keine Funktion, mit der ich dieses Vorgehen realisieren könnte.


    Lg

    Jan

    Edit Oscar: AutoIt- und Spoiler-Tags eingefügt.

    2 Mal editiert, zuletzt von Oscar (2. Dezember 2009 um 15:47)

    • Offizieller Beitrag

    Wenn Du Dateien nach einem bestimmten Erstellungsdatum löschen lassen willst, dann vielleicht so:

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    Global $sReturnDate = '20091101000000' ; Alle Dateien, deren Erstellungsdatum nach diesem Datum (YYYYMMDDhhmmss) liegt, werden gelöscht
    Global $sDate, $aDesktopUser, $aDesktopAll

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

    $aDesktopUser = _FileListToArray(@DesktopDir, '*', 1)
    For $i = 1 To $aDesktopUser[0]
    $sDate = FileGetTime(@DesktopDir & '\' & $aDesktopUser[$i], 1, 1)
    If Not @error Then
    If $sDate > $sReturnDate Then
    ; die folgende Zeile erst auskommentieren, wenn die Consolen-Ausgabe passt!
    ;~ FileDelete(@DesktopDir & '\' & $aDesktopUser[$i])
    ConsoleWrite('Datei gelöscht: ' & @DesktopDir & '\' & $aDesktopUser[$i] & @CR)
    EndIf
    EndIf
    Next

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

    $aDesktopAll = _FileListToArray(@DesktopCommonDir, '*', 1)
    For $i = 1 To $aDesktopAll[0]
    $sDate = FileGetTime(@DesktopCommonDir & '\' & $aDesktopAll[$i], 1, 1)
    If Not @error Then
    If $sDate > $sReturnDate Then
    ; die folgende Zeile erst auskommentieren, wenn die Consolen-Ausgabe passt!
    ;~ FileDelete(@DesktopCommonDir & '\' & $aDesktopAll[$i])
    ConsoleWrite('Datei gelöscht: ' & @DesktopCommonDir & '\' & $aDesktopAll[$i] & @CR)
    EndIf
    EndIf
    Next

    [/autoit]


    Bitte die Kommentare beachten!

  • Zitat

    Weit gefehlt :P

    OK! :thumbup:

    Habe dein Script jetzt versucht zu durchschauen aber bin gescheitert^^
    Ich greife Oscars Ansatz mal an:

    Aufgabe:
    Der Desktop soll (bei jedem Start des Rechners?) denselben Desktopinhalt haben, bzw die seit dem letzten Scripstart veränderten (hinzugekommenen) Symbole sollen gelöscht werden.

    Lösung:
    Alle auf dem Desktop angeordneten Symbole bzw Verweise liegen im Verzeichnis

    [autoit]

    @desktopdir

    [/autoit]

    . Der Inhalt dieses Verzeichnisses gibt den "Desktop" wieder.
    Wenn man diese Dateien speichert und nachher mit den Daten des geänderten Desktops vergleicht, dann ist die Differenz die Menge der zu löschenden Daten.

    Also:
    Mit dem Script Savedesktopdata.au3 die aktuellen Desktopdaten speichern.
    Desktop verändern.
    Mit dem Script Restoredesktopdata.au3 die aktuellen Desktopdaten einlesen und mit den gespeicherten vergleichen und ggf löschen.


    Script Savedesktopdata.au3

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>
    ;desktopdaten werden in die Datei "Desktopdata.dat" gespeichert

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

    $files = ""
    $aData = _filelisttoarray(@DesktopDir,"*") ;alle symbole auf dem desktop...
    _arraydelete($adata,0)

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

    For $symbol In $aData ;arraydaten splitten und abspeoichern
    $files &= $symbol & @CRLF ;jedes in eine Zeile
    Next
    filedelete("desktopdata.dat")
    FileWrite("desktopdata.dat", $files) ;und in eine Datei speichern

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

    Script Restoredesktopdata.au3

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>
    ;desktopdaten werden aus der Datei "Desktopdata.dat" gelesen und mit den aktuellen verglichen

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

    $files = ""
    $aData = _filelisttoarray(@DesktopDir,"*") ;alle symbole auf dem desktop...
    _arraydelete($aData,0)
    dim $aSaved_data
    _FileReadToArray("Desktopdata.dat",$aSaved_data)

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

    ;arraycompare
    for $inhalt in $aData
    if _arraysearch($aSaved_data,$inhalt)=-1 then ;Symbol nicht in der gespeicherten Liste enthalten
    msgbox(0,"Info","Auf dem Desktop wurde seit dem letzten Speichern das Symbol "&$inhalt&" hinzugefügt!"&@crlf&"Das Symbol wird nun gelöscht!")
    FileDelete(@DesktopDir&"\"&$inhalt)
    EndIf
    next

    [/autoit]

    /*EDIT*/ :thumbup:

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (2. Dezember 2009 um 16:53)

  • Schade, da war Andy dann doch schneller als ich :P

    Kleine Anmerkung:
    ändert man

    [autoit]


    $aData = _GetDirData(@DesktopDir)

    [/autoit]


    und natürlich,

    [autoit]

    Func _GetDirData($sDir) ;schreibt alle symbole/Daten vom Desktop in ein array
    $search = FileFindFirstFile($sDir& "\*.*") ;alle symbole auf dem desktop...

    [/autoit]


    ..., so ist die Funktion direkt für mehrere Verzeichnisse nutzbar.

  • Hab meins noch mal bissl geändert^^ / verkürzt
    Aber SeuBo hat natürlich recht, mit seiner Variante testet man auch in den veränderten Verzeichnissen

  • Die Funktionen die du wünscht klingt nach dem "Kiosk Modus" habe mal gegooglet . ->Hier<-

    GRuß
    Pre

  • Zitat

    Die Funktionen die du wünscht klingt nach dem "Kiosk Modus" habe mal gegooglet

    Zitat

    Festplattenimage machen, und das bei jedem Start laden. So ist es am einfachsten.


    Problem (bzw. Vorteil) ist bei beiden, daß der Rechner von einem, ich nenn es mal "Administrator" auf dem neuesten Stand bzgl. Windows-Updates, Treiber, VirenScannerdateien usw. gehalten werden MUß!

    Ansonsten wäre eine Virtuelle Maschine auch einen Alternative (SnapShots)

  • Problem (bzw. Vorteil) ist bei beiden, daß der Rechner von einem, ich nenn es mal "Administrator" auf dem neuesten Stand bzgl. Windows-Updates, Treiber, VirenScannerdateien usw. gehalten werden MUß!

    Und dafür eignet sich dann ein AutoIt Script, das den ganzen Schmarn erledigt, und welches der "Admin" an besagtem "PatchDay" nur einmal über jeden Rechner laufen lässt. :P

  • Danke erst einmal für die Antworten! Ich werde die Quellcodes in naher Zukunft mal genauer unter die Lupe nehmen.

    Eine Benutzung des Kiosk Mode ist ausgeschlossen. Es handelt sich bei den Computern um Schulungs PCs, an denen die Benutzer über mehrere Tage geschult werden.

    Normaler Weise werden die PCs nach ihrer Verwendung über eine Norton Ghost Installation komplett neu aufgesetzt. Nur bei kleineren Seminaren wird der Desktop per hand bereinigt.


    Danke und LG

    Jan