Control Web nabízí v zabudovaném přístroji
system OCL proceduru ExecuteProgram, která
umožňuje vnořené vykonání programu operačního systému (aplikace,
řádkové příkazu, dávky). Volaný program je spuštěn, načež na ukončení
jeho vykonávání systém Control Web počká. Dokud takto
volaný program neskončí, nepokračuje procedura volající tuto funkci ve
své činnosti (a tedy nepracuje ani jiná část aplikace). Účelem funkce
je volání cizího programu, aby přitom bylo zaručeno, že program
doběhl. Právě této funkčnosti lze využít pro získání informací
vracených funkcemi skriptovacího jazyka prostředí
PowerShell. Konkrétně si to budeme demonstrovat na
zjištění stavu baterie notebooku pomocí příkazu (Get-WmiObject win32_battery).BatteryStatus.
Kód procedury může vypadat například takto:
procedure GetBatteryStatus( var Status : cardinal; var Description : string ): boolean;
var
Line : string;
StdInput : string;
StdOutput : string;
ErrorCode : longcard;
begin
if system.ExecuteProgram( 'Powershell.exe', '-command "(Get-WmiObject win32_battery).BatteryStatus"' , StdInput, StdOutput, ErrorCode ) then
Line = item( StdOutput, CRLF, 0 );
Status = Line:value_real;
switch Status of
case 1; Description = 'Battery Power';
case 2; Description = 'AC Power';
case 3; Description = 'Fully Charged';
case 4; Description = 'Low';
case 5; Description = 'Critical';
case 6; Description = 'Charging';
case 7; Description = 'Charging and High';
case 8; Description = 'Charging and Low';
case 9; Description = 'Charging and Critical';
case 10; Description = 'Undefined';
case 11; Description = 'Partially Charged';
else Description = 'Unknown'; Status = -1;
end;
return true;
else
return false;
end;
end_procedure;
Podobně lze získat i informaci o stavu nabití baterie notebooku
nebo jiné informace.
Kód procedury pro zjištění stavu nabití baterie pomocí příkazu
(Get-WmiObject win32_battery).estimatedChargeRemaining
procedure GetEstimatedChargeRemaining( var Value : real ): boolean;
var
Line : string;
StdInput : string;
StdOutput : string;
ErrorCode : longcard;
begin
if system.ExecuteProgram( 'Powershell.exe', '-command "(Get-WmiObject win32_battery).estimatedChargeRemaining"' , StdInput, StdOutput, ErrorCode ) then
Line = item( StdOutput, CRLF, 0 );
Value = Line:value_real;
return true;
else
return false;
end;
end_procedure;
Další informace o třídě Win32_Battery jsou dostupné na
stránkách firmy Microsoft zde.
Můžete si stáhnout i ukázkovou aplikaci GetBatteryInfo.
|