title: Desktop Icon manipulation - how to get a handle to SysListView32 when themes with picture rotation are enabled
body: <p>I'm trying to move icons around the desktop, everything works well until a theme that has picture rotation is picked.  With a basic Windows 7 theme, the <code>SysListView32</code> is child of <code>SHELLDLL_DefView</code> which is in turn child of <code>Progman</code>.</p>
  
  <p>But when a picture rotation desktop theme is picked, <code>SysListView32</code> becomes child of <code>SHELLDLL_DefView</code> which in turn becomes child of <code>WorkerW</code>.  There are more than 1.  How should I go about finding the right HWND pointing to the right <code>WorkerW</code>.  Enumerate all desktop windows and check each one with a classname WorkerW?</p>
  
  <pre><code>[DllImport("user32.dll", SetLastError = true)]
  static extern IntPtr GetWindow(IntPtr hWnd, GetWindow_Cmd uCmd);
  [DllImport("user32.DLL")]
  public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
  [DllImport("user32.dll", SetLastError = true)]
  static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
  
  enum GetWindow_Cmd : uint
  {
      GW_HWNDFIRST = 0,
      GW_HWNDLAST = 1,
      GW_HWNDNEXT = 2,
      GW_HWNDPREV = 3,
      GW_OWNER = 4,
      GW_CHILD = 5,
      GW_ENABLEDPOPUP = 6
  }
  </code></pre>
  
  <p>In my <code>main()</code> for example, I make the following calls:</p>
  
  <pre><code>IntPtr HWND = FindWindow("Progman",null);
  HWND = GetWindow(HWND, GetWindow_Cmd.GW_CHILD);
  HWND = GetWindow(HWND, GetWindow_Cmd.GW_CHILD);
  </code></pre>