バッテリーレベルを調べるスクリプト

どうも最近、バッテリーが50%あたりから5%あたりまで一気に減るので、
しばらく計ってみることにする。が、手頃なものが見つけられないので。

cygwinperl 5.8.7で動作確認

#!/usr/bin/perl

use strict;
use Win32::API;

if($ARGV[0] eq '--loop') {
	$| = 1;
	while(1) {
		get_battery_info();
		sleep(60);
	}
} else {
	get_battery_info();
}

sub get_battery_info {
	my $getInfo = new Win32::API("kernel32", "GetSystemPowerStatus", 'P', '');
	
	my $data = ' ' x 12;
	$getInfo->Call($data);
	
	my($ac, $bf, $blp, $xx) = unpack('C*', substr($data, 0, 4));
	
	my %ac = (0=>'OK', 1=>'NG');
	$ac = $ac{$ac} || '?';
	
	my @bf_str = qw(High Low Critical Charging x x x NoBattery);
	my @bf_dat = unpack('B8', $bf);
	$bf = join(' ', map {$bf_dat[$_]?$bf_str[$_]:''} (0 .. 7));
	
	my @now = localtime();
	printf("%04u-%02u-%02u %02u:%02u:%02u ", 1900+$now[5], 1+$now[4], @now[3,2,1,0]);
	print "AC: $ac\tBat: $bf\tBatLife: $blp %\n";
}