USB Stick entfernen per Autoit

  • Hallo
    Ich möchte ein Script schreiben das bei angestecktem USB Stick die Daten des Sticks auf die Festplatte kopiert und anschliessend auf dem Stick löscht. Danach soll der USB Stick entfernt werden. Ist alles kein Problem aber wie bekomme ich das hin das der USB Stick per Autoit entfernt wird (deaktiviert)?
    Habe in der Sufu nichts zum entfernen eines USB Sticks gefunden per Autoit. Muß doch möglich sein, oder?

    Gruß Autoirrer
    und allen ein schönes Wochenende

  • Ich habe so etwas auch mal benötigt und in AutoIt, unter zu Hilfenahme des USBDeview-Tool, geschrieben.

    Nachtrag:
    Hier nochmal eine Version (im Gegensatz zur Variante im ZIP-File), die durch 'FileInstall' mit nur einer EXE-Datei nach kompilieren auskommt.

    Spoiler anzeigen
    [autoit]

    opt("TrayIconHide",1)
    #include <GUIConstants.au3>

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

    FileInstall("Fehler.wav",@tempdir & "\Fehler.wav",1)
    FileInstall("Entfernen.wav",@tempdir & "\Entfernen.wav",1)
    FileInstall("USBDeview.exe",@tempdir & "\USBDeview.exe",1)

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

    if $cmdline[0] <> 0 then
    if stringlen($cmdline[1]) = 1 then
    $drive = stringupper($cmdline[1]) & ":"
    else
    $drive = stringupper($cmdline[1])
    endif
    else
    GUICreate("Fehlermeldung !",300,100,-1,-1,$WS_CAPTION & $WS_POPUP,$WS_EX_TOOLWINDOW)
    GUICtrlCreateLabel("Der Programmaufruf lautet wie folgt :" & @CRLF & @CRLF & "USBUnmount.exe <LAUFWERK>",50,10,-1,-1)
    $ok_button = GUICtrlCreateButton ( "Ok",120,60,60,30,$BS_DEFPUSHBUTTON)
    GUISetState (@SW_SHOW)
    if fileexists(@tempdir & "\Fehler.wav") then
    SoundPlay(@tempdir & "\Fehler.wav",1)
    endif
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ;nix
    Case $msg = $ok_button
    Exit(1)
    EndSelect
    Wend
    endif
    $count = 0

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

    if fileexists($drive) then
    $prozesse = processlist("PStart.exe")
    if $prozesse[0][0] <> 0 then
    if fileexists($drive & "\PStart.exe") then
    runwait($drive & "\PStart.exe /exit",$drive,@SW_HIDE)
    else
    processclose("PStart.exe")
    endif
    endif

    runwait(@tempdir & "\USBDeview.exe /stop_by_drive " & $drive,@scriptdir,@SW_HIDE)
    while fileexists($drive)
    runwait(@tempdir & "\USBDeview.exe /stop_by_drive " & $drive,@scriptdir,@SW_HIDE)
    sleep(500)
    $count = $count + 1
    if $count = 5 then
    GUICreate("Fehlermeldung !",300,100,-1,-1,$WS_CAPTION & $WS_POPUP,$WS_EX_TOOLWINDOW)
    GUICtrlCreateLabel("Das Laufwerk ' " & $drive & " ' konnte nicht beendet werden !",30,20,-1,-1)
    $ok_button = GUICtrlCreateButton ( "Ok",120,60,60,30,$BS_DEFPUSHBUTTON)
    GUISetState (@SW_SHOW)
    if fileexists(@tempdir & "\Fehler.wav") then
    SoundPlay(@tempdir & "\Fehler.wav",1)
    endif
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ;nix
    Case $msg = $ok_button
    Exit(1)
    EndSelect
    Wend
    endif
    wend
    if fileexists(@tempdir & "\Entfernen.wav") then
    SoundPlay(@tempdir & "\Entfernen.wav",1)
    endif
    else
    GUICreate("Fehlermeldung !",300,100,-1,-1,$WS_CAPTION & $WS_POPUP,$WS_EX_TOOLWINDOW)
    GUICtrlCreateLabel("Das Laufwerk ' " & $drive & " ' ist nicht vorhanden !",55,20,-1,-1)
    $ok_button = GUICtrlCreateButton ( "Ok",120,60,60,30,$BS_DEFPUSHBUTTON)
    GUISetState (@SW_SHOW)
    if fileexists(@tempdir & "\Fehler.wav") then
    SoundPlay(@tempdir & "\Fehler.wav",1)
    endif
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ;nix
    Case $msg = $ok_button
    Exit(1)
    EndSelect
    Wend
    endif

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

    if FileExists(@Tempdir & "\Fehler.wav") then FileDelete(@Tempdir & "\Fehler.wav")
    if FileExists(@Tempdir & "\Entfernen.wav") then FileDelete(@Tempdir & "\Entfernen.wav")
    if FileExists(@Tempdir & "\USBDeview.exe") then FileDelete(@Tempdir & "\USBDeview.exe")

    [/autoit]

    Dateien

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    Einmal editiert, zuletzt von Micha_he (12. Januar 2008 um 10:36)

  • Hallo Micha_he,

    Sein Script gefällt mir gut. :thumbup: Ich habe zu Zeit ein ähnliches Projekt in „Skripte>The Stick“. Mit der Zeile im Spoiler kann Er sicherstellen, dass Er Gehör bekommt und das Script kein „Brüller“ wird (User Voreinstellung = ?). ;)

    Spoiler anzeigen
    [autoit]


    SoundSetWaveVolume(50) ;(50)Lautstärke in %

    [/autoit]

    Schönes WE und weiterhin
    viel Erfolg !

    Man liest sich...
    Euer Ritzelrocker04

    [color=red][b]Edit BugFix [OT]:
    Sag mal Ritzelrocker04, bist du dir sicher, dass du mit uns in einer gemeinsamen Zeit lebst?
    Die Anwendung der dritten Person als Anrede ist ein Relikt aus der Zeit verfaulenden, degenerierten Adels. Wußte gar nicht, dass du dich da zugehörig fühlst. :P
    Im Allgemeinen stellt die Verwendung dieser Anredeform heutzutage eine Beleidigung dar.
    Vielleicht solltest du überlegen, doch wieder in unsere Zeit zu transferieren :?: [/OT]

  • Das Tool von Uwe Sieber hatte ich auch vorher im Einsatz. Es gibt aber diverse Unterschiede beim Abmelden des USB-Sticks. Das eine Tool läuft nur einwandfrei unter Win2000, das andere kann den USB-Stick nicht auswerfen wenn zum Beispiel der Total-Commander den Ordner offen hat.
    Zum Schluß blieb ich bei dem 'USB-Deview'. Es lief im Großen und Ganzen am besten.

    @Ritzelrocker04: Aber dann verstellt mir doch das Script die Rechnerlautstärke jedesmal, oder ?

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • ich bin nur ein einfacher Mensch, der das Du bevorzugt.

    PS: Gestern ergab, eine der 12 Lektionen des Peethebee für mich keinen erkennbaren Sinn. Aber um nicht irgendetwas falsch zu interpretieren habe ich mich beim Autor selbst erkundigt. Warum macht er es genau so, wo es doch für mich keinen offensichtlichen Grund gab ? Natürlich gab es einen Grund, eine Erklärung und ich habe dazu gelernt.

    Da Er mir nun das Du angeboten hat, solltest Du mal darüber nachdenken BugFix! :rolleyes:

    Schönes WE und weiterhin
    viel Spaß !

    Man liest sich...
    Euer Ritzelrocker04

    • Offizieller Beitrag

    Hi,

    [autoit]

    ;ejectUSB
    Global $re = _ejectUSB('z:')

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

    If $re Then
    MsgBox(64, 'Info', 'Der USB-Stick wurde erfolgreich beendet!', 3)
    Else
    MsgBox(16, 'Info', 'Fehler: ' & $re)
    EndIf

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

    Func _ejectUSB($drive = '')
    Local $path = @ScriptDir & '\ejectUSB.exe'
    If $drive = '' Or $drive = Default Then $drive = StringLeft(@ScriptDir, 2)
    FileInstall('deveject.exe', $path, 0)
    If Not FileExists($path) Then Return -1
    If ShellExecuteWait($path, '-EjectDrive:' & $drive, @ScriptDir, 'Open', @SW_HIDE) = 0 Then
    FileDelete($path)
    Return 1
    Else
    FileDelete($path)
    EndIf
    Return 0
    EndFunc ;==>_ejectUSB

    [/autoit]

    So long,

    Mega

    • Offizieller Beitrag

    Hi,

    nimm lieber dies:

    [autoit]

    If Not _ejectUSB() = 1 Then MsgBox(16, 'Error', 'Es ist ein Fehler aufgetreten!', 5)

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

    Func _ejectUSB($drive = '')
    Local $path = @TempDir & '\12345USB54321.exe'
    If $drive = '' Or $drive = Default Then $drive = StringLeft(@ScriptDir, 2)
    If $cmdLine[0] = 1 And ($cmdLine[1] = '-?' Or $cmdLine[1] = '/?') Then
    MsgBox(64, 'Information', 'Parameter : (Drive) e.g. : E:', 5)
    Exit (0)
    EndIf
    If $cmdLine[0] = 1 Then $drive = $cmdLine[1]
    FileInstall('EjectMedia.exe', $path, 1)
    If Not FileExists($drive) Then Return -1
    If Not FileExists($path) Then Return -2
    Run($path & ' ' & $drive & ' -l -f -s -w:1000', @TempDir, @SW_HIDE)
    Return 1
    EndFunc ;==>_ejectUSB

    [/autoit]

    EjectMedia

    So long,

    Mega