I've often usd the Shell command and 'waited' for it to finish using this technique:-
Waiting For Shell Code:
  1. Let lngPID = Shell(strExecutable, vbNormalFocus)
  2. Let lngPID = OpenProcess(SYNCHRONIZE, False, lngPID)
  3. Do
  4.    Let lngReturn = WaitForSingleObject(lngPID, 0)
  5.    DoEvents
  6. Loop While lngReturn <> 0
...but now I want to do something similar except I want to use the default program to open a file.

Shell execute will use the default program for me:-
Shell Execute Code:
  1. Call ShellExecute(hWnd, "open", mstrImagePath, "", "", 10)
...but it doesn't return a program or process ID I can use with the WaitForSingleObject call.

Is there any way I can wait for ShellExecute?