hallo leute,
ich habe ich vb eine funktion, die mir alle verfügbaren com
schnittstellen auflistet. jedoch nur in der form com 1, com 2, com 3...
(IO.Ports.SerialPort.GetPortNames())
ich wollte aber genau den namen des verfügbaren gerätes an der
schnittstelle.
siehe anhang!
also das ich ausgegeben bekomme "UART to USB..."
...bettina.... wrote:
> hallo leute,>> ich habe ich vb eine funktion, die mir alle verfügbaren com> schnittstellen auflistet. jedoch nur in der form com 1, com 2, com 3...> (IO.Ports.SerialPort.GetPortNames())>> ich wollte aber genau den namen des verfügbaren gerätes an der> schnittstelle.> siehe anhang!>> also das ich ausgegeben bekomme "UART to USB..."
Soweit ich weiss kannst du über die Windows API nur auf die Ordinalen
Bezeichnungen der Schnittstelle Com1, Com2 zugreifen.
Windows ist ja auch eigentlich nicht bekannt was für ein Gerät an der
Com Schnittstelle hängt. Bei mir z.B. hängt ein SCI-to-CAN Adapter an
der Com Schnittstelle und dies wird im Geräte Manager bei mir nicht
abgezeigt. Woher soll es Windows auch wissen? Wenn dann musst du einen
speziellen Treiber installieren, der Windows mitteilt, dass COM1 jetzt
nicht mehr COM1 heisst sondern
"serielle_bit_schuppser_leitung_zur_generierung_lustiger_klingeltoene"
oder so ;-)
Diese Info müsste man doch aus der jeweiligen .inf rausholen können.
Dort steht ja die VID/PID drin, die das Gerät identifiziert. Ebenso
steht dort dann auch der Name, wie das Teil im Gerätemanager angezeigt
werden soll.
Man müsste also dazu "nur" noch rausfinden, welche .inf (sofern
überhaupt vorhanden) zu welchem COM-Port gehört.
je nach VB version die du brauchst...
Bei den älteren VB versionen (noch nicht .NET) gings so:
Eine Möglichkeit durch die von dir genannte Funktion kriegst du alle
möglichen Ports. Dann schreib dir eine Routine welche versucht die Ports
zu öffnen. Falls erfolgreich, Port wieder schliessen und in Array (menu)
abfüllen. Fall nicht erfolgreich port schliessen und zum nächsten Port
gehen.
Anosnsten bemüh bitte eine Suchmaschine, hab da auch die Lösung zu
diesem Problem gefunden. Jedoch habe ich sie nicht mehr zu 100% präsent.
MFG Codehamster
na ich habe an ein avr controller mit usb ausgang am rechner. dieser
installiert einen virtuellen port (port 5). und dann steht dort halt der
name, siehe anhang "USB to UART Bridge".
ich wollte nun diesen namen dieses angeschlossenen teils in visual basic
auslesen.
...bettina.... wrote:
> na ich habe an ein avr controller mit usb ausgang am rechner. dieser> installiert einen virtuellen port (port 5). und dann steht dort halt der> name, siehe anhang "USB to UART Bridge".>> ich wollte nun diesen namen dieses angeschlossenen teils in visual basic> auslesen.
google mal nach: VB get/read virutal port names
Hallo Sebastian!
Sebastian B. wrote:
> Soweit ich weiss kannst du über die Windows API nur auf die Ordinalen> Bezeichnungen der Schnittstelle Com1, Com2 zugreifen.
Das ist falsch, für soetwas gibt es das SetupAPI. Damit geht das ganz
einfach, siehe: http://msdn.microsoft.com/en-us/library/ms791318.aspx
Hier mal ein kleines Beispiel, wie man an den FriendlyName gelangen
kann:
René König wrote:
> Hallo Sebastian!>> Sebastian B. wrote:>> Soweit ich weiss kannst du über die Windows API nur auf die Ordinalen>> Bezeichnungen der Schnittstelle Com1, Com2 zugreifen.>> Das ist falsch, für soetwas gibt es das SetupAPI. Damit geht das ganz> einfach, siehe: http://msdn.microsoft.com/en-us/library/ms791318.aspx
Hallo René, deshalb schrieb ich ja "soviel ich weiss" ;-) Aber jetzt bin
ich auch schlauer und weiss, dass es doch geht!
> Hier mal ein kleines Beispiel, wie man an den FriendlyName gelangen> kann:
Hier Bettina, René hat dir soeben die Lösung für dein Problem geliefert!
have fun
hallo ...bettina....
hast du es hingekriegt ?
ich habe nun die gleiche aufgabestellung. vollstaniger gerätename vom
seriellem port in vb.net. nun werde ich aus dem hier geschriebenen nicht
schlau.
darum möchte ich die frage noch mal stellen. wie kommt man an den
vollständigen namen von com´s.
gruss
Falls noch einer das gleiche Problem hat, hier eine Lösung die
Funktioniert:
Als erstes unter ->Projekt->Verweise hinzufügen... System.Management
hinzufügen.
Dann hier der Code:
1
Imports System.Management
2
3
Public Function GetSerial()
4
Dim queryA As String = "Select * from Win32_SerialPort"
5
Dim pd As PropertyData
6
Dim Device_Name As String = "Device-Name"
7
'Im Beispiel hier müsste dann folgendes da stehen:
8
'Dim Device_Name As String = "CP210x USB to UART Bridge Controller"
9
Dim Found_Device As Boolean = False
10
Dim Port As String = ""
11
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
If pd.Value.ToString() = Device_Name Then
19
Found_Device = True
20
Else
21
Found_Device = False
22
End If
23
End If
24
If Found_Device = True And pd.Name.ToString() = "DeviceID" Then