Seite 1 von 2
WMI Wert in der Ausgabe verändern
Verfasst: Di Mär 26, 2013 2:26 pm
von cantius
Hallo ihr Kanarienvögel
Ich habe eine kurze Frage. Ich habe die WMI Werte vom Prozessor ausgelesen (Code unten) und auch in einer Textbox ausgegeben. Das klappt auch alles wunderbar.
In meinem Fall gibt er bei Name:
Intel(R) Core(TM) i5-3570K CPU @ 3.40Ghz aus.
Allerdings möchte ich erstmal nur den Namen alleine haben, also
Intel Core i5-3570K gibts da Möglichkeiten diesen Wert zu verändern, in der Textbox wohlbemerkt.
Achja, den Wert KÖNNTE ich auch aus der Registry lesen. Vielleicht würde das ja sogar noch einfacher gehen, den zu ändern.
Danke
Code: Alles auswählen
public string InfProzessor()
{
ManagementObjectSearcher searcher = new
ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor");
StringBuilder sb = new StringBuilder();
foreach (ManagementObject wmi in searcher.Get())
{
try
{
sb.Append (wmi.GetPropertyValue("Name").ToString() +
Environment.NewLine);
}
catch
{
return sb.ToString();
}
}
return sb.ToString();
}
Re: WMI Wert in der Ausgabe verändern
Verfasst: Di Mär 26, 2013 3:00 pm
von cloidnerux
Sobald du nen String hast, kannst du ihn auch wie ein String behandeln und entsprechend verändern. Sprich ungewollte Zeichen rausschmeißen, abschneiden, etc. Ein deinem Fall müssen alle "(R)" und "(TM)" dran glauben und vor dem "@" muss abgeschnitten werden.
Schau dir dazu die Beschreibungen und entsprechende Fachliteratur an
Sowas z.B:
http://msdn.microsoft.com/de-de/library ... s.80).aspx
Dürfte ja nicht all zu kompliziert sein.
Re: WMI Wert in der Ausgabe verändern
Verfasst: Mi Mär 27, 2013 1:37 am
von cantius
Vielen Vielen Dank
cloidnerux hat mir weiter geholfen
Hätte ich eigentlich auch selber drauf kommen können, tschuldigung

Re: WMI Wert in der Ausgabe verändern
Verfasst: Mi Mär 27, 2013 9:20 am
von cloidnerux
Hätte ich eigentlich auch selber drauf kommen können, tschuldigung
Kein Grund sich zu entschuldigen, manchmal sieht man den Wald vor lauter Bäumen nicht.
Re: WMI Wert in der Ausgabe verändern
Verfasst: Mi Mär 27, 2013 3:10 pm
von cantius
Ich hätte da noch eine weitere Frage. Eigentlich möchte ich gar nicht so viel nachfragen aber ich bin doch sehr ungeduldig wenn es um Probleme geht
Im Prinzip sollte es ganz einfach sein, da es sich EIGENTLICH immer wiederholt. Also ich lese ja die Werte mit folgendem Code aus.
Code: Alles auswählen
public string InfProzessor() {
ManagementObjectSearcher searcher = new
ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor");
StringBuilder sb = new StringBuilder();
foreach (ManagementObject wmi in searcher.Get()) {
try {
sb.Append(wmi.GetPropertyValue("Name").ToString() +
Environment.NewLine);
catch
{
return sb.ToString();
}
}
return sb.ToString();
}
Diesen Wert übergebe ich dann einem Label
Ich hatte das bei der nächsten Abfrage dann vorher so "gelöst", dass ich
alles nochmal kopiert habe und dann nur die Parameter verändert habe.
Code: Alles auswählen
sb.Append(wmi.GetPropertyValue("CurrentVoltage").ToString() +
Environment.NewLine);
Wenn ich jetzt aber 20 Abfragen habe wird das ja ein verdammt langer Code und das möchte ich eigentlich vermeiden. Meine Idee war es jetzt, dass ich die nächste Abfrage (Die Spannung des Prozessors) auch in die Schleife setzte und dann ein anderes Label zuweise.
Das geht aber nicht da er dem Label2 genau das gleiche übergibt wie im Label1. Ist ja eigentlich auch klar
Wie bekomme ich das also hin, dass er die Spannung in Label2 übergibt und die Abfrage dabei in der selben Schleife liegt.
Ich habe es auch selber versucht aber das ging alles nach hinten los.
Ich bin für jede Hilfe dankbar

Re: WMI Wert in der Ausgabe verändern
Verfasst: Mi Mär 27, 2013 4:05 pm
von GilbertDur
Kannst du mal den Schleifen-Code posten? Sonst fällt es mir gerade schwer dein Problem zu sehen

Re: WMI Wert in der Ausgabe verändern
Verfasst: Mi Mär 27, 2013 4:12 pm
von cantius
Code: Alles auswählen
foreach (ManagementObject wmi in searcher.Get())
{
try
{
sb.Append (wmi.GetPropertyValue("Name").ToString() +
Environment.NewLine);
}
catch
{
return sb.ToString();
}
}
return sb.ToString();
}
Eigentlich hatte ich die Schleife ja mit dabei geschrieben aber macht ja nichts
Kann man denn im return mehrere Werte zurückgeben, weil falls nicht, dann wäre das ganze ja überhaupt nicht machbar aber vielleicht mach ich mir das einfach zu schwer
Re: WMI Wert in der Ausgabe verändern
Verfasst: Mi Mär 27, 2013 4:30 pm
von cloidnerux
Wenn du deiner Funktion als Parameter einen String übergibst, der dem Namen des gesuchten Objektes entspricht und dann Statt z.B nach "CurrentVoltage" direkt suchst, den Parameter einsetzt:
Code: Alles auswählen
public string WmiInfo(string name) {
ManagementObjectSearcher searcher = new
ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor");
StringBuilder sb = new StringBuilder();
foreach (ManagementObject wmi in searcher.Get()) {
try {
sb.Append(wmi.GetPropertyValue(name).ToString() +
Environment.NewLine);
catch
{
return sb.ToString();
}
}
return sb.ToString();
}
Und dann einfach Parametrisiert aufrufen:
Das sollte dein Problem lösen.
Re: WMI Wert in der Ausgabe verändern
Verfasst: Mi Mär 27, 2013 5:06 pm
von cantius
Das funktioniert soweit, allerdings wollte ich das wohl gerne das die Spannung und noch andere Abfragen, in dieser einen Funktionen sind. Das ich also nur eine Funktion habe. Ich hab das jetzt so ..
Code: Alles auswählen
public string WmiInfo(string name, string spannung)
{
ManagementObjectSearcher searcher = new
ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor");
StringBuilder sb = new StringBuilder();
foreach (ManagementObject wmi in searcher.Get())
{
try {
sb.Append(wmi.GetPropertyValue(name).ToString() +
Environment.NewLine);
sb.Append(wmi.GetPropertyValue(spannung).ToString() +
Environment.NewLine);
}
catch
{
return sb.ToString();
}
}
return sb.ToString();
Code: Alles auswählen
this.lblCPU.Text += WmiInfo("Name")
this.lblSpannung.Text += WmiInfo("CurrentVoltage");
Brauch ich jetzt noch einen zweiten Stringbuilder ? Wie läuft das denn dann mit dem return ?
Re: WMI Wert in der Ausgabe verändern
Verfasst: Mi Mär 27, 2013 9:35 pm
von cloidnerux
Brauch ich jetzt noch einen zweiten Stringbuilder ? Wie läuft das denn dann mit dem return ?
Du machst es dir zu kompliziert, weil du es dir falsch vorstellst.
Wenn du dir
anschaust, siehst du, dass es einen String haben möchte, der das Element spezifiziert, dass du haben willst. In deinem Fall ist das "Name". Alles was in C# in Anführungszeichen ist, ist vom Typ string.
Die Idee ist nun also, statt jedes mal eine Funktion zu schreiben, wo du das Element in der Funktion spezifizierst, der Funktion einen Parameter zu geben, mit dem du das machen kannst.
Also statt in der Funktion direkt z.B nach "Name" zu suchen, soll beim Aufruf der Funktion erst festgelegt werden:
Code: Alles auswählen
WmiInfo("Name"); //Liefert dir den Namen des Prozessors
WmiInfo("CurrentVoltage"); //Liefert dir die Spannung
Daher brauchst du keinen zweiten Funktionsparameter oder weitere Stringbuilder oder ähnliches.
wmi.GetPropertyValue erwartet einen String, also gibst du ihm einen. Es wird ein String zurückgegeben, also wird er auch als solcher behandelt. Fertig. Orientiere dich nicht am Inhalt, sondern am Typ. Was wird gefordert und was kommt zurück.
MfG cloidnerux.