How to get Windows Explorer's selected files from within C#?

you don't need to get the Handle (of explorer).

In the project's references add these references found in the COM section. One needs to a reference to SHDocVw, which is the Microsoft Internet Controls COM object and Shell32, which is the Microsoft Shell Controls and Automation COM object.

Then add your:

using System.Collections;
using Shell32;
using System.IO;

Then this will work:

      string filename;  
      ArrayList selected = new ArrayList();
      foreach (SHDocVw.InternetExplorer window in new SHDocVw.ShellWindows())
      {
        filename = Path.GetFileNameWithoutExtension(window.FullName).ToLower();
        if (filename.ToLowerInvariant() == "explorer")
        {
          Shell32.FolderItems items = ((Shell32.IShellFolderViewDual2)window.Document).SelectedItems();
          foreach (Shell32.FolderItem item in items)
          {
            selected.Add(item.Path);
          }
        }
      }