WMI Wert in der Ausgabe verändern

Die Programmiersprache C# und Programmierung im .NET Framework/Mono
GilbertDur
Beiträge: 105
Registriert: Fr Mär 01, 2013 10:31 am

Re: WMI Wert in der Ausgabe verändern

Beitrag von GilbertDur » Do Mär 28, 2013 7:39 am

Da muss ich cloidnerus recht geben. Du hast doch schon eine Funktion, die dir eine Wert zurückgibt. Jetzt rufe die Funktion jedes mal mit einem anderem String und jedes mal bekommst du einen anderen Wert zurück. Das ist ja auch der Sinn einer Funktion: Wiederverwendung und Vermeidung von Code-Dopplungen.

cantius
Beiträge: 11
Registriert: Sa Mär 23, 2013 7:00 pm

Re: WMI Wert in der Ausgabe verändern

Beitrag von cantius » Do Mär 28, 2013 10:15 am

Funktioniert ;)

Besten Dank. Ich dachte ich müsste in der Funktion die Parameter verändern aber so macht es ja mehr Sinn. Naja, es funktioniert ja jetzt und verstanden habe ich es auch.

Vielen Dank nochmal

cantius
Beiträge: 11
Registriert: Sa Mär 23, 2013 7:00 pm

Re: WMI Wert in der Ausgabe verändern

Beitrag von cantius » Sa Mär 30, 2013 9:21 pm

Hallo zusammen :)

ich steh mal wieder vor einem sehr merkwürdigem Problem. Folgendes, ich lese ja die Hardwareinformationen aus und übergebe diese in Labels.
Das ganze ist auch überhaupt kein Problem nur beim Arbeitsspeicher oder der Festplatte. Denn wenn ich z.B. die Größe des Arbeitsspeichers auslese und in ein Label übertrage, dann werden alle Größen von ALLEN Arbeitsspeicherriegeln angezeigt. Also dann steht da zum Beispiel sowas (85899345928589934592) in bytes natürlich.
Das stimmt auch alles. Ich habe zwei Riegel je 8 GB.

Lange Rede kurzer Sinn, das Ganze ist ja nicht wirklich übersichtlich und gefällt mir so noch nicht. (
Allerdings habe ich was im Internet gefunden, wie man mit mehreren Instanzen umgeht und zwar mit einer Dropdownliste bzw. Combobox. In dieser Liste werden alle Festplatten angezeigt und wenn man auf eine draufgeht, erscheinen die Informationen. (http://www.geekpedia.com/tutorial233_Ge ... sharp.html)

Jetzt habe ich mir den Code genommen also diesen:

Code: Alles auswählen

  public void Benchmark_Load(object sender, EventArgs e)
        {
            ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

            foreach (ManagementObject moDisk in mosDisks.Get())
            {
                cmbHdd.Items.Add(moDisk["Model"].ToString());
            }
        }

        public void cmbHdd_SelectedIndexChanged(object sender, EventArgs e)
        {
            ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Model = '" + cmbHdd.SelectedItem + "'");
            foreach (ManagementObject moDisk in mosDisks.Get())
            {
                lblType.Text = "Type: " + moDisk["MediaType"].ToString();
                lblModel.Text = "Model: " + moDisk["Model"].ToString();
                lblSerial.Text = "Serial: " + moDisk["SerialNumber"].ToString();
                lblInterface.Text = "Interface: " + moDisk["InterfaceType"].ToString();
                lblCapacity.Text = "Capacity: " + moDisk["Size"].ToString() + " bytes (" + Math.Round(((((double)Convert.ToDouble(moDisk["Size"]) / 1024) / 1024) / 1024), 2) + " GB)";
Das Programm von der Seite läuft bei mir ohne Probleme aber der Quellcode läuft in meinem Programm nicht bzw. er zeigt mir keine Geräte an :cry:
Das "Verfahren" wollte ich wohl bei den Festplatten wie auch beim Arbeitsspeicher anwenden.

Wenn jemand ein Rat hat, würde ich mich freuen ;)
Ansonsten schöne Feiertage

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: WMI Wert in der Ausgabe verändern

Beitrag von cloidnerux » So Mär 31, 2013 10:18 am

Deiner Beschreibung folgend, würde ich sagen du hast einige Dinge NICHT aus dem Beispiel übernommen.
Funktioniert denn das Eintragen der Festplatten in die Drop-Down-Liste?
Ich gehe gerade davon aus, dass du der Drop-Down-Liste nicht den Eventhandler für das SelectedIndexChanged Ereignis zugewiesen hast.
Redundanz macht wiederholen unnötig.
quod erat expectandum

cantius
Beiträge: 11
Registriert: Sa Mär 23, 2013 7:00 pm

Re: WMI Wert in der Ausgabe verändern

Beitrag von cantius » Mo Apr 01, 2013 7:47 pm

Ich weiß jetzt woran es lag, anscheind hat es was mit dem Loaded Event zu tun. Allerdings deckt das nur die Funktion der Festplatte ab, also die Funktion mit dem Arbeitsspeicher funktioniert dann nicht mehr richtig.
Denn ich kann nur ein Loaded Event einlesen (entweder Arbeitsspeicher oder Festplatte) und im Internet steht leider auch nichts genaueres :cry:.

Also in der XAML steht jetzt folgendes

Code: Alles auswählen

[..] Loaded="OnLoaded">
und in der Funktion nochmal

Code: Alles auswählen

        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            ManagementObjectSearcher ds = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

            foreach (ManagementObject d in ds.Get())
            {
                comboBoxDisks.Items.Add(d["Model"].ToString());
            }
            comboBoxDisks.SelectedIndex = 0;


private void comboBoxDisks_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ManagementObjectSearcher mosDisks = new ManagementObjectSearcher(
                "SELECT * FROM Win32_DiskDrive WHERE Model = '" + comboBoxDisks.SelectedItem + "'");

            foreach (ManagementObject disk in mosDisks.Get())
            {
                tbType.Text = disk["MediaType"].ToString();
        }

Die "Arbeitsspeicherfunktion" sieht ja genauso aus nur mit anderen Parametern, allerdings darf das Loaded Event nicht mit der Festplattenfunktion gleich sein und zwei Events kann ich ja auch nicht "einlesen". Gibts da eventuell ne alternativ Lösung ?

GilbertDur
Beiträge: 105
Registriert: Fr Mär 01, 2013 10:31 am

Re: WMI Wert in der Ausgabe verändern

Beitrag von GilbertDur » Di Apr 02, 2013 2:20 pm

cantius hat geschrieben: Denn ich kann nur ein Loaded Event einlesen (entweder Arbeitsspeicher oder Festplatte)
Das verstehe ich nicht ganz. Wieso kannst du nicht das auslesen von Arbeitsspeicher und Festplatte in jeweils eine eigene Funktion verpacken und diese dann im Loaded Event rufen?
cantius hat geschrieben: Die "Arbeitsspeicherfunktion" sieht ja genauso aus nur mit anderen Parametern, allerdings darf das Loaded Event nicht mit der Festplattenfunktion gleich sein und zwei Events kann ich ja auch nicht "einlesen". Gibts da eventuell ne alternativ Lösung ?
Was genau meinst du mit "gleich sein" und "Events einlesen" ? Kannst du vielleicht mal den Code vom Festplatte und Arbeitsspeicher einlesen posten? Also den Code, den du probiert hast und der nicht funktioniert hat?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: WMI Wert in der Ausgabe verändern

Beitrag von cloidnerux » Di Apr 02, 2013 2:46 pm

Denn ich kann nur ein Loaded Event einlesen (entweder Arbeitsspeicher oder Festplatte) und im Internet steht leider auch nichts genaueres .
Arbeitest du mit WPF oder WinForms?

Dann die Geschichte: Events werden Aufgerufen, wenn entsprechende Parameter stimmen. Das Loaded Event, wird also aufgerufen, wenn das Programm startet. Normalerweise kann man mehere Eventhandler einem Event zuweisen. Du kannst aber auch, wie schon GilbertDur geschrieben hat, einfach deine Abfragen in jeweils eigene Funktionen packen und in der Funktion für das Event aufrufen.

Zudem fehlen dir schon hier

Code: Alles auswählen

  private void OnLoaded(object sender, RoutedEventArgs e)
        {
            ManagementObjectSearcher ds = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

            foreach (ManagementObject d in ds.Get())
            {
                comboBoxDisks.Items.Add(d["Model"].ToString());
            }
            comboBoxDisks.SelectedIndex = 0;


private void comboBoxDisks_SelectionChanged(object sender, SelectionChangedEventArgs e)
Schließende Klammern. Ein Wunder das dein Code überhaupt funktioniert. Wenn du einen Block mit einer öffnenden Klammer("{") beginnst, solltest du auch zusehen, dass du den Block mit einer schließenden Klammer("}") wieder abschließt, da ansonsten deine Funktionen nicht mehr Eindeutig sind.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten