Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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) :rolleyes:

Geschrieben

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>

Geschrieben

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";

Geschrieben

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

Geschrieben
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!

Geschrieben

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.

Geschrieben

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!!

  • 2 Wochen später...
Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...