Forum: PC-Programmierung Seriell Comport Device ermittel. VB.NET 10


von Holger (Gast)


Lesenswert?

Mit VISUAL BASIC EXPESS 10 will das Comport Device ermittel.

Ich habe aber noch andere Comports COM10,COM6 …als Bluethooth usw.
Die sind aber keine echten RS232 Devices.
Den Vergleich habe ich mit dem Device Namen "Silicon Labs CP210x USB to 
UART Bridge" als COM1 ermittelt.
Jetz habe ich mir gedacht nur den Rest des Strings auf „Bridge“ zu 
verleichen, und somit auch zB. FTDI RS232 Devices zu
eritteln.  FTDI USB to UART Bridge
Ist am Ende immer der Trigger-Sting    ::::: „UART Bridge“ für ein 
Serielles RS232 DEVICE ???
######################################################################## 
#########################
                    brLapDevice_Name = pd.Value.ToString() ' copy
                   If InStr(brLapDevice_Name, "Bridge") Then ’ Nur das 
Ende Verleichen
######################################################################## 
##########################
Hier der Code der mit dem "Silicon Labs CP210x USB to UART Bridge" 
funktioniert
1
 
2
' Als erstes unter ->Projekt->Verweise hinzufügen... System.Management
3
' Imports System.Management
4
‘**************************************************************************************************
5
Public Function Scan_Serial_RS232_Device() As String
6
        ' Dim LapDevice_Name As String = "Silicon Labs CP210x USB to UART Bridge"
7
        Dim brLapDevice_Name As String ' = "Bridge" trigger-Sting    
8
        Dim queryA As String = "Select * from Win32_SerialPort"
9
        Dim pd As PropertyData
10
        Dim Found_Device As Boolean = False
11
        Dim Port As String = ""
12
        Dim mos As ManagementObjectSearcher = New ManagementObjectSearcher(queryA)
13
        Dim moc As ManagementObjectCollection = mos.Get()
14
        For Each mo As ManagementObject In moc
15
            For Each pd In mo.Properties
16
                On Error Resume Next
17
                If pd.Name.ToString() = "Description" Then
18
                    brLapDevice_Name = pd.Value.ToString() ' copy
19
                   If InStr(brLapDevice_Name, "Bridge") Then ’ Nur das Ende Verleichen 
20
                        Found_Device = True
21
                    Else
22
                        Found_Device = False
23
                    End If
24
                End If
25
                If Found_Device = True And pd.Name.ToString() = "DeviceID" Then
26
                    Port = pd.Value.ToString()
27
                    mos.Dispose()
28
                    moc.Dispose()
29
                    GC.Collect()
30
                    Return Port ' COM1 
31
                End If
32
            Next
33
        Next
34
        mos.Dispose()
35
        moc.Dispose()
36
        GC.Collect()
37
        Return "Device Not Found"
38
    End Function
Ich suche nach einer Lösung die mir genau ermittelt
Welche echten USB RS232 BRIDGES, oder Hardware RS232 Ports
vorhanden sind.
Gruss Holger.

von Peter II (Gast)


Lesenswert?

> Ich habe aber noch andere Comports COM10,COM6 …als Bluethooth usw.
> Die sind aber keine echten RS232 Devices.
die sind genauso echt wie USB2RS232 Port. Es sind von der Softwareseite 
echte COM-Ports. Jedes Gerät kann sich nennen wie es will. Damit sollte 
klar sein das es dafür keine Lösung gibt.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

niemand kann dir garantieren, dass irgendein Chinese Bridge am Ende des 
Namens verwendet. Es gibt sicher Hunderte Hersteller von 
USB-COM-Adaptern.

Im Ich-bin-doch-nicht-geil-Markt wirst du auch kaum was anderes finden.

Gruss Reinhard

PS was ist denn für dich ein "echtes" RS232-Device??

von bluppdidupp (Gast)


Lesenswert?

...über die HardwareID könnte man zumindest zwischen PCI/USB/... 
unterscheiden.
Hier fällt die als Nebenprodukt an:
http://stackoverflow.com/questions/304986/how-do-i-get-the-friendly-name-of-a-com-port-in-windows
Hier steht wie so ne Hardware-ID aussieht:
http://msdn.microsoft.com/en-us/library/windows/hardware/ff541230%28v=vs.85%29.aspx

...wozu das allerdings gut sein soll ist fraglich ;D

von Holger (Gast)


Lesenswert?

Danke für alle Hinweise !
Damit die Drahtlosen BLUETHOOTH COM-Ports rausgefiltert werden.
#########################################################
Link zum Aufbau der Registry:
http://www.logview.info/cms/d_deinstallation.phtml
#########################################################
Also doch besser mit der Registry suchen, hat das schon einer
mit VB.NET 10 unterstrichen gemacht ????
(bei Default) : Ports (COM & LPT).
Der Unterschlüssel  unterstrichen 0049
1
 
2
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\
3
{4D36E978-E325-11CE-BFC1-08002BE10318}\0049
4
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Class\
5
{4D36E978-E325-11CE-BFC1-08002BE10318}\0049
6
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\
7
{4D36E978-E325-11CE-BFC1-08002BE10318}\0049
8
Dies ist auch ein sehr interessanter Eintrag. Zunächst mal der Klassen Eintrag. Dieser Wert kann durchaus auf unterschiedlichen System variieren. Wenn man diesen Schlüssle anklickt bekommt man aber im rechten Feld in Regedit den Klassentyp angezeigt (bei Default) : Ports (COM & LPT). Hier werden alle im System verfügbaren Ports eingetragen. Also genau der Bereich der uns auch interessiert. 
9
Der Unterschlüssel  0049 kann auch von System zu System unterschiedlich sein. Aber der Inhalt (sichbar auf der rechten Seite in Regedit) muss Einträge beinhalten mit SiLabs und / oder CP210. Wenn dem so ist löschen wir nur 0049 und NICHT den Hauptschlüssel !!! Sonst würde man sich alle Ports im System killen ... Also hier mit Obacht vorgehen!
10
Es ist nicht ausgeschlossen das unter dem Hauptschlüssel mehrere Einträge mit CP210 zu finden sind. Die sind dann natürlich alle zu löschen! …..
Gruss Holger !

von Peter II (Gast)


Lesenswert?

Holger schrieb:
> Damit die Drahtlosen BLUETHOOTH COM-Ports rausgefiltert werden.

warum das denn, eventuell möchte jemand demnächst deine Software mit 
einer RS232 Bluetooth Bridge betreiben. Damit geht das dann nicht mehr, 
nur weil du jetzt denkst das du diese Comports nichts sehen willst.

von Ranko (Gast)


Lesenswert?

Damit sich der Kreis wieder schliesst zurück zum Anfang, nur das auch 
virtuelle Com's erkannt werden:

        Dim mos As ManagementObjectSearcher = New 
ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE 
ConfigManagerErrorCode = 0")
        Dim moc As ManagementObjectCollection = mos.Get()

        For Each mo As ManagementObject In moc
            For Each pd In mo.Properties
                Try
                    If Not (pd.Value Is Nothing) AndAlso 
pd.Value.ToString.Contains("(COM") AndAlso 
pd.Name.ToString.Contains("Caption") Then
                        Debug.Print(pd.Name & " : ")
                        Debug.Print(pd.Value.ToString)
                    End If

                Catch ex As Exception
                    Continue For
                End Try
            Next
        Next

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.