#perl -w
use Test::More;
if ($^O ne "MSWin32" and $^O ne "cygwin") {
plan skip_all => 'Windows specific tests';
} else {
plan tests => 12;
}
use Cwd;
use FFI;
use FFI::Library;
ok $kernel32 = FFI::Library->new("kernel32");
ok $user32 = FFI::Library->new("user32");
ok $GetCurrentDirectory = $kernel32->function('GetCurrentDirectoryA', 'sIIp');
ok $GetWindowsDirectory = $kernel32->function('GetWindowsDirectoryA', 'sIpI');
ok $GetModuleHandle = $kernel32->function('GetModuleHandleA', 'sII');
ok $GetModuleFileName = $kernel32->function('GetModuleFileNameA', 'sIIpI');
$d = ' ' x 200;
$n = $GetCurrentDirectory->(200, $d);
$d = substr($d, 0, $n);
($cwd = cwd) =~ s#/#\\#g;
$cwd = Win32::GetCwd() if $^O eq "cygwin";
is $d, $cwd;
$d = ' ' x 200;
$n = $GetWindowsDirectory->($d, 200);
$d = substr($d, 0, $n);
ok -d $d;
ok $h = $GetModuleHandle->(0);
$d = ' ' x 200;
$n = $GetModuleFileName->($h, $d, 200);
$d = substr($d, 0, $n);
$exp = $^O eq "MSWin32" ? $^X : Cygwin::posix_to_win_path($^X);
is $d, $exp;
$EnumWindows = $user32->function("EnumWindows", 'sIII');
$window_count = 0;
$callback_ok = 1;
# Callback
$cb = FFI::callback('sIII', sub {
my ($hwnd, $lparam) = @_;
$callback_ok = 0 unless $lparam == 12;
++$window_count;
1;
});
$EnumWindows->($cb->addr(), 12);
ok $callback_ok;
ok $window_count > 0;