in reply to How Do I Select An Area of the Win32 Desktop and Return Its Size and Location?

Many thanks for the useful pointers.

For now, I've opted for the simplest way out and have built something that lets me manipulate a standard window; I can use it to 'block out' the area of interest on the desktop and it returns the X11-style attributes of the window. Code follows:-

# -------------------------------------------------------------------- +------- # xrselw32.pl - Use a resizable window to define a desktop monitoring + area # jjg, 5-Aug-2016 # # Description: # A quick'n'dirty tool to allow me to use a standard # Windows resizable 'Window' to block-out a region # of the desktop and return the location in an X11 # 'WxH+X+Y' format. # # Notes: # 1. I can't work-out how to place buttons and other # objects within the window (there doesn't seem to be # any Tk-like concept of 'pack' or similar in Win32::GUI), # so I took the KISS approach and have left the system # menu(s) on the main window; this allows me to use a # single button to accept the window and use the # "system menu" and '[X]' window button to act as a # 'Cancel' button. # # 2. I also can't work-out how to properly communicate # 'outside' of the Dialog 'monitoring' thing other than # through the use of global variables = kludge. Hence, # I'll make this whole silly thing an external tool, much # the same as I do with the linux version. Inefficient # but Pffft. # # 3. This is something that works Ok, so I'm not # particularly worried that it's not as pretty as # it might be... # # References: # http://www.perlmonks.com/?node_id=1169110 (my question) # http://search.cpan.org/~kmx/Win32-GUI-1.13/GENERATED/Win32/GUI/Tu +torial/Part1.pod # # -------------------------------------------------------------------- +------- use Win32::GUI(); Get_Script_Name(\$my_proc, \$my_path); # Determine the name of this s +cript $W_INIT = 440; # Initial window size $H_INIT = 330; $main_window; # Global declaritive ('Wot!?') $W, $H, $X, $Y; # GLobals that define the capture area: WxH+X+Y $position_status = 0; # ...and their validity Place_Window(); # Get the window position if ($position_status) { printf("%dx%d+%d+%d", $W, $H, $X, $Y); } else { printf(""); } # ==================== end mainline ====================
Read more code in this 'spoiler', if you want...

Ultimately, I still hope to work out how to draw a simple outlined rectangle... but this script works Ok.

Again, many thanks for the assistance.


John