WMI Wert in der Ausgabe verändern
-
- Beiträge: 105
- Registriert: Fr Mär 01, 2013 10:31 am
Re: WMI Wert in der Ausgabe verändern
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.
Re: WMI Wert in der Ausgabe verändern
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

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
Re: WMI Wert in der Ausgabe verändern
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:
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
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

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 "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
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: WMI Wert in der Ausgabe verändern
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.
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
quod erat expectandum
Re: WMI Wert in der Ausgabe verändern
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
.
Also in der XAML steht jetzt folgendes
und in der Funktion nochmal
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 ?
Denn ich kann nur ein Loaded Event einlesen (entweder Arbeitsspeicher oder Festplatte) und im Internet steht leider auch nichts genaueres

Also in der XAML steht jetzt folgendes
Code: Alles auswählen
[..] Loaded="OnLoaded">
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 ?
-
- Beiträge: 105
- Registriert: Fr Mär 01, 2013 10:31 am
Re: WMI Wert in der Ausgabe verändern
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: Denn ich kann nur ein Loaded Event einlesen (entweder Arbeitsspeicher oder Festplatte)
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?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 ?
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: WMI Wert in der Ausgabe verändern
Arbeitest du mit WPF oder WinForms?Denn ich kann nur ein Loaded Event einlesen (entweder Arbeitsspeicher oder Festplatte) und im Internet steht leider auch nichts genaueres .
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)
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum