You should use CreateProcess to start the application.
This will return you some information about the newly started process (thread handle and -id, process handle and -id).
There is a way to have your thread waiting until the new process has created its main window, but I do not remember how (check out the MSDN).
Use GetGUIThreadInfo (supply it the process id you obtained from CreateProcess) to obtain information about the newly created process (lots of window handles CAN be returned).
If you cannot find how to wait for the newly created process to have its main window created, you can always execute GetGUIThreadInfo in a loop until you receive a valid handle to the windows (or a timeout has occured).