Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Eintrag aus Gerätemanager auslesen
DaNunzi
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

Eintrag aus Gerätemanager auslesen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
zommi
myCSharp.de - Member

Avatar #avatar-2617.png


Dabei seit:
Beiträge: 1.361
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
DaNunzi
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

Vielen Dank Zommi,

das ist genau das, was ich benötigt habe.
private Nachricht | Beiträge des Benutzers
schaedld
myCSharp.de - Member

Avatar #avatar-2533.jpg


Dabei seit:
Beiträge: 1.433
Herkunft: Schweiz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
DaNunzi
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

Liest nicht alle seriellen Ports aus

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

schnapp dir doch irgeneinen freien wmi-explorer und schau auf deinem rechner nach.
schaedld
myCSharp.de - Member

Avatar #avatar-2533.jpg


Dabei seit:
Beiträge: 1.433
Herkunft: Schweiz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
DaNunzi
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

Auch nicht

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.176

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
DaNunzi
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers