Servus Leute!
Ich habe folgendes Problem:
Im Gerätemanger (Windows XP) stehen bei mir derzeit unter Anschlüsse zwei Einträge für serielle Schnittstellen (COM1 und COM4).
Bisher habe ich immer alle diese Einträge über die Methode SerialPort.GetPortNames() ausgelesen und den Benutzer den entsprechenden wählen lassen.
Allerdings steht neben dem Port ja immer noch ein Name (wie z.B. "Profilic USB-to-Serial Comm Port" oder "Kommunikationsanschluss";).
Gibt es eine Möglichkeit diesen Namen dirket mit C# auszulesen?
Vielen Dank im Voraus.
Hi DaNunzi,
willkommen bei myCSharp!.
Das Abfragen geht wohl am schönsten per WMI:
using System;
using System.Collections.Generic;
using System.Management;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ManagementObjectSearcher SerialPortSearcher =
new ManagementObjectSearcher("root\\cimv2", "SELECT * FROM Win32_SerialPort");
foreach (ManagementObject SerialPort in SerialPortSearcher.Get())
Console.WriteLine("{0}:{1}", SerialPort["DeviceID"], SerialPort["Description"]);
Console.ReadLine();
}
}
}
Was es für Member gibt, siehst du in der msdn bei Win32_SerialPort.
PS: Kannst ja auch mit der "wbemtest.exe" erstmal reinschnuppern, ebenfalls mit dem "root\cimv2" namespace verbinden und dann dieselbe Anfrage "SELECT * FROM Win32_SerialPort" absetzen. Da kannste dann sehen, was für Werte so gesetzt sind und welche dich real interessieren.
beste Grüße
zommi
Und wenn Du's noch ein wenig kürzer willst, dann würd ich die Powershell anschauen.
Gibt alles über den Serialport aus
Get-WmiObject -class Win32_SerialPort
Formatierte Darstellung
Get-WmiObject -class Win32_SerialPort | Select-object Name, StatusInfo, DeviceID, Caption | Format-table
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
Nochmals Servus und danke soweit für eure Antworten.
Das hat mir schon mal super geholfen doch eure Lösungen schaffen eins nicht:
Adapter, die vortäuschen eine serielle Schnittstelle zu sein, werden nicht erkannt,
so z.B die "Profilic USB-to-Serial Comm Port" (COM4 bei mir).
Ich habe zwar rausgefunden, dass es mit
private void foo()
{
ManagementObjectSearcher USB_to_Serial = new ManagementObjectSearcher("root\\WMI",
"SELECT * FROM MSSerial_PortName";);
foreach (ManagementObject port in USB_to_Serial.Get())
{
Console.WriteLine("{0} : {1}\n", port["PortName"], port["InstanceName"]]);
}
}
funktioniert, doch leider zeigen mir die beiden Optionen "PortName" und "InstanceName" nicht die gewünschte "Description" an...
Vielleicht gibt es da noch weitere Befehle? Bei Google find ich außer deckendes mit obigen Codeschnipsel nichts weiteres.
Grüße
DaNunzi
Brauch ich immer. Generiert sogar die entsprechenden Code-Snipsel für diverse Sparchen (C#, VB.NET, VBScript)
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
Morgen Leute!
Danke für den Hinweis, dass es so einen Creator gibt - echt praktisch.
Ich habe jetzt schon mit sämtlichen Einstellungen rumgespielt, doch leider findet er mir den COM4 nur mit oben genannter Methode.
Kann es sein, das man von solchen "vorgetäuschten seriellen Schnittstellen" einfach die Description, DeviceID, ... nicht mit WIN32_SerialPort auslesen kann?
Oder habt ihr noch eine Möglichkeit gefunden?
Beste Grüße
DaNunzi
Schau mal mit "RegEdit" nach, ob die Namen in der Registry unter "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum..." stehen ("DeviceDesc").
Du müßtest dann nur noch das "..." rausfinden...
Hallo TH69.
Also ich finde den kompletten Eintrag in der Registry unter:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_067b&Pid_2303\5&34e472c2&0&1
Dies wird auch als InstanceName angegeben
Hey super, das ist dann auch die Lösung:
Ich lese den InstanceName über "MSSerial_PortName" aus und suche in der Registry nach dem Eintrag im Pfad
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\
Dort hole ich mir dann den Namen für die Schnittstelle aus DeviceDesc heraus.
Den PortName bekomme ich dann unter Device Parameters.
Nochmals vielen Dank an alle.