Now I've looked at it more closely, it seems you're right - that is the best way to get an HMONITER (going through the adapter seems to be an alternative but not a better one).
Sorry for the noise. Cheers, Kieron On May 26, 2012, at 19:59, Matthew Flatt <mfl...@cs.utah.edu> wrote: > EnumDisplayMonitors() is the way I see to get an HMONITOR, which is > needed for GetMonitorInfo. Is there another way? > > At Sat, 26 May 2012 15:03:50 -0600, Kieron Hardy wrote: >> Thanks Matthew for the fix - it seems to work fine - and wow done so >> quickly too! >> >> Is there a reason you have Windows enumerate the display monitors (with >> EnumDisplayMonitors) and then ask Windows for details for each of those >> monitors (with GetMonitorInfoW)? I am thinking that a more direct approach >> would be to have some sort of in-range step through the monitors in turn >> directly and collecting and processing the data that way. I am probably >> missing something but the enumerate-first approach seems to be doing more >> work than strictly necessary. Admittedly it's a terribly minor quibble, >> it's only a tiny bit more work, what with the small number of monitors and >> the small number of times this needs to be done, am just looking for >> greater understanding. >> >> Cheers, >> >> Kieron. >> >> On Sat, May 26, 2012 at 8:18 AM, Matthew Flatt <mfl...@cs.utah.edu> wrote: >> >>> Thanks! I've pushed a change that should solve the problem; let me know >>> if it still doesn't work. >>> >>> At Sat, 26 May 2012 05:45:52 -0600, Kieron Hardy wrote: >>>> So it seems that for some reason (Older Dell laptop, ATI video, Windows 7 >>>> using generic drivers) the Windows system call to return the list of >>>> monitors is returning them to Racket in a different order (primary >>> display >>>> monitor last) than expected (primary display monitor first). >>>> >>>> The code for get-all-screen-rects (in >>>> collects/mred/private/wx/win32/frame.rkt) assumes monitor 0 is the >>> primary >>>> display monitor and is the first item in the list returned by >>>> EnumDisplayDevices. My tests show that at least sometimes the primary >>>> display monitor is not the first item in the list (also noted on SO at >>>> >>> http://stackoverflow.com/questions/2600255/how-can-i-retrieve-monitor-information >>>> ). >>>> >>>> An alternative solution to getting monitor information would be to use >>>> GetMonitorInfo passing a MONITORINFO or MONITORINFOEX structure for each >>> of >>>> the values in the range 0 .. GetSystemMetrics (SM_CMONITORS) and used in >>>> Racket perhaps sorted by the monitor name returned in the szDevice field >>> of >>>> the MONITORINFOEX structure. >>>> >>>> If Racket needs to designate monitor 0 as the primary monitor then >>>> get-all-screen-rects must enumerate the display monitors and then perform >>>> some processing to sort them so that the primary monitor is returned as >>> the >>>> first item in the list. >>>> >>>> Cheers, >>>> >>>> Kieron. >>>> ____________________ >>>> Racket Users list: >>>> http://lists.racket-lang.org/users >>> ____________________ Racket Users list: http://lists.racket-lang.org/users