Как проверить работает ли процесс консольного приложения, или он уже завершился, если у меня есть ProcessID и хандл этого процесса.
Шрайбер: "...Структура DISPATCH_HEADER в начале объекта процесса свидетельствует о том, что этот объект является объектом синхронизации... Объект процесса переходит в сигнальное состояние после того, как процесс завершил свою работу..." WaitForSingleObject(hProcess,INFINITE).
Чё то не совсем то, на сколько я понял WaitForSingleObject стопорит поток из которого вызвана эта функция до тех пор пока объект (в моём случае это - консольное приложение) не завершит свою работу, а мне всего-то надо функцию на подобие: ProcessIsRunning(ProcessIDWORD):Boolean
Код (Text): exitcode dd ? invoke GetExitCodeProcess,hProcess,addr exitcode cmp exitcode,STILL_ACTIVE jz running
Оффтоп, небольшая оптимизация: Код (Text): push eax invoke GetExitCodeProcess,hProcess,esp pop eax cmp eax,STILL_ACTIVE jz running
bogrus THX Asterix THX наткнулся ещё на №21 про пайпы - тоже пригодилось, только в этом случае не отсылается ни CTRL_C_EVENT ни CTRL_C_EVENT. (( А TerminatePeocess(hProcess) в этом случае нормальный способ выхода из консольной программы или это подобие RESET вместо ShutDown'a )
Eraser на сколько я понял WaitForSingleObject стопорит поток Что/кто мешает в качестве второго параметра не указывать INFINITE?
Eraser q_q Цитата из MSDN'а про WaitForSingleObject: If dwMilliseconds is zero, the function tests the object's state and returns immediately.
bogrus Как насчет "хитрого" процесса, который делает <font color="blue]ExitProcess(STILL_ACTIVE);</font><!--color-->? Все-таки WaitForSingleObject надежнее будет...