Hi all, wie kann man erkennen, ob ein "klassischer" Com-Port oder ein Serial_Via_Usb-Adapter am Pc angeschlossen ist bzw. verwendet wird? Gibt es eine Möglichkeit, dieses heraus zu bekommen (evtl. via API-Funktionen)? Betriebssysteme: Windows XP, Windows Vista, Windows 7 Programiersprachen: Vb6, C#, Vb.net Viele Dank Klaus
Hallo, also ich habe gerade zwei dieser Teile bei mir angeschlossen und diese dann auch noch über eine Brücke miteinander verbunden, damit ich mit mir selbst kommunizieren kann. Beide werden im Geräte-Manager angezeigt. Einfach Windows Pause drücken und dann unter Hardware den Geräte Manager anklicken. Dort kannst du dann "Anschlüsse (COM und LPT)" erweitern. Bei mir werden die Anschlüsse dann als "USB Serial Port (COMx)" angezeigt. Ich hoffe das war was du gesucht hast. Viele Grüße malzu
Hi malzu, sorry das ich mich ungenau ausgedrückt habe. Leider ist Deine Methode nicht das was ich brauche. Ich habe ein selbst geschriebenes Programm. Dieses Programm soll nun erkennen, ob der angeschlossene Com-Port ein "klassischer" oder ein "serial via usb" ist. Beispiel: Vb6 Ich verwende das MScomm32.ocx. Dieses Ocx kann zwar Com 1 bis 16 handeln, aber es erkennt (leider) nicht das oben geforderte. Beispiel: C# bzw. vb.net Ich verwende System.IO.Ports.SerialPort . Auch hier erkenne ich nicht, ob ich einen "klassischen"- oder "serial via usb"-Port verwende. Ich habe bis heute nicht herausbekommen, wie ich an diese Information heran komme. Bye Klaus
Eigentlich ist das auch der Sinn der Sache: aus Sicht der Anwendung und der angeschlossenen Geräte soll man möglichst keinen Unterschied zu einer "echten" RS232 merken...
du könntest mal in die registry schauen...dort stehen unter hkey_local_machine/hardware/devicemap/serialports die im Moment vorhandenen Ports, und bei mir kann man anhand vom Namen zwischen "echtem" und virtuellem Port unterscheiden...
> Eigentlich ist das auch der Sinn der Sache: aus Sicht der Anwendung und > der angeschlossenen Geräte soll man möglichst keinen Unterschied zu > einer "echten" RS232 merken... Eigentlich ja, aber da das USB das Timing etwas "verbastelt" (wegen dem USB Polling), muss man u.U. Timeouts oder das Protokoll abhängig vom Port (USB oder interner) anpassen. Oder man macht sich als Programmierer das Leben einfach und öffnet nur ein Fenster "Dies ist leider kein kompatibler COM Port" -> "Tschüss" ;-)
Hi Ihr, klar Uwe, du hast normalerweise Recht. Der Anwendung sollte (muss) es egal sein, welche "ComPort-Art" sie verwendet. Leider macht das USB immer wieder Timming Probleme. Justus, diese Methode verwende ich zum Erkennen der angeschlossenne Com-Ports bei dem VB6-Programm. Leider kann ich den bei mir eingetragenen Namen, z.B. \Device\Serial0 oder \Device\F5U103UD0 oder \Device\Nmserial1, nicht eindeutig auf auf einen klassischen oder serial-via-usb Port schliessen. Bye Klaus
Andere Möglichkeit wäre für die bekannten Kandidaten FTDI, Silabs und Prolific die entsprechenden Registry-Zweige zu (durch)suchen und zu schauen, ob die virtuellen COM da drin sind. Bei FTDI wäre das der HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS Zweig, in dem alle installierten FTDI Devices aufgelistet werden. Da stehen in den Untereinträgen auch die zugeordneten COM drin.
Hab den Quellcode hier nicht vorliegen, daher nur eine grobe Beschreibung (Rest siehe Links) // GUID erzeugen SetupDiClassGuidsFromName("Ports", ...) // die entsprechenden Informationen besorgen SetupDiGetClassDevs(...) // Aufzählen SetupDiEnumDeviceInterfaces(...) // Untersuchen SetupDiGetDeviceInterfaceDetail(...) Bei der letzten Funktion kommt dann auch ein DevicePath raus der bei USB->Seriell-Wandlern mit \\?\usb beginnen sollte. http://www.naughter.com/enumser.html http://stackoverflow.com/questions/571229/why-do-some-devices-not-enumerate-with-setupdigetdeviceinterfacedetail
Hi All. Merci für die schelle Antwort. Arc Net ich werde die Api-Funktionen mal testen. Bye Klaus
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.