title: Detect and Prevent Overlapping Windows in C#
body: <p>Anyone know of an <em>efficient</em> way of detecting movement of any windows currently open on a windows system?  I need to detect a window's movement, determine if it collides with my applications Form, and bump it out from underneath if necessary.</p>
  
  <p>I know I can scan through an enumerated list and check each window -- but that is way to intensive to perform constantly.</p>
  
  <p>Background:  </p>
  
  <p>I have a taskbar-esque application that docks on the side of a user's screen.  When the "Always on Top" feature is on, maximized windows will take up the remaining available space without covering the toolbar, as expected.  </p>
  
  <p>However, if you drag a non-maximized window over the toolbar, the application goes behind the toolbar (also expected), but you can no longer grab onto the title bar to move it back -- the window is stuck unless you disable "Always on Top" and then move it.  So, I want to bump the window out from underneath.</p>