FReigabe von USB Laufwerken

  • Hallo Zusammen,

    ich such eine Möglichkeit nach dem Entfernen eines USB Sticks den gerade verwendeten Buchstaben wieder freizugeben. Die ganze Logik habe ich noch nicht begriffen aber es kommt öfters vor dass beim Einlegen eines neuen USB Sticks ein Buchstabe übersprungen wird da der alte USB Stick diesen blockiert. Hat jemand hierzu eine IDee?

    Grüße

    Alex

    Einmal editiert, zuletzt von bentom (30. März 2009 um 13:11)

  • Hallo ZUsammen,

    vielen Dank erstmal klappt wunderbar mit dem Zuweisen. Die USB Laufwerke bekommen einfach jeden Buchstaben ab e - h. Soweit so gut. Nun würde ich mir per POPup gerne anziegen lassen welches Laufwerk. Ich weiß dass das USB Programm das auch macht aber ich würde es einfach gerne (auch interesseshalber in AutoIT umsetzen. Leider sitze ich seit geschlagenen 6 Stunden daran und schaffe es einfach nicht. Hoer mein Code. Wenn mir jemand helfen kann wäre ich sehr sehr dankbar

    Es kommt immer der gleiche Fehler in Verbindung mit 2 Sticks und mehr. Funktioniert 5mal einwandfrei beim sechsten mal steht dann da dass f hinzugefügt wurde obwohl im Explorer e zugewiesen wurde. Das macht mich echt noch kirre weil ich einfach nicht drauf komme.

    [autoit]


    #Include <Misc.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>

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

    IF _SINGLETON(@SCRIPTNAME, 1)= 0 THEN EXIT
    DIM $StatusCurrentRemoveabledevices[50]
    DIM $StatusRemoveabledevices[50]

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

    $Removeabledevices = DriveGetDrive("ALL")
    for $i = 1 to $Removeabledevices[0]
    $StatusRemoveabledevices[$i]= DRIVESTATUS($Removeabledevices[$i])
    Next

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

    WHILE 1
    ;Falls sich die Anzahl der Laufwerke ändert also beispielsweise ein USB Laufwerk zugefügt wird

    $CurrentRemoveabledevices = DriveGetDrive("ALL") ; Bei jedem Durchgang wird die Anzahl der Laufwerke abgefragt

    if $CurrentRemoveabledevices[0] > $Removeabledevices[0] Then ;Laufwerk hinzugefügt

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

    for $i = 1 to $CurrentRemoveabledevices[0]
    if $CurrentRemoveabledevices[$i] <> $Removeabledevices[$i] Then
    $StatusCurrentRemoveabledevices[$i] = DRIVESTATUS($CurrentRemoveabledevices[$i])
    IF $StatusCurrentRemoveabledevices[$i] = "READY" THEN
    MsgBox(4096,"Hinzugefügt","Buchstabe " & $CurrentRemoveabledevices[$i])
    ExitLoop
    EndIf
    EndIf
    next

    $Removeabledevices = DriveGetDrive("ALL")
    for $i = 1 to $Removeabledevices[0]
    $StatusRemoveabledevices[$i]= DRIVESTATUS($Removeabledevices[$i])
    Next

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

    Elseif $CurrentRemoveabledevices[0] < $Removeabledevices[0] Then ;Laufwerk wurde abgesteckt
    MsgBox(4096,$i,"Abgesteckt")
    $Removeabledevices = $CurrentRemoveabledevices

    Else
    EndIf

    sleep(50)
    WEnd

    [/autoit]
  • Hallo,

    vielen Dank für die Antwort.

    Habe ein bisschen im Forum nach $WM_DEVICECHANGE gesucht. Leider verstehe ich das nicht ganz. Ich möchte nicht an einem bestimmten USB Stick gekoppelt sein sondern das sollte nach Möglichkeit mit jdem funktionieren.


    Hast du irgendwie ein Beispiel oder einen Link. Wäre super.

    Danke und Grüße

    Alex

  • Hallo Oscar,

    vielen Dank nochmals war echt total am verzweifeln bin zwar immer noch nicht durch aber zumindest weiter folgendes Habe ich jetzt fertig

    [autoit]


    #Include <Misc.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>

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

    IF _SINGLETON(@SCRIPTNAME, 1)= 0 THEN EXIT
    DIM $StatusCurrentRemoveabledevices[50]
    DIM $StatusRemoveabledevices[50]

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

    $Removeabledevices = DriveGetDrive("ALL")
    for $i = 1 to $Removeabledevices[0]
    $StatusRemoveabledevices[$i]= DRIVESTATUS($Removeabledevices[$i])
    Next

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

    Global Const $WM_DEVICECHANGE = 0x0219

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

    GUICreate("USB-Netzwerk-Deaktivierer")
    GUIRegisterMsg($WM_DEVICECHANGE, 'MY_WM_DEVICECHANGE')

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

    WHILE 1
    sleep(500)
    WEnd

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

    Func MY_WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
    $CurrentRemoveabledevices = DriveGetDrive("ALL")
    if $CurrentRemoveabledevices[0] > $Removeabledevices[0] Then ;Laufwerk hinzugefügt
    MsgBox(4096,"Hinzugefügt","1 Stufe")
    for $i = 1 to $CurrentRemoveabledevices[0]
    if $CurrentRemoveabledevices[$i] <> $Removeabledevices[$i] Then
    $StatusCurrentRemoveabledevices[$i] = DRIVESTATUS($CurrentRemoveabledevices[$i])
    IF $StatusCurrentRemoveabledevices[$i] = "READY" THEN
    MsgBox(4096,"Hinzugefügt","Buchstabe " & $CurrentRemoveabledevices[$i])
    ExitLoop
    EndIf
    EndIf
    next
    $Removeabledevices = DriveGetDrive("ALL")
    for $i = 1 to $Removeabledevices[0]
    $StatusRemoveabledevices[$i]= DRIVESTATUS($Removeabledevices[$i])
    Next

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

    Elseif $CurrentRemoveabledevices[0] < $Removeabledevices[0] Then ;Laufwerk wurde abgesteckt
    MsgBox(4096,$i,"Abgesteckt")
    $Removeabledevices = $CurrentRemoveabledevices
    EndIf
    EndFunc

    [/autoit]

    Das funktioniert auch schon recht gut. Wenn ich einen Stick anstecke ploppt die Box auf Buchstabe E:\ (als Beispiel) angesteckt. Wenn ich noch einen anstecke dann klappt das auch (Buchstabe f:\) Wenn ich den USB stick entferne dann bekomme ich auch die richtige Meldung. Nur manchmal kann es sein (meist wenn ich meine beiden USB Sticks hintereinander entferne) dass beim Neuanstecken dann aufploppt

    Buchstabe f:\ obwohl im Explorer Buchstabe e:\ zugeweisen wurde. Stecke ich dann ab und wieder an passt es aber.... Und ich komme einfach nicht drauf

    Grüße

    Alex

    • Offizieller Beitrag

    Hallo,

    probiers mal so:

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <GUIConstantsEx.au3>

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

    ; http://msdn.microsoft.com/en-us/library/aa363480(VS.85).aspx
    Const $DBT_DEVICEARRIVAL = 0x8000 ; A device or piece of media has been inserted and is now available.
    Const $DBT_DEVICEREMOVECOMPLETE = 0x8004 ; A device or piece of media has been removed.

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

    If _Singleton(@ScriptName, 1) = 0 Then Exit
    Dim $StatusCurrentRemoveabledevices[50]
    Dim $StatusRemoveabledevices[50]

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

    Global $Removeabledevices = DriveGetDrive("ALL")
    Global $CurrentRemoveabledevices
    For $i = 1 To $Removeabledevices[0]
    $StatusRemoveabledevices[$i] = DriveStatus($Removeabledevices[$i])
    Next

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

    Global Const $WM_DEVICECHANGE = 0x0219

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

    GUICreate("USB-Netzwerk-Deaktivierer")
    GUIRegisterMsg($WM_DEVICECHANGE, 'MY_WM_DEVICECHANGE')

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

    While 1
    Sleep(500)
    WEnd

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

    Func MY_WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
    If ($wParam = $DBT_DEVICEARRIVAL) Or ($wParam = $DBT_DEVICEREMOVECOMPLETE) Then
    $CurrentRemoveabledevices = DriveGetDrive("ALL")
    If $CurrentRemoveabledevices[0] > $Removeabledevices[0] Then ;Laufwerk hinzugefügt
    MsgBox(4096, "Hinzugefügt", "1 Stufe")
    For $i = 1 To $CurrentRemoveabledevices[0]
    If $CurrentRemoveabledevices[$i] <> $Removeabledevices[$i] Then
    $StatusCurrentRemoveabledevices[$i] = DriveStatus($CurrentRemoveabledevices[$i])
    If $StatusCurrentRemoveabledevices[$i] = "READY" Then
    MsgBox(4096, "Hinzugefügt", "Buchstabe " & $CurrentRemoveabledevices[$i])
    ExitLoop
    EndIf
    EndIf
    Next
    $Removeabledevices = $CurrentRemoveabledevices
    For $i = 1 To $Removeabledevices[0]
    $StatusRemoveabledevices[$i] = DriveStatus($Removeabledevices[$i])
    Next
    ElseIf $CurrentRemoveabledevices[0] < $Removeabledevices[0] Then ;Laufwerk wurde abgesteckt
    MsgBox(4096, $i, "Abgesteckt")
    $Removeabledevices = $CurrentRemoveabledevices
    EndIf
    EndIf

    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_DEVICECHANGE

    [/autoit]
  • Hallo zusammen.

    Also wenn ich das richtig verstanden habe, geht es darum zu schauen ob IRGENDEIN USB-Stick angeschlossen ist oder nicht. Wenn Ja dann "Stick dran", wenn Nein dann "Stick fehlt".
    Ich habe mir den o. g. Grundbeitrag mehrfach durchgelesen, aber so wie ich es verstanden habe kann es auch falsch sein. Aus diesem Grund meine ich, sollte das genauer erklärt werden.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo Zusammen,

    zunächst mal wirklich vielen vielen Dank dass sich überhaupt jemand die Zeit nimmt und soviel Mühe gibt. Hab ich wirklich selten bis garnicht erlebt und freut mich total. Noch dazu wo ich gestern kurz vorm Nervenzusammenbruch gesatnden bin :) Aber ihr kennt das sicher.

    Also was ich eben erreichen wollte ist, dass der Computer auf das Einstecken und ABstecken irgendeines USB Sticks reagiert und den passenden LaufwerksBuchstaben per Popup zeigt. Das hat mit meinem Skript leider nicht in allen Fällen funktioniert. Manchmal stand da dass der Stick beispielsweise den Laufwerksbuchstaben f: hat obwohl diesem eigentlich e zugewiesen wurde.

    Ich habe jetzt ca. 30mal ein und ausgesteckt mit 3 unterschiednlcihen USB Sticks. Bisher hatte ich mit dem Skript von Bernd noch keinen Fhler bzw. keine Falschzuweisung. Das ist super. Leider versthe ich meinen Fehler noch nicht ganz da ich das Skript nicht 100% nachvollziehen kann aber ich arbeite dran :)

    Nochmals vielen vielen Dank und Grüße

    Alex

  • Hallo Nochmals,

    nun habe ich leider noch einen Fehler gefunden den ich nicht wegbekomme. Diesen hatte ich anfangs nicht bemerkt da ich ein Netzlaufwerk zugeweisen habe was fest den Buchstaben z trägt. Nun bekomme ich eine Fheler meldung wenn das Netzlaufwerk nicht gemountet ist.

    [autoit]

    #include <Misc.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <GUIConstantsEx.au3>

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

    ; http://msdn.microsoft.com/en-us/library/aa363480(VS.85).aspx
    Const $DBT_DEVICEARRIVAL = 0x8000 ; A device or piece of media has been inserted and is now available.
    Const $DBT_DEVICEREMOVECOMPLETE = 0x8004 ; A device or piece of media has been removed.

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

    If _Singleton(@ScriptName, 1) = 0 Then Exit
    Dim $StatusCurrentRemoveabledevices[50]
    Dim $StatusRemoveabledevices[50]

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

    Global $Removeabledevices = DriveGetDrive("ALL")
    Global $CurrentRemoveabledevices
    For $i = 1 To $Removeabledevices[0]
    $StatusRemoveabledevices[$i] = DriveStatus($Removeabledevices[$i])
    Next

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

    Global Const $WM_DEVICECHANGE = 0x0219

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

    GUICreate("USB-Netzwerk-Deaktivierer")
    GUIRegisterMsg($WM_DEVICECHANGE, 'MY_WM_DEVICECHANGE')

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

    While 1
    Sleep(500)
    WEnd

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

    Func MY_WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
    If ($wParam = $DBT_DEVICEARRIVAL) Or ($wParam = $DBT_DEVICEREMOVECOMPLETE) Then
    $CurrentRemoveabledevices = DriveGetDrive("ALL")
    If $CurrentRemoveabledevices[0] > $Removeabledevices[0] Then ;Laufwerk hinzugefügt
    MsgBox(4096, "Hinzugefügt", "1 Stufe")
    For $i = 1 To $CurrentRemoveabledevices[0] -------> Hier wird hochgezählt. Falls ein Neues Gerät angeschlossen wird läuft die Schleife bis zur entsprechenden höchsten Anzahl
    If $CurrentRemoveabledevices[$i] <> $Removeabledevices[$i] Then damit wird hier ein Fehler verursacht da die max Anzahl der Removabledevices überschritten wird
    $StatusCurrentRemoveabledevices[$i] = DriveStatus($CurrentRemoveabledevices[$i])
    If $StatusCurrentRemoveabledevices[$i] = "READY" Then
    MsgBox(4096, "Hinzugefügt", "Buchstabe " & $CurrentRemoveabledevices[$i])
    ExitLoop
    EndIf
    EndIf
    Next
    $Removeabledevices = $CurrentRemoveabledevices
    For $i = 1 To $Removeabledevices[0]
    $StatusRemoveabledevices[$i] = DriveStatus($Removeabledevices[$i])
    Next
    ElseIf $CurrentRemoveabledevices[0] < $Removeabledevices[0] Then ;Laufwerk wurde abgesteckt
    MsgBox(4096, $i, "Abgesteckt")
    $Removeabledevices = $CurrentRemoveabledevices
    EndIf
    EndIf

    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_DEVICECHANGE

    [/autoit]

    Nur wie löse ich das? Hat jemand eine Idee?

    Danke und Grüße

    Alex

    • Offizieller Beitrag

    Hallo,

    Du könntest zum Beispel statt

    [autoit]

    DriveGetDrive("ALL")

    [/autoit][autoit]

    DriveGetDrive("REMOVABLE")

    [/autoit]


    nehmen!

  • Hallo Bernd,

    vielen dank. So habe ich es am Anfang probiert bin aber nicht weitergekommen da hier ein Fehler bei der Abfrage entshet wenn kein Laufwerk gemounted ist. Deswegen habe ich es es wieder sein gelassen und anders probiert.

    HMM irgendwie häng ich gerade.

    Wenn jemand noch einen Tipp hat wäre ich sehr dankbar

    Grüße

    Alex

    • Offizieller Beitrag

    Schau Dir mal das Beispiel zu DriveGetDrive in der Hilfe an.
    Wenn kein Laufwerk vorhanden ist, dann ist @error <> 0. Das musst Du entsprechend abfragen, damit diese Zeile

    [autoit]

    If $CurrentRemoveabledevices[0] > $Removeabledevices[0] Then

    [/autoit]


    nicht zu einem Fehler führt (Array nicht vorhanden).
    Das heißt: Vor der obigen Zeile mit

    [autoit]

    If @error Then ...

    [/autoit]


    oder mit

    [autoit]

    If IsArray($CurrentRemoveabledevices) Then ...

    [/autoit]


    diese Möglichkeit ausschliessen.

  • Hallo nochmals,

    ich werd noch wahnsinnig mit diesem Skript langsam gebe ich es auf. Den Fehler kann ich damit abfangen...das klappt wunderbar nur spirngt er dann ja garnicht mehr in die Schleife und es erfolgt überhaupt keine Reaktion. Eigentlich bräuchte ich noch einen extra fall wenn der zuletzt zugewissene Buchstabe auch der wirklich letzt im ganzen System ist. Genau dann funktioniert es nämlich nicht. Wenn noch ein Buschstabe dahinter kommt, beispielsweise ein Netzlaufwerk bei x, y oder z dann klappt es wunderbar.

    Aber ich komm nicht drauf wie ich das einbauen soll. Danke nochmals für eure Hilfe. Gelernt habe ich zumindest mal einiges

    Grüße

    Alex

  • Hallo Alex.

    Poste doch das aktuelle Script, so das da weiter geholfen werden kann.

    Geb nicht auf, denn ich selber habe auch durch AutoIt gelernt, das es "Projekte" gibt, bei den man Geduld und Zeit braucht. Und glaube mir, wenn Du Geduld hast, dann bekommst Du mit den Usern hier auch die Lösung hin.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo nochmals,

    hier das aktuelle Skript. Ich habe versucht 2 Unterschiedungen zu treffen. Einmal wenn es einen Laufwerksbuchstaben nach den Zugewiesenen gibt und einmal wenn nicht aber wie geschrieben so richtig klappen tut es nicht.

    [autoit]


    #Include <Misc.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #Include <File.au3>
    #include <string.au3>
    #include <WinAPI.au3>
    #include <GUIConstantsEx.au3>

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

    IF _SINGLETON(@SCRIPTNAME, 1)= 0 THEN EXIT

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

    Const $DBT_DEVICEARRIVAL = 0x8000 ; A device or piece of media has been inserted and is now available.
    Const $DBT_DEVICEREMOVECOMPLETE = 0x8004 ; A device or piece of media has been removed.
    Dim $StatusCurrentRemoveabledevices[50]
    Dim $StatusRemoveabledevices[50]
    Global $CurrentRemoveabledevices
    Global $Removeabledevices = DriveGetDrive("REMOVABLE")
    if not @error then
    For $i = 1 To $Removeabledevices[0]
    $StatusRemoveabledevices[$i] = DriveStatus($Removeabledevices[$i])
    Next
    Else
    $drives = 0
    endif

    Global Const $WM_DEVICECHANGE = 0x0219

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

    GUICreate("USB-Netzwerk-Deaktivierer")
    GUIRegisterMsg($WM_DEVICECHANGE, 'MY_WM_DEVICECHANGE')

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

    WHILE 1
    sleep(100)
    WEnd

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

    Func MY_WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
    If ($wParam = $DBT_DEVICEARRIVAL) Or ($wParam = $DBT_DEVICEREMOVECOMPLETE) Then
    $CurrentRemoveabledevices = DriveGetDrive("REMOVABLE")
    if @error then
    $drives = 0
    return 0
    EndIf
    if $drives = 0 Then
    MsgBox(4096, "Hinzugefügt", "Buchstabe " & $CurrentRemoveabledevices[1])
    $drives = 1
    Global $Removeabledevices = DriveGetDrive("REMOVABLE")
    For $i = 1 To $Removeabledevices[0]
    $StatusRemoveabledevices[$i] = DriveStatus($Removeabledevices[$i])
    Next
    else
    If $CurrentRemoveabledevices[0] > $Removeabledevices[0] Then ;Laufwerk hinzugefügt...
    For $i = 1 To $Removeabledevices[0]
    if not @error Then
    If $CurrentRemoveabledevices[$i+1] <> $Removeabledevices[$i] Then
    $StatusCurrentRemoveabledevices[$i+1] = DriveStatus($CurrentRemoveabledevices[$i+1])
    If $StatusCurrentRemoveabledevices[$i+1] = "READY" Then
    MsgBox(4096, "Hinzugefügt", "Buchstabe " & $CurrentRemoveabledevices[$i+1])
    ExitLoop
    EndIf
    EndIf
    EndIf
    Next
    $Removeabledevices = $CurrentRemoveabledevices
    For $i = 1 To $Removeabledevices[0]
    $StatusRemoveabledevices[$i] = DriveStatus($Removeabledevices[$i])
    Next
    ElseIf $CurrentRemoveabledevices[0] < $Removeabledevices[0] Then ;Laufwerk wurde abgesteckt
    $Removeabledevices = $CurrentRemoveabledevices
    EndIf
    EndIf
    EndIf

    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_DEVICECHANGE
    ;#comments-end

    [/autoit]

    Vielen Dank nochmals für eure Hilfe

    Grüße

    Alex

    • Offizieller Beitrag

    Versuch's mal hiermit:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Global $aDrives = DriveGetDrive('ALL')

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

    Global Const $WM_DEVICECHANGE = 0x0219

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

    GUICreate('USB-Netzwerk-Deaktivierer')
    GUIRegisterMsg($WM_DEVICECHANGE, 'MY_WM_DEVICECHANGE')

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

    While 1
    Sleep(100)
    WEnd

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

    Func MY_WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
    Local Const $DBT_DEVICEARRIVAL = 0x8000 ; A device or piece of media has been inserted and is now available.
    Local Const $DBT_DEVICEREMOVECOMPLETE = 0x8004 ; A device or piece of media has been removed.
    Local $aNew = DriveGetDrive('ALL')
    Switch $wParam
    Case $DBT_DEVICEARRIVAL
    For $i = 1 To $aNew[0]
    $iHit = 0
    For $j = 1 To $aDrives[0]
    If $aNew[$i] = $aDrives[$j] Then
    $iHit = $j
    ExitLoop
    EndIf
    Next
    If $iHit = 0 Then TrayTip('Hinzugefügt', 'Laufwerk ' & $aNew[$i], 5, 1)
    Next
    $aDrives = $aNew
    Case $DBT_DEVICEREMOVECOMPLETE
    For $i = 1 To $aDrives[0]
    $iHit = 0
    For $j = 1 To $aNew[0]
    If $aDrives[$i] = $aNew[$j] Then
    $iHit = $j
    ExitLoop
    EndIf
    Next
    If $iHit = 0 Then TrayTip('Entfernt', 'Laufwerk ' & $aDrives[$i], 5, 1)
    Next
    $aDrives = $aNew
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_DEVICECHANGE

    [/autoit]

    Und keine MsgBoxen innerhalb der Funktion "MY_WM_DEVICECHANGE" benutzen. Zitat aus der Hilfe:

    Zitat


    Warning: blocking of running user functions which executes window messages with commands such as "Msgbox()" can lead to unexpected behavior, the return to the system should be as fast as possible !!!

  • Hallo Zusammen,

    Zitat

    Und keine MsgBoxen innerhalb der Funktion "MY_WM_DEVICECHANGE" benutzen. Zitat aus der Hilfe:

    Sowas ist natürlich immer schlecht wenn man es nicht weiß :) Aber egal das wird es nicht gewesen sein. Vielmehr waren in meiner Version noch andere Punkte die wohl so garnicht zu lösen waren.

    Was soll ich sagen: Herzlichen Dank für all die Mühen. Werd das jetzt mal ausführlich testen und versuchen zu verstehen. Zumindest die Logik ist mir schon klar. Wieder einiges dazugelernt.... Dankeschööööön :)

    LG Alex