Kann Autoit warten, bis USB-Stick eingesteckt ist?

  • Ein liebes Hallo ringsherum,

    habe ein Problemchen mit einem USB-Stick, bzw. weiß nicht so richtig, ob das überhaupt geht. Wollte mal wieder etwas probieren und Programm soll so sinngemäß warten, bis ein (& später der richtige) USB-Stick eingesteckt ist, dann fortfahren. Falls der Stick nicht schon angesteckt ist.

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    $var = DriveGetDrive( "REMOVABLE" )

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

    While @error=1

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

    MsgBox(1, "Schade", "Nix gefunden"& " Errorcode: " & @error); 1
    SplashTextOn("Hinweis:","Bitte USB-Stick anstecken!!",-1,200)
    Sleep(5000); 5sek
    ; eigentlich noch Name prüfen, aber erst, wenn funktioniert...
    ; Pause ist nur durch Sleep...
    WEnd

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

    ;Func _StickOk()

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

    $var2 = DriveGetLabel( $var[1])
    MsgBox(4096,"USB-Stick","Laufwerk: "& StringUpper($var[1]) & " & Bez.: "& $var2 & " _Errorcode: " & @error); 0
    ;Exit

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

    ;EndFunc

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

    ; danach Name prüfen

    [/autoit]


    Allerdings weiß ich nicht, ob das überhaupt geht, hatte gehofft, mit meinem letztem "geistigen Erguss" *gg*
    würde es funktionieren, nachdem ich alle anderen von mir getesteten Versionen nach Erfolglosigkeit verworfen hatte.
    Geht das überhaupt und wenn ja, wie? Wie immer für jede Hilfe besten Dank im Voraus.

    GLG

    Anfänger Willy ?(

    Einmal editiert, zuletzt von WillyWu (24. Oktober 2010 um 17:39)

  • hier sind noch 2 Möglichkeiten.

    Spoiler anzeigen
    [autoit]


    While 1
    $usbdrive = DriveGetDrive("Removable")
    If IsArray($usbdrive) Then
    For $i = 1 To $usbdrive[0]
    MsgBox(0x40000, "", "Stick Ok")
    ;$s1 = DriveGetSerial("")
    ;IniWrite("c:\stick.ini", "s", "1", $s1)
    Next
    Else
    MsgBox(0x40000, "", "No Stick")
    EndIf
    WEnd

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

    For $i = 67 To 90 ; von C: bis Z:
    $drive = Chr($i) & ":\"
    If DriveGetSerial($drive) = "945507574" Then MsgBox(0x40000, "Laufwerk ", $drive); Abfrage über Serialnummer
    If DriveGetLabel($drive) = "Stick_01" Then MsgBox(0x40000, "Laufwerk ", $drive) ; Abfrage über Laufwerksbezeichnung
    Next

    [/autoit]
  • Hallo und erneutes Danke an alle! Habe Skript von XP-User genommen und leicht angepasst; aber auch die Version von Oscar war für meine Zwecke ideal, weil ja auf den USB-Stick gewartet werden sollte. Super Forum und super Helfer hier *gg*!!!

    LG ringsherum

    Willy.
    Und hier noch mein "angepasstes" (keine Profi-Änderung....*gg*) Script für meine Zwecke:

    Spoiler anzeigen
    [autoit]

    While 1
    $usbdrive = DriveGetDrive("Removable")
    If IsArray($usbdrive) Then
    For $i = 1 To $usbdrive[0]
    ;MsgBox(0x40000, "", "Stick Ok")
    ToolTip("USB-Stick angesteckt",0,0, "Alles OK")
    ;Sleep(3000)
    Next
    ExitLoop
    Else
    MsgBox(0x40000, "Hinweis:","Bitte USB-Stick anstecken!!")
    EndIf
    WEnd

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

    $var2 = DriveGetLabel( $usbdrive[1])
    MsgBox(4096,"USB-Stick","Laufwerk: "& StringUpper($usbdrive[1]) & " & Bez.: "& $var2 & " _Errorcode: " & @error); 0 ;nur Info f.mich

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Halllo & Danke für Hinweis, aber ich wollte als nächstes sowieso abfragen, ob das der richtige Stick ist.. Aber nicht mehr heute *gg*

    GLG
    Willy.

  • Super, genau so etwas habe ich gesucht.
    Allerdings habe ich eine Frage:
    Wäre es möglich, ein Fenster anzuzeigen "Bitte USB Stick anschließen", welches dann automatisch reagiert, also ohne dass ich wie bisher auf "OK" in der Messagebox klicken muss?

    Hintergrund:
    Ich entwickle ein Script, welches im Hintergrund läuft. Sobald jemand einen USB Stick einsteckt, soll dieser automatisch von einem Virenscanner überprüft werden ohne Benutzerinteraktion.

  • Super, Danke für die schnelle Antwort.
    Nun ist es schon etwas her dass ich mit AutoIT und der zugehörigen Onlinedoku gearbeitet haben.
    Der Aufruf lautet ja:

    [autoit]

    SplashTextOn ( "title", "text" [, w [, h [, x pos [, y pos [, opt [, "fontname" [, fontsz [, fontwt ]]]]]]]] )

    [/autoit]


    Nun möchte ich w, h, x pos usw. auf Default lassen und nur den Paramter "opt" ändern. Das funktioniert bisher leider nicht.

    Hier mal der zugehörife Codeschnipsel aus meinem Script:

    [autoit]

    If $Splash_Counter=1 Then
    SplashTextOn ( "Virenscanner", "Bitte einen USB Stick einstecken." ,[opt=2])
    $Splash_Counter=0
    Else
    ControlSetText ( "Virenscanner", "Bitte einen USB Stick einstecken.", 1, "Bitte einen USB Stick einstecken.")
    EndIf

    [/autoit]
    • Offizieller Beitrag

    Nun möchte ich w, h, x pos usw. auf Default lassen und nur den Paramter "opt" ändern. Das funktioniert bisher leider nicht.


    Die Parameter sind von der Reihenfolge abhängig. Du mußt also NICHT NUR den gewünschten Parameter übergeben, sondern alle, die davor sind mit dem Standardwert "Default" (meist geht es auch mit "-1" statt "Default").
    Für dein Bsp.:

    [autoit]

    SplashTextOn ( "Virenscanner", "Bitte einen USB Stick einstecken." , -1, -1, -1, -1, 2)

    [/autoit]
  • Schau mal in der Hilfe.

    Code
    Bemerkungen
    Um einen optionalen Parameter zu überspringen, (also den Standardwert beizubehalten), benutzt man:
        "" für einen Text-Parameter.
        -1 für einen Zahl-Parameter.