use Win32::API; Win32::API::Struct->typedef( RECT => qw{ LONG Left; LONG Top; LONG Right; LONG Bottom; }); Win32::API->Import("User32", "int GetDesktopWindow ()"); Win32::API->Import("User32", "int GetWindowRect ( int hWnd, LPRECT lpRect)"); my $h = GetDesktopWindow(); my $r = Win32::API::Struct->new('RECT'); GetWindowRect ( $h, $r ); print "Screen Resolution : ", $r->{Right} - $r->{Left}, ' x ', $r->{Bottom} - $r->{Top}; #### use Win32::API; use Win32::API::Callback; Win32::API::Struct->typedef( RECT => qw{ LONG Left; LONG Top; LONG Right; LONG Bottom; }); Win32::API::Struct->typedef( MONITORINFO => qw{ LONG cbSize; RECT rcMonitor; RECT rcWork; LONG dwFlags; }); Win32::API->Import('User32', 'EnumDisplayMonitors', 'NPKN', 'N'); Win32::API->Import('User32', 'int GetMonitorInfoA (int hMonitor, LPMONITORINFO lpmi)'); my $MonitorEnumProc = Win32::API::Callback->new( sub { my( $hMonitor, $hdcMonitor, $lprcMonitor, $dwData) = @_; my $MI = Win32::API::Struct->new('MONITORINFO'); my $R = Win32::API::Struct->new('RECT'); $MI->{cbSize} = 40; GetMonitorInfoA ($hMonitor, $MI); print "Monitor resolution : ", $MI->{rcMonitor}->{Right} - $MI->{rcMonitor}->{Left}, ' x ', $MI->{rcMonitor}->{Bottom} - $MI->{rcMonitor}->{Top}, "\n"; return 1; }, "NNPN", "N", ); EnumDisplayMonitors ( 0x0, 0x0, $MonitorEnumProc, 0x0 );