Webcam-Liste nur "Microsoft WDM Image Capture"

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von lauwag.

    Webcam-Liste nur "Microsoft WDM Image Capture"

    Hallo Liebes Forum,

    ich habe folgendes Problem:

    Ich programmiere eine Software, mit der man eine Webcam anzeigen lassen kann.
    Deshalb habe ich folgenden Befehl:

    VB.NET-Quellcode

    1. Dim strName As String = Space(100)
    2. Dim strVer As String = Space(100)
    3. Dim bReturn As Boolean
    4. Dim x As Integer = 0
    5. Do
    6. bReturn = capGetDriverDescriptionA(x, strName, 100, strVer, 100)
    7. If bReturn Then lstDevices.Items.Add(strName.Trim)
    8. x += 1
    9. Loop Until bReturn = False
    10. End Sub


    Jedoch sieht die Liste nur so aus,wie man es hier unten sieht, egal,
    wie viele Webcams ich anschließe,und egal, an welchem PC.

    Was ist der Fehler und wie behebe ich ihn?

    Danke

    Lauwag
    Bilder
    • Unbenannt.png

      2,89 kB, 161×149, 2.578 mal angesehen
    Ich benutze ein anderes quellcode, das webcams anzeigt, videos aufnimmt, In vielen Formaten speichert.

    projekt im Anhang!!

    Neue Date, weil die alte nicht richtig hochgeladen wurde.

    Edit by nikeee13:
    Formatierung angepasst.
    Dateien
    • Projects.zip

      (165,97 kB, 463 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „nikeee13“ ()

    Was zeigt denn das System (DeviceManager) an?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodfromGermany: Wenn du den Geräte-Manager meinst, der zeigt mir "Integrated Webcam"an, wie die Webcam auch heißt, und das Fenster sie auch so anzeigt...
    Ich gucke mir mal das Programm von @klonerk an.

    EDIT: Das Programm von klonerk zeigt das gleiche an,wie meins. auch die "Microsoft WDM Image Capture".

    EDIT: Hier mal der Ablauf meines Programmes:

    1.Ich starte mein Programm
    2.Ich öffne das Drop-Down Menü (s.Bild1)
    3. Ich klicke auf "Start Preview"
    4.Es öffnet sich das Fenster (s.Bild 2)
    5.Ich wähle ein vorhandenes Gerät aus, wie es der Treiber kennt.
    6.Ich drücke auf OK
    7.Ich drücke nochmal auf "Start Preview"
    8.Das Bild erscheint.
    Bilder
    • Bild 1.png

      2,89 kB, 161×149, 2.527 mal angesehen
    • Bild 2.png

      20,05 kB, 375×408, 244 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „lauwag“ ()

    2 Minuten googlen schrieb:

    WDM ist ein neues Windows-Versions-übergreifendes Treibermodell von Microsoft. Bei vielen Capture-fähigen Videokarten wird dieser Treiber seit ca 2000 mitinstalliert.
    Ist der angezeigte Name dein einziges Problem, oder funktioniert die Aufnahme über den WDM-Treiber nicht?
    Hallo,

    die Aufnahmefunktion eines Bildes funktioniert. Du kannst das auch selber ausprobieren:

    eyeinc.jimdo.com/unsere-programme/multicamview/

    Mein Problem ist ja, dass ich bei anderen Kamera-basierten Programmen
    wie amcap.exe , skype oder das Dienstprogramm meiner Webcam (Dell Webcam Central)
    ,Webcam Quellen wie "Integrated Webcam","Mobiola Video Source"(Warelex inc.) oder
    der Live-Videooutput wie bei einem Screenshot Programm.
    Also alles, was man z.B. bei Skype auswählen kann, wenn man live
    mit jmd. telefonieren will!

    Lauwag
    So,ich ahb jetzt mal nachgelesen.
    Das Problem ist, dass der zweite Ansatz von dem Typen bei msdn(Powmax) alle Geräte auflistet,
    und nicht nur die Webcams.
    WMI nachgeguckt, aber da gibts nur Angaben, wie man den freien Speicher berechnet usw...

    LauWag
    mit dem WMI lässt sich viel mehr im system machen, suche weiter. hier mal nur eine der gut 2 dutzend klassen: msdn.microsoft.com/en-us/libra…a394084%28v=vs.85%29.aspx

    was der "msdn-typ" ( ^^ ) meinte geht mit einer DLL sehe ich grad. kannst du die nicht mal herunterladen und in einem anderen projekt ausprobieren, ob du dort den richtigen namen erhalten kannst? wenn er in der liste auftaucht kannst du ja nachschauen, ob es möglich ist die geräte zu unterscheiden (in klassen einzuteilen)
    Wegen der WMI werd ich jetzt mal versuchen.
    Im Anhang ist das andere Programm , was mir aber nur einen Bluetooth Treiber anzeigt,
    kannst du ja mal ausprobieren :D

    LauWag

    EDIT: Ich hab jetzt mal nach der WMI geguckt, aber da gibt es nichts mit Webcam-Listen!
    Dateien

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lauwag“ ()

    OK,
    source kein Ding....
    Was bringt mir denn aber auflisten,wenn ich sie nicht anzeigen lassen kann?

    Source:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Device
    2. Private mName As String
    3. Private mManufacturer As String
    4. Private mDescription As String
    5. Private mService As String
    6. Private mDeviceID As String
    7. Private mPNPDeviceID As String
    8. Private mClassGUID As String
    9. Public Property Name() As String
    10. Get
    11. Return mName
    12. End Get
    13. Set(ByVal value As String)
    14. mName = value
    15. End Set
    16. End Property
    17. Public Property Manufacturer() As String
    18. Get
    19. Return mManufacturer
    20. End Get
    21. Set(ByVal value As String)
    22. mManufacturer = value
    23. End Set
    24. End Property
    25. Public Shared Function GetAllDevices() As List(Of Device)
    26. Dim pc As String = "." 'local
    27. Dim wmi As Object = GetObject("winmgmts:\\" & pc & "\root\cimv2")
    28. Dim allDevices As New List(Of Device)
    29. Dim devices As Object = wmi.ExecQuery("Select * from Win32_PnPEntity")
    30. Dim device As Device
    31. For Each d As Object In devices
    32. device = New Device
    33. With Device
    34. .mClassGUID = IIf(IsDBNull(d.ClassGuid), 0, d.ClassGuid)
    35. .mDescription = IIf(IsDBNull(d.Description), 0, d.Description)
    36. .DeviceID = IIf(IsDBNull(d.DeviceID), 0, d.DeviceID)
    37. .Manufacturer = IIf(IsDBNull(d.Manufacturer), 0, d.Manufacturer)
    38. .Name = IIf(IsDBNull(d.Name), 0, d.Name)
    39. .PNPDeviceID = IIf(IsDBNull(d.PNPDeviceID), 0, d.PNPDeviceID)
    40. .Service = IIf(IsDBNull(d.Service), 0, d.Service)
    41. End With
    42. allDevices.Add(device)
    43. Next
    44. Return allDevices
    45. End Function
    46. Public Shared Function GetNonWorkingDevices() As List(Of Device)
    47. Dim pc As String = "." 'local
    48. Dim wmi As Object = GetObject("winmgmts:\\" & pc & "\root\cimv2")
    49. Dim notWorking As New List(Of Device)
    50. Dim devices As Object = wmi.ExecQuery("Select * from " & _
    51. "Win32_PnPEntity WHERE ConfigManagerErrorCode <> 0")
    52. Dim device As Device
    53. For Each d As Object In devices
    54. device = New Device
    55. With Device
    56. .mClassGUID = IIf(IsDBNull(d.ClassGuid), 0, d.ClassGuid)
    57. .mDescription = IIf(IsDBNull(d.Description), 0, d.Description)
    58. .DeviceID = IIf(IsDBNull(d.DeviceID), 0, d.DeviceID)
    59. .Manufacturer = IIf(IsDBNull(d.Manufacturer), 0, d.Manufacturer)
    60. .Name = IIf(IsDBNull(d.Name), 0, d.Name)
    61. .PNPDeviceID = IIf(IsDBNull(d.PNPDeviceID), 0, d.PNPDeviceID)
    62. .Service = IIf(IsDBNull(d.Service), 0, d.Service)
    63. End With
    64. notWorking.Add(device)
    65. Next
    66. Return notWorking
    67. End Function
    68. Public Property Description() As String
    69. Get
    70. Return mDescription
    71. End Get
    72. Set(ByVal value As String)
    73. mDescription = value
    74. End Set
    75. End Property
    76. Public Property Service() As String
    77. Get
    78. Return mService
    79. End Get
    80. Set(ByVal value As String)
    81. mService = value
    82. End Set
    83. End Property
    84. Public Property DeviceID() As String
    85. Get
    86. Return mDeviceID
    87. End Get
    88. Set(ByVal value As String)
    89. mDeviceID = value
    90. End Set
    91. End Property
    92. Public Property PNPDeviceID() As String
    93. Get
    94. Return mPNPDeviceID
    95. End Get
    96. Set(ByVal value As String)
    97. mPNPDeviceID = value
    98. End Set
    99. End Property
    100. Public Property ClassGUID() As String
    101. Get
    102. Return mClassGUID
    103. End Get
    104. Set(ByVal value As String)
    105. mClassGUID = value
    106. End Set
    107. End Property
    108. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lauwag“ ()