Прежде всего, HINSTANCE
очень мало используется в современных версиях Windows - но то, что у вас есть, на самом деле не является HINSTANCE
в любом случае. Возвращаемое значение ShellExecute
на самом деле является значением, большим или меньшим 32, что указывает на успех или неудачу соответственно.
К счастью, если вы используете ShellExecuteEx
, вы можете получить дескриптор процесса для нового процесса, и вы можете использовать его для управления процессом.
Статья MSDN, на которую ссылается @Remus, вполне приличная, но (IMO) есть еще один шаг, который может быть полезен, если целевое приложение является (или может быть) консольным приложением. В этом случае он обычно не обрабатывает сообщение WM_CLOSE
. Тем не менее, вы можете внедрить DLL в процесс и сделать так, чтобы он выполнял чистое (ish) отключение изнутри процесса (например, если он вызывает exit
, а целевая программа написана на C, она получит возможность сбрасывать и закрывать файлы, запускать все, что зарегистрировано с помощью atexit
и т. д., перед тем как умереть).
Если это не удастся, вы можете использовать GenerateConsoleCtrlEvent
, чтобы отправить ему управляющий разрыв.
Тогда, если все они не смогут выйти, позвоните TerminateProcess
.