PerlでWin32::APIのSetLocalTimeを使う
Perlでシステム時計の日時を変更できないかなー、と思いついていろいろ調べてみる。
どうやらWin32APIのSetLocalTimeを使うとできるらしい。
参考)
http://msdn.microsoft.com/ja-jp/library/cc429941.aspx
http://dobon.net/vb/dotnet/system/setlocaltime.html
んじゃ、これやっぱPerlでもできるんじゃないかってことで、いろいろ試したらできたので覚え書き。
use strict;
use Win32::API;
Win32::API::Struct->typedef( ‘TIMESTRUCT’ => qw(
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
) ) or die "typedef struct TIMESTRUCT failed: [$!]\n";
my $ret = Win32::API->Import( ‘Kernel32.dll’, ‘BOOL SetLocalTime( LPTIMESTRUCT time )’ );
die "Import Win32API SetLocalTime failed: [$!]\n" unless $ret;
my $timeVar = Win32::API::Struct->new( ‘TIMESTRUCT’ );
$timeVar->{ ‘wYear’ } = 2009;
$timeVar->{ ‘wMonth’ } = 5;
$timeVar->{ ‘wDay’ } = 10;
$ret = SetLocalTime( $timeVar );
die "SetLocalTime failed: [$!]\n" unless $ret;
これでNTPサーバとの同期なんかもできそう。
コメントを残す