Laden...

Eintrag aus Gerätemanager auslesen

Erstellt von DaNunzi vor 14 Jahren Letzter Beitrag vor 14 Jahren 11.335 Views
D
DaNunzi Themenstarter:in
5 Beiträge seit 2010
vor 14 Jahren
Eintrag aus Gerätemanager auslesen

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.

1.361 Beiträge seit 2007
vor 14 Jahren

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

D
DaNunzi Themenstarter:in
5 Beiträge seit 2010
vor 14 Jahren

Vielen Dank Zommi,

das ist genau das, was ich benötigt habe.

1.433 Beiträge seit 2006
vor 14 Jahren

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

D
DaNunzi Themenstarter:in
5 Beiträge seit 2010
vor 14 Jahren
Liest nicht alle seriellen Ports aus

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

Gelöschter Account
vor 14 Jahren

schnapp dir doch irgeneinen freien wmi-explorer und schau auf deinem rechner nach.

1.433 Beiträge seit 2006
vor 14 Jahren

WMI Code Creator v1.0

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

D
DaNunzi Themenstarter:in
5 Beiträge seit 2010
vor 14 Jahren
Auch nicht

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

4.931 Beiträge seit 2008
vor 14 Jahren

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...

D
DaNunzi Themenstarter:in
5 Beiträge seit 2010
vor 14 Jahren

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.