vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
USB Devices mit VB.NET 
Autor: Keysie
Datum: 01.02.09 01:17

Hi

Wie die meisten Probleme beginnt es eigentlich ganz harmlos.. mit der Win-API, mit deren Hilfe ich gerne den wahren Namen meiner USB-Maus herausfinden möchte, um diesen dann mit CreateFile(...) zu verwenden. Zuerst hab ich mich mal ein bischen schlau gemacht wie das so geht, und habe auch einige Fortschritte erzielt. Doch jetzt komme ich auch nach stundenlanger Suche nicht weiter. Es gelingt mir zwar, mit SetupDiGetClassDevs und SetupDiGetDeviceRegistryProperty aus der setupapi die USB-Geräte aufzulisten und deren Namen (eigentlich DEVICEDESC) auszugeben, doch sobald ich mit SetupDiEnumDeviceInterfaces die Interfaces dieser Geräte feststellen will, läuft nix mehr. Egal wie ich die Parameter verändere usw. es kommt immer ERROR_NO_MORE_ITEMS. Danke schon mal im Voraus.
Als Betriebssystem nutze ich 64Bit Vista Ultimate.

Ich kopiere die Deklarationen, bei denen ich nicht sicher bin, auch hier hinein, denn ich hab die starke Vermutung dass das Problem entweder irgendwo dort, oder bei der DeviceClassGUID liegt.

    Public Declare Function SetupDiEnumDeviceInterfaces Lib "setupapi.dll" ( _
        ByVal DeviceInfoSet As Long, _
        ByVal DeviceInfoData As SP_DEVINFO_DATA, _
        ByVal InterfaceClassGuid As Guid, _
        ByVal MemberIndex As Long, _
        ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA) As Long
 
    <StructLayout(LayoutKind.Sequential)> _
    Public Structure SP_DEVINFO_DATA
        Public cbSize As Long
        Public ClassGuid As Guid
        Public PropertyID As Long
        Public Reserved As Long
    End Structure
 
    <StructLayout(LayoutKind.Sequential)> _
    Public Structure SP_DEVICE_INTERFACE_DATA
        Public cbSize As Integer
        Public ClassGuid As Guid
        Public PropertyID As Integer
        Public Reserved As IntPtr
    End Structure
 
    Dim Class_GUID_Mouse As New Guid("50127dc3-0f36-415e-a6cc-4cb3be910b65")
    Dim DIDC As SP_DEVINFO_DATA
    Dim DIDI As SP_DEVICE_INTERFACE_DATA
 
    Private Sub Form1_MouseClick(...)
        hDevInfoC = SetupDiGetClassDevs(Nothing, "USB", Nothing, _
          DEVICEFLAGS.DIGCF_PRESENT Or DEVICEFLAGS.DIGCF_ALLCLASSES)
        hDevInfoI = SetupDiGetClassDevs(Nothing, Nothing, Nothing, _
        DEVICEFLAGS.DIGCF_PRESENT Or DEVICEFLAGS.DIGCF_DEVICEINTERFACE)
 
        DIDC.cbSize = 32    '32Bit: 28 / 64Bit: 32
        DIDI.cbSize = 32
 
        For Me.i = 0 To 100
 
            ' ---Enumerierung der Geräte---
            ' *****************************
 
            retValue = SetupDiEnumDeviceInfo(hDevInfoC, i, DIDC)
            SE = Err.LastDllError
            Select Case SE
                Case 0
                    Debug.Print(i & ": Device enum Ok")
                Case ERROR_NO_MORE_ITEMS
                    Debug.Print(i & ": No Device Found -> exit")
                    Exit For
                Case ERROR_INVALID_USER_BUFFER
                    Debug.Print(i & ": SP_DEVINFO_DATA Size wrong")
            End Select
 
            ' ---Überwachung der Geräte mit Debug-Output---
            ' *********************************************
 
            retValue = SetupDiGetDeviceRegistryProperty(hDevInfoC, DIDC, _ 
                            DEVICEPROPERTYINDEX.SPDRP_DEVICEDESC, regtype, _ 
                            Nothing, 0, RequiredSize)
            SE = Err.LastDllError
            If SE = ERROR_INSUFFICIENT_BUFFER Then
                Buffer = Space(RequiredSize)
                SetupDiGetDeviceRegistryProperty(hDevInfoC, DIDC, _
                     DEVICEPROPERTYINDEX.SPDRP_DEVICEDESC, regtype, _ 
                     Buffer, Len(Buffer), RequiredSize)
                Debug.Write(i & ": " & Buffer)
                Debug.Print(" ")
            End If
 
            ' ---Maus suchen---
            ' *****************
 
            If Buffer.Contains("Microsoft Wheel Mouse Optical (USB)") Then
                Buffer = ""
                DeviceIndex = i
                Exit For
            End If
        Next i
 
        Debug.Print("-------------------------------------")
 
        For Me.i = 0 To 100
            ' ---Enumerierung der Interfaces---
            ' *********************************
 
            retValue = SetupDiEnumDeviceInterfaces(hDevInfoI, Nothing, _ 
                            Class_GUID_Mouse, i, DIDI)
            SE = Err.LastDllError
            Select Case SE
                Case 0
                    Debug.Print(i & ": Interface enum Ok")
                Case ERROR_NO_MORE_ITEMS   ' <--- HIER lande ich immer
                    Debug.Print(i & ": No Interface Found -> exit")
                    Exit For
                Case ERROR_INVALID_USER_BUFFER
                    Debug.Print(i & ": SP_DEVICE_INTERFACE_DATA Size wrong")
            End Select
        Next
    End Sub
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
USB Devices mit VB.NET3.668Keysie01.02.09 01:17
Re: USB Devices mit VB.NET2.534ModeratorFZelle01.02.09 11:49
Re: USB Devices mit VB.NET2.667Keysie01.02.09 13:31
Re: USB Devices mit VB.NET2.533Keysie01.02.09 19:01
Re: USB Devices mit VB.NET2.530Keysie26.02.09 21:51

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel