[ShellExecuteLauncher.cs]
-------------------------
Right now ShellExecuteLauncher iterates thru all top level windows
until it finds the name of the file in the title bar.

comments:
-to avoid collisions with duplicate file names (hold a map of
 previous window handles), so if the file name is in the title and
 it is not already mapped it's the new window.

-maybe invoke bh or resolvers to do the work and skip title search
 all together.

Workspace launching (more testing to do with new resolver events)
~but one possibility could be:
-------------------------
launcher calls BH -> AboutToLaunchWorkspace(), button hook disables
all newly created buttons and listens for WM_CREATE and parentNotify_WM_CREATES...
... in order... that is our in order handle table.

launcher calls BH -> LaunchDone(artifacts), we use the artifacts in order
in our table and launcher gets the list of handles.

~this would work if launcher accurately launches in order and all windows
are created in order. ~launcher should wait till resolve event occurs?
~before launching next???
--------------------------------------------
