MrsSchluchti Geschrieben 6. Mai 2002 Geschrieben 6. Mai 2002 Hi @all! Kann mir jemand einen Tip geben, wie man bei Notebooks auf Ende (oder Fast-Ende) der Batterie abfragen kann. Betriebssystem ist immer XP. Das ganze soll unter WSH mit VBS geschrieben werden. :confused: Es soll ein Programm zum Prüfen der Batterie-Lebenszeit werden und ich muss halt kurz vor Schluss noch Daten abspeichern. (Ich weiss, es gibt genug Programme dafür und ich weiss auch, das WSH dafür nicht gerade optimal ist, aber sagt das meinem Chef! Also bitte keine Kommentare in der Hinsicht) Zitieren
orsino Geschrieben 10. Mai 2002 Geschrieben 10. Mai 2002 Das geht wohl am besten mit WMI (Windows Management Instrumentation). Sieh dir mal die Klasse Win32_Battery an. Die BatteryStatus Eigenschaft enthält Informationen über den Ladezustand. In der MSDN solltest du alles über WMI finden und die WSH Hilfe hat auch ein kleines Beispiel. hier ein kleines test wsf (ich habe nur einen Desktop PC ohne Batterie, weiß also nicht, ob es auf einem notebook funktioniert) <job id="main"> <script language="JScript"> // var oTest = GetObject("WinMgmts:").InstancesOf ("Win32_Battery"); var oBattery = GetObject("WinMgmts:Win32_Battery"); var msg = new String(); var enumProps = new Enumerator(oBattery.Properties_); for (; !enumProps.atEnd(); enumProps.moveNext() ) { var prop = enumProps.item(); msg += prop.Name + " : " + prop.Value + "\n"; } WScript.Echo(msg); </script> <script language="VBScript"> Set oBattery = GetObject("WinMgmts:Win32_Battery") Dim msg Dim prop For Each prop in oBattery.Properties_ msg = msg & prop.Name & " : " & prop.Value & vbcrlf next WScript.Echo(msg) </script> </job> Zitieren
MrsSchluchti Geschrieben 12. Mai 2002 Autor Geschrieben 12. Mai 2002 Danke! Werd's morgen in der Firma gleich testen! Zitieren
MrsSchluchti Geschrieben 13. Mai 2002 Autor Geschrieben 13. Mai 2002 Hi orsino! So, ich habs getestet. Liefert mir zwar den Namen von den einzelnen Informationen, aber prop.Value liefert immer einem NULL-Wert zurück (bei allen Infos). Wenn ich mit TypeName den Datentyp ermitteln will, dasselbe: nur NULL-Wert. Übrigens hast Du im JS-Teil einen Fehler drin. Ein "+" zuviel. Original geschrieben von orsino msg += prop.Name + " : " + prop.Value + "\n"; Es muss heissen: msg = prop.Name + ":" + prop.Value + "\n"; Zitieren
orsino Geschrieben 13. Mai 2002 Geschrieben 13. Mai 2002 Hab mir fast gedacht, dass es nicht gehen wird. Man muss sich wahrscheinlich über instancesOf(classname) alle vorhanden Batterien holen. Im Script war eine auskommentierte oTest Variable die das macht. Ich hab das ganze mal für die Klasse DesktopMonitor ausprobiert und dann klappt es mit instancesOf. Mit dem folgenden Script sollte es funktionieren. job id="main"> <script language="JScript"> function ShowDevices(instances, className) { var enumInstances = new Enumerator(instances); for ( ; !enumInstances.atEnd(); enumInstances.moveNext() ) { var oDevice = enumInstances.item(); var msg = new String(); var enumProps = new Enumerator(oDevice.Properties_); for (; !enumProps.atEnd(); enumProps.moveNext() ) { var prop = enumProps.item(); msg += prop.Name + " : " + prop.Value + "\n"; // same as msg = msg + prop.Name + " : " + prop.Value + "\n"; } oShell.Popup(msg, 0, className + " Device", 0); } } //main var oShell = new ActiveXObject("WScript.Shell"); // Monitors should work var oMonitors = GetObject("WinMgmts:").InstancesOf ("Win32_DesktopMonitor"); ShowDevices(oMonitors, "Monitor"); // same for battery var oBatteries = GetObject("WinMgmts:").InstancesOf ("Win32_Battery"); if (oBatteries.Count == 0) WScript.Echo("No Batteries available"); else ShowDevices(oBatteries, "Battery"); </script> </job> Wenn nur eine Batterie gefunden wird, dann kannst du auf den for loop verzichten und direkt mit var oBattery = new Enumerator(oBatteries).item(0) arbeiten. msg += "noch was ..."; += ist der so genannte Addition Assignment Operator in JScript. result += expression entspricht result = result + expression Zitieren
MrsSchluchti Geschrieben 14. Mai 2002 Autor Geschrieben 14. Mai 2002 Original geschrieben von orsino msg += "noch was ..."; += ist der so genannte Addition Assignment Operator in JScript. result += expression entspricht result = result + expression Bei mir wurde Fehler angezeigt. Aber ich bin in JS auch alles andere als fit. Drum werd ich auch das Script für die Batterieanzeige in VBS umschreiben (auch weils mein Chef so will). Rückmeldung, obs funktioniert, dauert etwas, weil ich vorher noch was andres machen muss. Bis dann und Danke! Hast mir auf jeden Fall schon ein ganzes Stück weitergeholfen! Zitieren
orsino Geschrieben 14. Mai 2002 Geschrieben 14. Mai 2002 Was kommt denn für ein Fehler? Ein Syntax Fehler oder ein Laufzeitfehler? Und an welcher Stelle? An dem += kanns wohl kaum liegen, das sollte jede script engine verstehen. Ich hab hier noch mal den link in der msdn. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/js56jsopraddequ.asp Auf XP müsste die aktuelle version des WSH (5.6) installiert sein. Ich hab das script einfach mit copy und paste übertragen, also sollte es auf jeden Fall funktionieren. Wenn du es in ein file überträgst, dann muss es die Endung wsf haben, js wird nicht funktionieren. In einem js file musst du erst die tags job und script am Anfang und am Ende entfernen. Es wäre auf jeden Fall sinnvoll zu testen ob die Batterie erkannt wird bevor du es in vb überträgst. Zitieren
MrsSchluchti Geschrieben 14. Mai 2002 Autor Geschrieben 14. Mai 2002 war laufzeit-fehler. vielleicht hatte ich mich ja auch vertippt, aber ohne + gings (bis auf die Value-Anzeige). Das mit den Dateiendungen ist mir schon klar, auch dass ich job und script weglassen muss. Als Endung verwende ich mit VBS übrigens .vbs. Und natürlich test ich erst, bevor ich in VBS umschreibe. Aber erst morgen. Ich mach jetzt FEIERABEND!! Zitieren
Andrups Geschrieben 22. Mai 2002 Geschrieben 22. Mai 2002 hi! ich kenne mich mit wsh nicht aus... aber kannst Du da auch ocx-dateien einbinden? wenn ja, dann gibt es ein ocx von microsoft, was genau diese informationen (ob gerade am netz angeschlossen oder akkubetrieb, status des akkus, 'füllstand' des akkus usw.)... das heisst glaub ich mssysinfo.ocx oder nur sysinfo.ocx... müsst ich @home nochmal schauen. aber weis ja gar nicht, ob das in wsh möglich ist... cu Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.