Skript - Rufumleitung + Integration USB-Stick

  • Hallo an alle AutoIt-User,

    bin nun auch seit etwa 2 Wochen an AutoIt dran. Vieles konnte durch lesen der Hilfedatei (Englisch & Deutsch) als auch durch die Suchfunktion hier im Forum beantwortet werden. Im Hilfetext gab es ein kleines Codebeispiel was mir den Anreiz zu meinem Skript gab. Da meine Programmier- bzw. ScriptingSkills eher unterirdischer Natur sind, wollte ich mir doch einmal eine objektive Meinung der Fachmänner...äh...und -frauen einholen. Wie gesagt, ich bin in diesem Thema ziemlich unbedarft, aber gewillt, diesen Umstand endlich zu beenden.
    Es ist zwar nicht das längste Skript und durchaus noch ausbaufähig, aber immerhin ein Anfang...

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #include <ie.au3>

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

    ;==============================================
    ; Rufumleitung - GUI
    ;==============================================

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

    Global $oIE, $oForm, $oField, $Progress_1, $sConVal

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

    GuiCreate("Rufumleitung", 390, 90,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))

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

    $Button_1 = GuiCtrlCreateButton("Aktivieren", 10, 20, 80, 30)
    $Button_2 = GuiCtrlCreateButton("Deaktivieren", 110, 20, 80, 30)
    $Button_3 = GUICtrlCreateButton("Status", 220, 20, 80, 30)
    $Progress_1 = GuiCtrlCreateProgress(10, 60, 180, 10)
    $Combo_1 = GuiCtrlCreateCombo("Rufnummer#", 220, 60, 150, 30) ; noch nicht aktiv

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

    GuiSetState()
    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Button_1
    Login()
    Act()
    Logout()
    Case $msg = $Button_2
    Login()
    Deact()
    Logout()
    Case $msg = $Button_3
    Login()
    Status()
    Logout()
    EndSelect
    WEnd
    Exit

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

    #region - Funktionen
    Func Login()
    GUICtrlSetData($Progress_1, 10)
    ; Seite öffnen
    $oIE = _IECreate("https://rufumleitung/logon.asp", 0, 0, 0)

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

    ;Zertifikatspopup bestätigen
    For $i=0 To 4 Step 1
    If WinExists("Sicherheitshinweis") Then
    ControlClick("Sicherheitshinweis", "", "Button1")
    EndIf
    Sleep(250)
    Next
    ;Warten bis Seite geladen
    _IELoadWait($oIE)
    GUICtrlSetData($Progress_1, 15)

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

    If IsObj($oIE) Then
    ;Setzen des Benutzernamens, anhand der Formularfelder
    $oForm = _IEFormGetObjByName($oIE, "theForm")
    $oUsername = _IEFormElementGetObjByName($oForm, "userID")
    _IEFormElementSetValue($oUsername, "USER")
    GUICtrlSetData($Progress_1, 20)
    ;Siehe oben
    $oPasswd = _IEFormElementGetObjByName($oForm, "password")
    _IEFormElementSetValue($oPasswd, "PASSWORD")
    ;Bestätigen
    _IEFormSubmit($oForm)
    GUICtrlSetData($Progress_1, 25)
    ;Setzen des Profils, anhand des Formularfeldes
    $oForm = _IEFormGetObjByName($oIE, "theForm")
    $oProfile = _IEFormElementGetObjByName($oForm, "deviceID")
    _IEFormElementSetValue($oProfile, "{deviceID}")
    ;Timer, bis Profil geladen
    Sleep(2500)
    ;Navigiere zur Rufumleitung
    _IENavigate($oIE, "https://rufumleitung/callforward.asp")
    GUICtrlSetData($Progress_1, 50)
    ;Formular deklarieren - Checkbox
    $oForm = _IEFormGetObjByName($oIE, "callForwardForm")
    ;Formular deklarieren - Rufnummernfeld
    $oField = _IEFormElementGetObjByName($oForm, "destination_{deviceID}")
    $sConVal = _IEFormElementGetValue($oField)
    GUICtrlSetData($Progress_1, 60)
    Else
    MsgBox(48,"Fehler", "Es konnte keine Instanz geöffnet werden.")
    EndIf
    Return
    EndFunc

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

    Func Logout()
    GUICtrlSetData($Progress_1, 90)
    _IENavigate($oIE, "https://rufumleitung/logoff.asp")
    GUICtrlSetData($Progress_1, 100)
    _IEQuit($oIE)
    GUICtrlSetData($Progress_1, 0)
    Return
    EndFunc

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

    Func Status()
    If $sConVal == 0 Then
    MsgBox(32, "Status", "Es ist zur Zeit keine Rufumleitung aktiv.")
    Else
    MsgBox(32, "Status", "Anrufe sind auf folgende Rufnummer umgeleitet: '" & $sConVal & "'")
    EndIf
    Return
    EndFunc

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

    Func Act()
    If $sConVal == 0 Then
    ;Rufnummer eingeben
    _IEFormElementSetValue($oField, "Rufnummer#")
    Click()
    MsgBox(0, "Umleitung", "Aktiviert")
    Else
    MsgBox(48, "Achtung,...", "es wurde bereits auf die '" & $sConVal & "' umgeleitet!")
    EndIf
    Return
    EndFunc

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

    Func Deact()
    If $sConVal == 0 Then
    MsgBox(48, "Achtung...", "es ist keine Rufumleitung vorhanden!")
    Else
    Click()
    MsgBox(0, "Umleitung", "Deaktiviert")
    EndIf
    Return
    EndFunc

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

    Func Click()
    ;Checkbox aktivieren, IEAction - Mausklick
    ;Checkbox auswählen, keine Funktion
    ;Leerzeichen senden, keine Funktion
    $oClick = _IEFormElementGetObjByName($oForm, "forward_{deviceID}")
    _IEAction($oClick, "click")
    _IEFormSubmit($oForm)
    GUICtrlSetData($Progress_1, 70)
    Return
    EndFunc
    #endregion

    [/autoit]

    Für konstrukive Kritik oder Änderungsvorschläge wäre ich äußerst dankbar!

    2 Mal editiert, zuletzt von .m4nd30r (12. November 2007 um 19:40)

  • Hallo.

    Mich würde mal die Domain interessieren für die dieses Script gedacht ist. Gibt ja private Rufumleitungssysteme und ich kenne einige, die auch privat genutzt werden, aber meistens sind es Systeme, wo eine Automatisierung laut AGB's strengstens verboten ist und bei Zuwiderhandlung hohe Geldstrafen meistens erfolgreich durchgeklagt werden.

    Wenn es eine Rufumleitung einer privaten Rufanlage ist oder Du die Genehmigung zur automatisierenden Rufumleitung hast, ist das dann auch okay.

    Aber die Idee finde ich sehr gut.

    Vielleicht meldest dich ja mal.

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Alina (9. November 2007 um 18:00)

  • Hallo Alina,

    somit war der Aufruf an Fachfrauen auch gerechtfertigt ; )

    ...Du hast natürlich einen sehr guten Einwand gebracht, welchen ich beim Erstellen des Skriptes garnicht bedacht hatte.

    Hintergrund: Es handelt sich hierbei um den Cisco Callmanager, welcher nur aus dem Intranet bzw. firmenintern erreichbar ist. Zweck meines Skriptes, welchen ich wohl lieber zu Anfang erwähnen hätte sollen, ist eine best. Hotline auf mein Handy umzuleiten, sollte ich mal nicht an meinem APS sitzen.
    Also wurde nur ein Vorgang automatisiert, welchen ich sonst hätte manuell durchführen müssen. Da der Callmanager intern konfiguriert und administriert wird, sollte sich auch die Lizenzfrage geklärt haben.

    Zum Skript selbst ist es mir halt wichtig, ob meine Denkstruktur soweit in Ordnung ist, oder ob es Punkte gibt, die man eleganter hätte lösen können. Wie man sieht, hatte ich mich auch in der "ungarischen Notation" versucht, allerdings scheint es immens hilfreich zu sein, zu wissen was denn nun Objekte, Arrays, Integers, etc. sind ; )

    2 Mal editiert, zuletzt von .m4nd30r (9. November 2007 um 18:25)

  • Hallo @.m4nd30r

    Es sollte auch nur ein Hinweis bezüglich des Rechtsweges sein.

    Auch wenn die Konfiguration und Administration intern verlaufen, so verbieten einige Software- und Gerätehersteller die Automatisierung und das ist rechtlich auch nur bedenklich, wenn eine Dir nicht bekannte Person die Umleitung durchführt bzw. diese Durchführung dann mißbraucht.

    Ratsam wäre es hier, eine Sicherheitsabfrage an den Anfang des Scriptes zu schreiben. Oder das dieses Script in dem Moment startet, wenn Du zum Beispiel Dein USB-Stick (so Du einen hast) entfernst und dann nicht mehr an Deinem APS bist.

    Ist doch so, wenn Du nicht an Deinem APS bist, dann brauchst Du die Umleitung, sonst bist DU ja am APS direkt erreichbar.

    Das umzusetzen, ist gar nicht so schwerrrrrrr. Habe mir schon ein Tool gebaut, das wenn ich den USB-Stick vom PC entferne, das dann eine bestimmte Funktion gestartet wird. Hier wäre es in Deinem Fall, das die Rufumleitung aktiviert und durchgeführt wird.

    Rechtlich bist Du auf jeden Fall sicherer, wenn Du in den Nutzungshinweisen kein Verbot diesbezüglich findest und eine Sicherheitsschleife in Dein Script baust.

    Gruß, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo Alina,

    ich bin absolut deiner Meinung. Deshalb fand ich deinen Beitrag auch sehr hilfreich. Die Intranetseite, welchen den Callmanager steuert, ist eine Firmenproduktion. Allerdings wurde intern zwischenzeitlich alles abgeklärt und auch keine Einwände erhoben *puhh*. Hatte einfach diesbezüglich nicht nachgedacht, es hilft aber, wenn jmd objektives einem Denkanstösse vermittelt. :klatschen:

    Wie gesagt stehe erst am Anfang meiner glanzvollen Coderkarriere *g*, deshalb fehlt mir einwenig die Weitsicht. Dies ist auch der Grund warum ich hier im Forum von passiv auf aktiv geswitcht bin.

    Der Anreiz mit dem USB-Stick find ich äusserst interessant...gibt es hierzu bereits Einträge im Forum, an denen ich mich orientieren kann, oder soll ich lieber selbst einmal loslegen?!?

    Gruß *sich freut hier so schnell netten anschluss gefunden zu haben*
    .m4nd30r

  • Hallo.

    Also hier im Forum gibt es alle Beiträge dazu, denn ich habe dank BugFix damals das Grundgerüst erarbeitet.

    Wenn ich am WE dazu komme, dann nehme ich mal aus dem großen Script die Firmenbezogenen Sachen raus und poste es dann mal.

    @.m4nd30r
    Na klar kannst/darfst Du es selber bauen, aber wie bereits geschrieben (PN), gehen wir dann schrittweise vor und ich selber habe damals von BugFix die Grundfunktionen bekommen, die ich nicht ungesagt lassen möchte.

    Wer es ganz eilig hat, einfach die alten Beiträge von mir durchgehen, dann hat man die Grundfunktion. Aber das ganze war mein Wissenstand von sonst wann, heute ist er schon richtig guuuuuut gewachsen, dank dem super Forum und der Doku, die man sehr gut anwenden kann.

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Alina: ok thx würd mich freun wenn du es schaffen würdest ;)

    also ich habs gestern mal kurz so versucht:

    [autoit]

    while 1
    if fileexists("K:\") then
    msgbox(0,"","ok geht")
    else
    msgbox(0,"","nö nox los")
    endif
    wend

    [/autoit]

    is sehr einfach gemacht geht aba^^ ;)

    Einmal editiert, zuletzt von .::Mignon::. (10. November 2007 um 17:25)

  • Also ich glaube Dir, das es auf Deinem PC / Laptop geht, aber was ist wenn Du es z. B. bei einem Freund versuchst? Also ich habe erst einmal von BugFix mir erklären und zeigen lassen, wie man den aktuellen Laufwerksbustaben des Sticks ermittelt und es darauf aufgebaut. Beiträge sind über die SuFu zu finden (Seriennummer, USB, ...)

    Ansonsten sitze ich im Wohnzimmer via WLan und mit Laptop und schaue gerade "Wetten dass ...???".

    Allen einen schönen Abend. Werde mir jetzt aber gleich eine Pizza in den Ofen schieben. ;)

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • ok^^ bugfix hat es dir gezeigt/erklärt könntest du es nun mit zeigen/erklären? ;)

    währe echt cool und ich denke für .m4nd30r währe es auch hilfreich oder zumindest ein anhaltspunkt da er es ja alleine versuchen will. ;)

  • DAs ist das, was ich damals von BugFix bekommen habe :

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

    Global $serial = 1234567890

    If _getDriveBySerial($serial) Then
    MsgBox(64, 'USB', 'Laufwerk : ' & _getDriveBySerial($serial), 5)
    Else
    MsgBox(16, 'USB', 'Serial nicht gefunden', 5)
    EndIf

    Func _getDriveBySerial($serial)
    For $i = 65 To 90
    If $serial = DriveGetSerial(Chr($i) & ':') Then Return Chr($i) & ':'
    Next
    Return 0
    EndFunc ;==>_getDriveBySerial

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

    Wenn die Seriennummer vom USB-Stick stimmt, dann kann es los gehen, wenn nicht, wird "gemeckert".

    Also darauf kann man dann aufbauen, das man noch ein Hintertürchen einbauen kann, damit man auch ohne die richtige Seriennummer weiter machen kann, oder das eine Funktion ausgeführt wird, wenn kein oder der falsche USB-Stick drinne ist.

    Anwendungsbeispiel:
    Zieht man den Stich ab, dann führe Programm x aus und danach führe ein reboot durch.
    Oder beim abziehen des USB-Sticks den aktuellen Benutzer abmelden.


    So, nun aber Pizza. ;)

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Ich finde die Funktion ganz interessant und habe sie mal ein wenig modifiziert:

    Spoiler anzeigen
    [autoit]


    Global $serial = 1234567890

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

    While 1
    $check = _getDriveBySerial($serial)
    If $check Then MsgBox(64, 'USB', 'Laufwerk : ' & $check, 1)
    sleep(2000)
    WEnd

    Func _getDriveBySerial($serial)
    Local $drives = DriveGetDrive('REMOVABLE')
    If NOT @error Then
    For $i = 1 to $drives[0]
    If $drives[$i] <> 'a:' Then
    If $serial = DriveGetSerial($drives[$i]) Then Return $drives[$i]
    EndIf
    Next
    EndIf
    Return 0
    EndFunc

    [/autoit]

    In meiner geänderten Funktion werden nicht alle Laufwerksbuchstaben getestet, sondern nur die der Wechseldatenträger. Wobei ich "a:" (Diskettenlaufwerk) außen vor lasse, weil es zu lange dauert und mich das rattern beim Test stört.

    Was mir jetzt noch fehlen würde, wäre eine OnEvent-Funktion, so dass man die Funktion nicht regelmäßig aufrufen muss, sondern nur, wenn ein neues Laufwerk angemeldet wird.

    Kennt jemand dafür eine Lösung?

    MfG. Oscar

  • Alina: danke für das script. ;)
    aber irgendwie steh ich bei der fucn aufm schlauch :(

    Oscar : ich steig irgendwie auch bei dir nich so ganz durch deine _getDrivebySerial func durch kannst du sie mir vllt ein bisschen erklären? ;)

    EDIT: ich habs nu so gelöst:

    [autoit]

    While 1
    if FileExists("K:\") Then
    _exists()
    EndIf
    Sleep(100)
    WEnd

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

    Func _exists()
    While 1
    If Not FileExists("K:\") Then
    _sache()
    ExitLoop
    EndIf
    Sleep(100)
    WEnd
    EndFunc

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

    Func _sache()
    MsgBox(0,"","")
    EndFunc

    [/autoit]

    einfach aba geht xD

    hab einfach meinem stick einen festen laufwerksbuchstaben zugeordnet. ;)

    muss ja auch nur bei mir funktionieren ne^^

    ab würd mich über weitere ideen auch freun und was auszubauen.

    2 Mal editiert, zuletzt von .::Mignon::. (11. November 2007 um 15:17)

  • Wer sich mit diesem Thema beschäftigt, kommt an Uwe Siebers USB Drive Letter Manager nicht vorbei.
    Damit lässt sich fast alles anstellen:

    Zitat

    Laufwerkbuchstaben für die Benutzung durch USB-Laufwerke sperren
    Laufwerksbuchstaben von Kartenlesern entfernen bis ein Medium eingelegt wird (nicht unter Window 2000)
    Laufwerksbuchstaben von USB-Laufwerken entfernen lassen und so Zugriff darauf verhindern, auch abhängig vom angemeldeten Nutzer
    Eine Autostart-Aktion für jedes angeschlossene Laufwerk definieren, z.B. den Explorer damit öffnen
    Einen Balloon-Tip mit dem einem neuen Laufwerk zugeordneten Laufwerksbuchstaben anzeigen lassen und beim Klick auf den Balloon-Tip ein Programm starten
    usw.

    Bedenkt aber, dass bei jedem Zugriff auf den Stick, dessen Lebensdauer leidet/leiden kann.
    Manche Hersteller geben nur 10.000 Schreib- und Lesezyklen an.

    Gruß
    Westi

  • betrifft das auch mein script??? bei mir wir lediglich geprüft ob das ding existiert. wir das auch als lesne oda schreiben anerkannt?

    hoffe mal nicht ;)

  • Zitat

    Original von .::Mignon::.
    betrifft das auch mein script???...

    Ich denke schon.
    Da man direkt auf das Dateisystem zugreift, ist das auch ein Lesezugriff.
    Mit NTFS würde man sogar einen Schreibzugriff auslösen(Zugriffsstempel).

    Besser ist es, nur die physische Zuordnung zu testen.
    Festen LW-Buchstaben zuordnen und dann das hier:

    [autoit]

    $_drv = "E:" ;zu testendes LW
    If DriveStatus ( $_drv ) = "READY" then
    MsgBox(4096,"Laufwerk" , $_drv & " vorhanden")
    Else
    MsgBox(4096,"Laufwerk" , $_drv & " nicht vorhanden")
    EndIf

    [/autoit]


    Wer sich mit WMIC auskennt und XP Prof oder 2k3 Server hat kann das sogar eleganter mit

    Code
    WMIC LogicalDisk WHERE "Description='Wechseldatenträger'" GET Name

    machen.
    Oder halt etwas umständlicher mit WMI:

    Spoiler anzeigen
    [autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""

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

    $Output=""
    $objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk Where Description='Wechseldatenträger'", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $objItem.Name & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_LogicalDisk" )
    Endif

    [/autoit]


    Will man fast absolute Zugriffssicherheit, kommt man an der Seriennummer-Nummer :] nicht vorbei!

    WMI(C) bietet halt den Komfort der direkten Filterung.
    Mit Uwe Siebers "ListUSBDrives" kann man natürlich noch ganz andere Sachen filtern, die ich so noch nicht gesehen habe.

    Gruß
    Westi

  • ok danke ich bau das denn mal in mein script. ;) leider hab ich keine erfahrung mit WMIC aba das erste beispiel reicht ja auch ^^.

    @.m4nd30r: hoffe mal es hat dir genau so geholfen wie mir :D

    • Offizieller Beitrag

    Hallo Mignon!

    Ich habe mal ein paar Kommentare in das Script eingefügt:

    Spoiler anzeigen
    [autoit]


    Global $serial = 1234567890; hier muß die Seriennummer Deines USB-Sticks eingetragen werden
    ; mit den folgenden Zeilen kannst Du die Seriennummer Deines USB-Sticks ermitteln (das 'h:' mit dem Laufwerksbuchstaben Deines USB-Stick austauschen)
    ;InputBox('USB-Stick', 'Seriennummer:', DriveGetSerial('h:'))
    ;Exit
    ; Einfach die beiden Semikolons vor den Zeilen entfernen und das Script ausführen, danach kannst Du per Copy/Paste die Seriennummer oben eintragen
    ; und die Zeilen wieder auskommentieren
    While 1
    $check = _getDriveBySerial($serial); Funktion aufrufen
    If $check Then; wenn ein Laufwerksbuchstabe zurückgegeben wurde, dann...
    ;hier steht der Code, der ausgeführt wird, wenn der Stick eingesteckt ist
    Else; ansonsten... (Funktion lieferte Null zurück)
    ;und hier der Code, wenn der Stick nicht vorhanden ist
    EndIf
    sleep(2000); Verzögerungsschleife (der Wert bestimmt, wie oft der Test ausgeführt wird, hier: alle 2000 ms / 2 sek.)
    WEnd

    Func _getDriveBySerial($serial)
    Local $drives = DriveGetDrive('REMOVABLE'); die Funktion DriveGetDrive() gibt ein Array zurück, hier (mit 'REMOVABLE' aufgerufen) alle Wechseldatenträger
    If NOT @error Then; wenn kein Fehler aufgetreten ist, dann...
    For $i = 1 to $drives[0]; Schleife ausführen (in $drives[0] ist die Anzahl der Wechseldatenträger gespeichert, $drives[1]...$drives[n] enthält die Laufwerksbuchstaben)
    If $drives[$i] <> 'a:' Then; wenn Laufwerksbuchstabe ungleich 'a:' (also kein Diskettenlaufwerk) dann...
    If $serial = DriveGetSerial($drives[$i]) Then Return $drives[$i]; Seriennummer mit der Seriennummer des Laufwerks vergleichen
    ; Bei Übereinstimmung wird die Funktion beendet und der entsprechende Laufwerksbuchstabe zurückgegeben.
    EndIf
    Next
    EndIf
    Return 0; wenn ein Fehler aufgetreten ist oder das Laufwerk mit der Seriennummer ($serial) nicht gefunden wurde, gibt die Funktion Null zurück
    EndFunc

    [/autoit]

    Bezüglich der Lebensdauer des USB-Sticks bei dieser Art der Verwendung bin ich mir nicht so sicher. Die ct hat ja mal einen Test mit Flashspeicher gemacht und permanent auf immer die gleiche Adresse Schreib-/Lesebefehle ausgeführt. Dabei sollen keinerlei Fehler aufgetreten sein. Selbst nach mehr als den vom Hersteller angegebenen Zugriffswerten.
    Die Sticks haben wohl auch ein Fehlermanagement-System integriert, sodaß fehlerhafte Zellen ausgeblendet und durch Reservezellen ersetzt werden.

    Andererseits würde ein permanenter Test (Stick gesteckt/abgezogen) alle 2 sek. zu ziemlich vielen Zugriffen pro Tag führen. Deswegen werde ich mich mal näher mit dem von Westi vorgeschlagenen Programm (USB-Driveletter-Manager) beschäftigen. Vielleicht kann man damit die Abfrageschleife umgehen und eine Art von Event-Steuerung einbauen.

    MfG. Oscar

  • Hi Oscar,

    is echt gut beschrieben jezt hab sogar ich das verstanden ;)

    das deinen tipp mit dem von Westi erwähnten programm..werde ich mich auch mal drum kümmern ;)

  • Zitat

    Original von Oscar
    ...
    Bezüglich der Lebensdauer des USB-Sticks bei dieser Art der Verwendung bin ich mir nicht so sicher.
    ...


    Ich mir auch nicht, deshalb nehme ich es auch nicht als Tatsache an.

    USBDLM ist wirklich klasse.
    Trotz meines 389in1 Kartenleser-Kaffekoch-Wäscheaufhäng-Müllraustrag-Geräts sind nur die LW-Buchstaben zugeordnet, die auch ein gültiges Medium haben.
    Außerdem weiss ich jetzt welcher Buchstabe beim Einstecken einer Karte/eines Sticks verwendet wird.
    Unter http://www.uwe-sieber.de/usbdlm_help.htm kann man sich die Hilfe mal anschauen.

    Oh, jetzt wird's aber wirklich OT...

    Gruß
    Westi