[Source] Webcam verbunden check

    • VB.NET

    Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von chris_2091.

      [Source] Webcam verbunden check

      Hallo,

      Mich hat es nun förmlich dazu gezwungen das hier zu posten da ich das Problem selber mal hatte:
      Prüfen ob eine Webcam vorhanden ist.

      So gehts:

      VB.NET-Quellcode

      1. Public Class Form1
      2. Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Short, ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, ByVal cbVer As Integer) As Boolean
      3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      4. LoadDeviceList()
      5. If ListBox1.Items.Count >= 1 Then
      6. MsgBox("Webcam available")
      7. Else
      8. MsgBox("No Webcam Available")
      9. End If
      10. End Sub
      11. Private Sub LoadDeviceList()
      12. Dim strName As String = Space(100)
      13. Dim strVer As String = Space(100)
      14. Dim bReturn As Boolean
      15. Dim x As Integer = 0
      16. Do
      17. bReturn = capGetDriverDescriptionA(x, strName, 100, strVer, 100)
      18. If bReturn Then ListBox1.Items.Add(strName.Trim)
      19. x += 1
      20. Loop Until bReturn = False
      21. End Sub
      22. End Class


      Sieht dann so aus:

      C# Developer
      Learning C++
      Mich würde auch mal interessieren, ob man das noch sauberer lösen könnte.
      (Auch wenn der Thread alt ist).

      Habe momentan Folgendes:


      VB.NET-Quellcode

      1. Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (wDriver As Short, lpszName As String, cbName As Integer, lpszVer As String, cbVer As Integer) As Boolean
      2. Private Function GetWebCamDevices() As List(Of String)
      3. Dim Li As New List(Of String)
      4. Dim DriverName As String = String.Empty.PadLeft(100)
      5. Dim DriverVersion As String = String.Empty.PadLeft(100)
      6. For i As Integer = 0 To 9
      7. If capGetDriverDescriptionA(CShort(i), DriverName, 100, DriverVersion, 100) Then
      8. Li.Add(DriverName.Trim)
      9. End If
      10. Next
      11. Return Li
      12. End Function


      -DllImport anstatt Declare Function hat nicht funktioniert
      -Keine Ahnung wie ich die Schleife mit Linq ersetzen könnte (Enumerable.Range.ToList.ForEach(Sub(x) hat auch nicht funktioniert).

      VB.NET-Quellcode

      1. Private Function GetWebCamDevices() As List(Of String)
      2. Dim Li As New List(Of String)
      3. Dim DriverName As String = String.Empty.PadLeft(100)
      4. Dim DriverVersion As String = String.Empty.PadLeft(100)
      5. For i As Short = 0 To Short.MaxValue
      6. If Not capGetDriverDescriptionA(i, DriverName, 100, DriverVersion, 100) Then Exit For
      7. Li.Add(DriverName.Trim)
      8. Next
      9. Return Li
      10. End Function
      ich hab das nicht nachgelesen.
      Ich dachte, den Zähler lassen wir unendlich laufen, bis die Api False zurückgibt - dann werden wir wohl alle erwischt haben.
      Und das unendlichste von Short ist halt Short.Maxvalue.

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

      Hallo zusammen,

      ich habe den Code von @ErfinderDesRades genommen und in mein Programm eingebaut, allerdings liefert die Liste unabhängig ob eine Webcam angeschlossen ist oder nicht, den Wert 1.
      Weiss jemand woran es liegen könnte?

      Der String in der Liste gibt in beiden Fällen Die Liste hat: 1 Einträge
      Der Eintrag der Webcam Liste: Microsoft WDM Image Capture (Win32) wieder.

      Hier mein Code für den Fall:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. 'Webcam-Anbindung
      2. '***********************************************************************************************************
      3. Dim webcamListe = GetWebCamDevices()
      4. If webcamListe.Count > 1 Then 'mind. eine Webcam vorhanden
      5. 'Video starten'
      6. videoHandle = Me.CreateCaptureWindow(PictureBoxWebcam.Handle)
      7. Else 'keine Webcam vorhanden -> Webcam Bereich wird ausgeblendet
      8. PictureBoxWebcam.Visible = False
      9. End If
      10. Console.WriteLine("Die Liste hat: " + webcamListe.Count.ToString + " Einträge")
      11. Console.WriteLine("Der Eintrag der Webcam Liste: " + webcamListe.Item(0).ToString)