Hallo,
ich suche nach einer Möglichkeit in meinem Terminalprogramm nur bestimmte COM Ports als Verbindungsmöglichkeit zu erlauben.
Ich möchte da ganz gerne die "COM-Port Namen" wie sie im Windows Gerätemanager angezeigt werden nach einem bestimmten String filtern und nur diese dann als Auswahlmöglichkeit in meine GUI einbinden.
Hat mir vielleicht jemand ein paar Hints (Stichworte, URLs, etc.).
Vielen Dank
hallo zoniq,
SerialPort.GetPortNames() liefert dir ein string array, welches die Namen (zb "COM2") aller verfügbaren seriellen Ports enthält
Hey kaloon,
danke für die schnelle Antwort. Aber ich glaube ich habe mich etwas falsch ausgedrückt. Ich will eigentlich nicht nach "COM1, COM2, ..." filtern, sondern, im konkreten Fall, nach "CP210x USB to UART Bridge Controller", welcher jedes mal auf einem anderen COM Port liegen kann. Mir geht es darum, dass den Nutzern dann nur dieser COM Port angezeigt wird.
hey zoniq,
Aber ich glaube ich habe mich etwas falsch ausgedrückt. Ich will eigentlich nicht nach "COM1, COM2, ..." filtern, sondern, im konkreten Fall, nach "CP210x USB to UART Bridge Controller", welcher jedes mal auf einem anderen COM Port liegen kann.
sry, aber ich weiß jetzt leider nicht wie du diese bezeichnung bekommst. die SerialPort klasse bietet glaube ich keine entsprechenede methode - möglich sein sollte es allerdings, schon, immerhin wird die bezeichnung ja auch im device manager angezeigt 🙂
Idee?
Ja, benutz die API(am besten Die vom Wunsch-OS).
Das erlaubt guten Zugrifff...
Blöd ist nur, du sprichts von COM-Ports. erzähl mal welche .Net-version Dir nicht vorhabdebe Probleme beschert.
Möglicherweise(anscheinend) sprichst du von deinem Terminalprogramm aber nicht von Programmierung.
Ikaros: Deiner Antwort konnte ich leider nicht viel geistigen Nährwert entnehmen.
Ich benutze aktuell .NET 2.0
Der Zugriff auf die COM Ports ist nicht das Problem, sondern der Zugriff auf die Information, welche mir der Gerätemanager über die COM Ports (bzw. angeschlossenen Geräte) anzeigt.
Das mir die API das ermöglich ist schon klar. Die Frage ist nur wie. Und wenn ich die Antwort darauf wüsste oder bei meinen Recherchen gefunden hätte, würde ich nicht fragen.
Ok, folgendes Problem:
-Du liest die Geräte aus(WMI oder Win-Api, bsp. auf Codeproject).
-Du findest deinen MultiportController(schön)
-Du findest die Portliste
Dann beginnen die Probleme:
Oft aber nicht immer kann die Zugehörigkeit zum Controller herausfinden, anhand der Bezeichnung. Befinden 2 gleiche UART-Controller im Rechner sinkt die Wahrscheinlichkeit die Ports des zugehörigen Controllers zu erraten nochmals.
Aus den gegebenen Informationen ist es halt etwas schwierig zu erfahren welcher Treiber auf welchen aufsetzt.
Das geht nur über die Beschreibung, andere Daten gibt es nicht.
Bei einer einfachen Sicht(eine Karte) kann man sagen: alles über COM2 ist "meins". Blöderweise funktioniert das nicht wenn jemand auf die Idee kommt virtuelle Treiber(Com-Sharing, Com über TCP/IP) zu installieren.
Die Möglichkeit über die Bezeichnungen die Ports einer Karte zuzuordnen(die bisher mir als einzige Lösung bekannte) ist halt verdammt unzuverlässig.
Hallo,
ich habe genau das gleiche Problem, mit den Antworten hier kann ich nichts anfangen. Auch in anderen Foren leider nichts gefunden.
Ich bräuchte bitte eine Lösung (keinen Verweis auf Win API) möglichst als Code, wie ich die Portnamen bzw. Treibernamen aus dem Gerätemanager abfragen kann. Also genau die Einträge im GM unter** "Anschlüsse (COM und LPT)"** um einen oder mehrere eigene Treiber zu finden und nur diese zu verwenden und über Liste auswählbar zu machen, also kein GetPortNames!
Unter der SerialPort Klasse passt da leider nichts. In der Registry steht unter
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM auch nur "\device\VCPO = COM4".
Vielen Dank
Steffen
Die Namen sowie weitere Eigenschaften kannst du mit Hilfe der SetupAPI rausfinden. Ich würde dir aber trotzdem raten, die ganzen USB<->Seriel Wandler nicht mehr zu verwenden, sondern einen eigen µC mit USB. Dies bedeutet zwar am Anfang Mehraufwand, zahlt sich aber bald aus.
Hallo,
wir entwickeln nicht das Gerät, die Vorgabe ist nun mal ein virtueller Comport. Leider habe ich auch keine Ahnung mit der SetupAPI, bin auch kein C# Programmierer und muss das schnell nebenher mal machen, nur um den Port auszuwählen und zu initialisieren! Gibt es vielleicht wo einfache Lösungen mit der SetupAPI? Über die FDTI DLL ist das auch zu aufwendig. Vielen Dank
Steffen
Schau doch mal was du in der Registry per
RegistryKey rootKey = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Enum\\FTDIBUS");
bekommst.
Und wenn du den Namen dann da gefunden hast kannst du unter
RegistryKey rootKey = Registry.LocalMachine.OpenSubKey("HARDWARE\\DEVICEMAP\\SERIALCOMM");
Schauen ob der aktuell aktiv ist.
Hallo,
die WMI-Klasse (Namespace System.Managment) "Win32_SerialPort" , liefert alles was du brauchst.
Die Property Name liefert den Namen der auch im Gerätemanager angeben istz.B. "Kommunikationsanschluss (COM1), und DeviceID z.B. dann nur den Anschlussnamen (COM1=
using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}