FrameRector v.2008-08-31

 (+) xchg F8,F2 , xchg F7,F4:  for ExtraSpy, HTSpy, ParentOwner ...
 (+)  HT-retval

FrameRector v.2006-08-26
 
 1) Updated MESSAGE-ONLY section:
    + class Message window, 
    + enumeration all message-only windows (though MSDN said it's impossible :-))

 2) Now Alt+Esc => close selected window (dangerous!)

------------------------------------------------------------------------------
(initial: FrameRectShow v.2005-01-01)

http://www.geocities.com/xmemor/2lz/framerector.zip

Partner for FrameRector - WinTreeSnap:
http://www.geocities.com/xmemor/2lz/wintreesnap.zip

http://www.geocities.com/xmemor/2lz/tinyasm.html  ("Tiny apps + sources")
------------------------------------------------------------------------------

FrameRector is specific window spy/monitor "inside out".

It shows some parameters of selected window from point -
  hWnd,
  HT-retval (DefWindowProc/SendMessage WM_NCHITTEST result)
  label MOW (if Message-Only Window),
  a(lpha-channel)/_, 
  v(isible)/h(idden), 
  e(nable)/d(isable),
  region type (O/1/2/3), 
  PointInRegion (+/-), 
  point (cursor) position, 
  rectangle (left,top; width*height), 
  z-order layer, 
  control ID, class, text, 
  exefile, process ID, thread ID, -

plus chromatic frames of every window within screen:

 black frame     - if cursor is outside frame,
 white           - if cursor is within frame,
 yellow          - selected window,
 red             - parent of WS_CHILD-selected,

select window (with help of cursor) + key:

 F8 + cursor     => move window while F8 is pressed
 F8+F7	+ cursor => resize window while F8+F7 are pressed
 F7              => topmost/notopmost
 F5              => refresh screen
 F6              => click emulation
 F4              => e(nable)/d(isable)
 F2              => v(isible)/h(idden)
 F9              => get (save) window region
 F10             => set (copy saved) window region
 F11             => empty/entire window region
 
 F12             => a(lpha-channel) on/off     (if WinOS>=2k)
   if alpha-channel is "on":
  HOME           => alpha=255 (full opacity)
  END            => alpha=0 (full transparency)
  PAGE UP        => alpha+1
  PAGE DOWN      => alpha-1
 NUM LOCK "on"   => fix number (N) of permited window under cursor, in Z-order, also for MOW (message-only window)
                     (=> FrameRector selects corresponding frames only),
     if NUM LOCK is "on":
  UP ARROW       => N-1,
  DOWN ARROW     => N+1,
 CAPS LOCK  "on" => ProcessID filter (shows selected PID's frames only),
 SCROLL LOCK "on" => ThreadID filter (shows selected TID's frames only),
 CAPS LOCK "on" & SCROLL LOCK "on" => window branch filter,
 INS => exit
 ALT+ESC         => close selected window (dangerous!)  ; (old FrameRector didn't use ALT and ESC because they kill popup windows).

------------------------------------------------------------------------------
Interprocess communication (IPC).

FrameRector sets its output info to desktop window text
and sends broadcasting message every time when this info changes.

So other apps can read FrameRector's output info. Demo example - FR_reader.

For IPC FrameRector and FR_reader uses non-standard way: registers unique window message
via RegisterClipboardFormat or RegisterClass(Ex) instead of RegisterWindowMessage.

------------------------------------------------------------------------------
Tested on XP-pro-sp2.
Win9x  => without alpha-channel, without message-only windows.

kero <geocities.com/xmemor>
