Schleife um neu angeschlossene geräte (laufwerke) in einer combo hinzuzufügen

  • Hallo Leute, ich mal wieder....


    will in mein script eine schleife einbauen die neu angeschlossene geräte in eine combo einfügt wenn mir windows ein neu angeschlossenes gerät meldet.


    vielleicht habt ihr ja eine passende func oder einen "denkanstoss :rofl:" für mich?


    danke schonmal für eure hilfe...

    Spoiler anzeigen
    Zitat

    Ich weiß wo dein Haus wohnt... 8o

  • Hier ist schonmal ein Script das alle angeschlossenen Geräte anzeigt:

    [autoit]

    #include <array.au3>

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

    Local $W, $D

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

    For $i = Asc("a") To Asc("z")
    $D = DriveGetType(Chr($i) & ":\")
    If $D = "" Then $D = "Empty"
    $W &= StringUpper(Chr($i)) & ":\ = " & $D & ";"
    Next

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

    ;~ GUICtrlSetData($Combo,$W)

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

    $Info = StringSplit($W, ";")
    _ArrayDisplay($Info)

    [/autoit]


    Zur Überprüfung kannst du immer 1 für angeschlossene Geräte verwenden und 0 für nicht angeschlossene.
    Das kannste dann am besten mit Adlibenable jede Sekunde (1000ms) überprüfen lassen und die Arrays auf Abweichungen testen.
    (Ich denke das reicht als Denkanstoß oder? :P )

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

    • Offizieller Beitrag

    Das ständig in einer Schleife zu überprüfen ist ein schlechter Vorschlag. Besser ist es, wenn das Script von Windows darüber informiert wird, sobald sich etwas geändert hat (GUIRegisterMsg).
    Das würde dann in etwas so aussehen:

    Spoiler anzeigen
    [autoit]


    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>

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

    If Not IsDeclared('WM_DEVICECHANGE') Then Global Const $WM_DEVICECHANGE = 0x0219
    $hGui = GUICreate('Automatische Laufwerkserkennung', 300, 200)
    GUICtrlCreateLabel('Alle Laufwerke:', 25, 30, 100, 20)
    $hCombo = GUICtrlCreateCombo('', 20, 50, 120, 20, $CBS_DROPDOWNLIST)
    _ReadDrives()
    GUISetState()
    GUIRegisterMsg($WM_DEVICECHANGE, 'MY_WM_DEVICECHANGE')
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func MY_WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
    If $hWnd = $hGui Then _ReadDrives()
    Return $GUI_RUNDEFMSG
    EndFunc

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

    Func _ReadDrives()
    Local $aDrives, $sDrives, $sTmp
    GUICtrlSetData($hCombo, '')
    $aDrives = DriveGetDrive('ALL')
    For $i = 1 To $aDrives[0]
    $sDrives &= '|' & StringUpper($aDrives[$i])
    $sTmp = DriveGetLabel($aDrives[$i])
    If $sTmp <> '' Then $sDrives &= ' (' & $sTmp & ') '
    Next
    GUICtrlSetData($hCombo, StringTrimLeft($sDrives, 1), StringRegExpReplace($sDrives, '\|(.+?)\|.*', '$1'))
    EndFunc

    [/autoit]
  • Danke Oscar - das ist genau das was ich gesucht habe habe es selbst schon mit $WM_Devicechange versucht wusste aber nicht das ich den Einstiegspunkt als Constant einbinden muss - wieder etwas dazugelernt


    @ XovoxKingdom

    Mit deinem Beispiel funktioniert das zwar auch aber dabei springt der Zeiger bei geöffneter Combo alle x Sekunden auf das als Standardmäßig definiertes Item...


    Trotzdem vielen dank!


    mfg

    Stinger2k

    Spoiler anzeigen
    Zitat

    Ich weiß wo dein Haus wohnt... 8o

    • Offizieller Beitrag

    Ja, das sind diese Codes! :)
    Und Informationen bekommst Du am besten auf den Microsoftseiten (msdn.microsoft.com/...).
    Speziell zu einer bestimmten Seite kommst Du am einfachsten, indem Du den Code bei Google eingibst. Das ist dann meist der erste Treffer.

    stinger2k: Wenn der Code noch nicht in irgendeiner Include-Datei vorhanden ist, dann muss man diesen halt selbst als Konstante deklarieren.