title: Using SetWindowPos in C# to move windows around
body: <p>I have the code below:</p>
  
  <pre><code>namespace WindowMover
  {
      using System.Windows.Forms;
  
      static class Logic
      {
          [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
          public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
  
          public static void Move()
          {
              const short SWP_NOMOVE = 0X2;
              const short SWP_NOSIZE = 1;
              const short SWP_NOZORDER = 0X4;
              const int SWP_SHOWWINDOW = 0x0040;
  
              Process[] processes = Process.GetProcesses(".");
              foreach (var process in processes)
              {
                  var handle = process.MainWindowHandle;
                  var form = Control.FromHandle(handle);
  
                  if (form == null) continue;
  
                  SetWindowPos(handle, 0, 0, 0, form.Bounds.Width, form.Bounds.Height, SWP_NOZORDER | SWP_SHOWWINDOW);
              }
          }
      }
  }
  </code></pre>
  
  <p>This is supposed to move every window on my desktop to 0,0 (x,y) and keep the same sizes.
  My problem is that only the calling app (built in C#) is getting moved.</p>
  
  <p>Should I be using something else other than Control.FromHandle(IntPtr)? Will this only find dotnet controls? If so what should I use?</p>
  
  <p>Also, the second 0 in SetWindowPos was just a random int I stick in there, I'm not sure what to use for int hWndInsertAfter</p>
  
  <p>What about processes with multiple windows like pidgin?</p>