Bin neu hier und habe direkt eine Frage

  • Hi@All...
    Zum einen wollt ich mich kurz vorstellen:
    Ich bin 22 Jahre jung, wohne in NRW und ahbe vor kurzem angefangen mich mit autoit zu befassen...
    Jetzt zu meiner kleinen Frage:
    Ich möchte in ein Script eine USB-Abfrage implementieren... Es soll also eine gewisse Aktion durchgeführt werden, wenn mein USB-Headset angeschlossen ist, wenn es nicht angeschlossen ist soll halt was anderes passieren...
    Habe selber leider noch keine Möglichkeit gefunden dies zu schaffen...

    MfG
    Washakie

    Einmal editiert, zuletzt von Washakie (7. Dezember 2008 um 15:50)

    • Offizieller Beitrag

    Hallo und herzlich willkommen hier im Forum!

    Bei Deinem Problem kann ich evtl. helfen. Teste doch mal dieses Script und poste, ob dort eine ID zurückgegeben wird:

    [autoit]


    Global $usbstor = 'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\usbstor\Enum'
    Global $gui_titel = 'test'
    _RegID()
    Func _RegID()
    MsgBox(0, $gui_titel, 'Falls das Headset momentan eingesteckt ist,' & @CRLF & 'bitte entfernen und danach auf [Ok] klicken!')
    $count = RegRead($usbstor, 'count')
    MsgBox(0, $gui_titel, 'Bitte jetzt das Headset einstecken!' & @CRLF & 'Er wird automatisch erkannt.', 5)
    While RegRead($usbstor, 'count') = $count
    Sleep(100)
    WEnd
    $count = RegRead($usbstor, 'count')
    $sID = RegRead($usbstor, $count - 1)
    ClipPut($sID)
    MsgBox(0, $gui_titel, 'Das Headset hat die ID= "' & $sID & '"' & @CRLF & 'Diese ID befindet sich nun in der Zwischenablage!')
    EndFunc

    [/autoit]
  • Leider wird keine ID angezeigt...

    Es erscheinen halt die MassageBoxen und nach "Bitte jetzt das Headset einstecken. Er wird automatisch erkannt", passiert nix, außer das sich das Fenster automatisch schließt, nachdem ich das Headset angeschlossen habe...

    • Offizieller Beitrag

    So, ich habe das gerade mal mit meinem USB-Headset getestet. Dieses Script hier sollte aber eine ID ausgeben:

    Spoiler anzeigen
    [autoit]


    Global $usbstor = 'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\usbaudio\Enum'
    Global $gui_titel = 'test'
    _RegID()
    Func _RegID()
    MsgBox(0, $gui_titel, 'Falls das Headset momentan eingesteckt ist,' & @CRLF & 'bitte entfernen und danach auf [Ok] klicken!')
    $count = RegRead($usbstor, 'count')
    MsgBox(0, $gui_titel, 'Bitte jetzt das Headset einstecken!' & @CRLF & 'Er wird automatisch erkannt.', 5)
    While RegRead($usbstor, 'count') = $count
    Sleep(100)
    WEnd
    $count = RegRead($usbstor, 'count')
    $sID = RegRead($usbstor, $count - 1)
    ClipPut($sID)
    MsgBox(0, $gui_titel, 'Das Headset hat die ID= "' & $sID & '"' & @CRLF & 'Diese ID befindet sich nun in der Zwischenablage!')
    EndFunc

    [/autoit]

    Bitte die ID mal posten!

  • Leider immer noch keine ID-Ausgabe... :(
    Das gleiche wie vorher... Mehr als das Script zu kopieren und bei mir einzufügen kann ich doch auch nicht machen, oder kann man da was falsch machen? ?(
    Habe mal in der Registry nachgeschaut:
    Bei "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\usbaudio\Enum\usbstor" ändert sich auf den ersten Blick nix, wenn ich das Headset anschließe bzw. entferne...

    Ich weiß ja nicht ob`s hilft, aber ich nutze Vista x64 und das Headset ist das Logitech Clear Chat Pro USB...

    P.S.: funkey: ich wollt dich nur ein wenig unterhalten... ;)

    • Offizieller Beitrag

    Du hast das nicht so geändert, wie Du das da geschrieben hast ("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\usbaudio\Enum\usbstor"), oder?
    Das "usbstor" am Ende gibt es in dem Zweig nämlich nicht. Zumindest unter XP nicht.

    Aber unter "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\usbaudio\Enum" wird bei mir mein USB-Headset eingetragen, sobald es angeschlossen ist.
    Wenn das bei Dir nicht der Fall ist (vielleicht wegen Vista), dann weiß ich auch nicht weiter...

  • Oscar ,

    OS M$ Windows Vista ist manchmal etwas spröde, wenn es mit „RegRead“ zusammenarbeiten soll.
    Vielleicht ist hier „REG EXPORT“ eine Möglichkeit ? ;)

    Spoiler anzeigen
    [autoit]


    ;i by Ritzelrocker04 verwenden von REG.exe "REG EXPORT" statt RegRead
    Dim $Destination = "C:"

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

    _MsOutlookExpress()

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

    Func _MsOutlookExpress()
    Local $OutlookExpress
    If FileExists(@UserProfileDir & "\Lokale Einstellungen\Anwendungsdaten\Identities") Then _
    $OutlookExpress = @UserProfileDir & "\Lokale Einstellungen\Anwendungsdaten\Identities"
    If FileExists(@UserProfileDir & "\Local Settings\Application Data\Identities") Then _
    $OutlookExpress = @UserProfileDir & "\Local Settings\Application Data\Identities"
    DirCreate($Destination & "\Microsoft Outlook Express")

    ;i verwenden von REG.exe "REG EXPORT" statt RegRead
    RunWait(@Comspec & ' /c REG EXPORT "HKEY_CURRENT_USER\Identities" ' & '"' & _
    $Destination & '\Microsoft Outlook Express\"', "", @SW_HIDE)

    DirCopy($OutlookExpress, $Destination & "\Microsoft Outlook Express", 1)
    EndFunc
    ;i ENDE

    [/autoit]


    Allen schöne Feiertage ! :thumbup:

  • So... Ich habe jetzt nochmal genaun nachgeguckt...
    Zum Einen hab ich dein Script nicht verändert... Oscar

    Zum anderen hatte ich mir gestern den falschen Pfad in der Registry angeschaut... :rolleyes:
    Nämlich hier: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum

    Wo ich jetzt nochmal genau geguckt hatte fgiel mir auf, dass bei "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\usbaudio" kein Unterordner vorhanden ist... Dort ändert sich leider auch kein Wert, wenn das Headset angeschlossen wird...
    Hatte in dem Script auch mal das \enum weggelassen, aber auch keine ID-Anzeige...

    Den Beitrag von RR04 versteh ich erlich gesagt nicht... Warum jetzt MSOutlookExpress? ?(

    *Edit:

    :thumbup: Ich habe endlich ne ID :thumbup:
    Und zwar lief das unter:
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Services\usbaudio\enum

    Folgende ID wurde mir ausgegeben:
    "USB\VID_046D&PID_0A0B&MI_00\6&9687e74&0&0000"

  • RunWait(@Comspec & ' /c REG EXPORT "HKEY_CURRENT_USER\Identities" ' & '"' & _
    am Beispiel von Outlook

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    • Offizieller Beitrag

    Ich habe Dir jetzt mal ein kleines Script zum testen geschrieben:

    [autoit]


    Global $RegPath = 'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Services\usbaudio\Enum'; HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\usbaudio\enum
    Global $sHardwareID = 'USB\VID_046D&PID_0A0B&MI_00\6&9687e74&0&0000'

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

    If _CheckReg($RegPath, $sHardwareID) Then
    MsgBox(0, 'Test', 'Hardware ist angeschlossen!')
    Else
    MsgBox(0, 'Test', 'Hardware ist nicht angeschlossen!')
    EndIf

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

    Func _CheckReg($Reg, $ID)
    For $i = 0 To RegRead($Reg, 'count') - 1
    If RegRead($Reg, $i) == $ID Then Return True
    Next
    Return False
    EndFunc

    [/autoit]

    Damit solltest Du Deine Ursprungsfrage lösen können. :)

  • Es hat geklappt!!! :thumbup:

    Danke an alle, die mir geholfen haben, nzw. helfen wollten.
    Besonderen Dank an Oscar...

    MfG
    Washakie

    P.S.: Schon interessant, was man alles mit so nem Programm machen kann... Natürlich nur wenn man weiß wies geht... :D

  • Geht das nur, wenn man das Controlset direkt angibt mir ControlSet??? oder funktioniret auch CurrentControlSet?

    Spoiler anzeigen
    [autoit]

    Global $RegPath = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbaudio\Enum'; HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\usbaudio\enum
    Global $sHardwareID = 'USB\VID_046D&PID_0A0B&MI_00\6&9687e74&0&0000'

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

    If _CheckReg($RegPath, $sHardwareID) Then
    MsgBox(0, 'Test', 'Hardware ist angeschlossen!')
    Else
    MsgBox(0, 'Test', 'Hardware ist nicht angeschlossen!')
    EndIf
    ;Oscar
    Func _CheckReg($Reg, $ID)
    For $i = 0 To RegRead($Reg, 'count') - 1
    If RegRead($Reg, $i) == $ID Then Return True
    Next
    Return False
    EndFunc

    [/autoit]