Тут возник вопрос: как бы приостановить действие батника, содержащего несколько последовательных вызовов hidec? Дело в том, что в таком случае программы вызываются практически одновременно, а иногда надо подождать сначала завершения одного процесса, а затем выполнить вызов следующего приложения.
Вот ответ:
Код:
#include <process.h>
#include <stdio.h>
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lpszCmd,int nCmd)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
int bWait = 0;
if ((lpszCmd[0] == '/')&&(lpszCmd[1] == 'W')&&(lpszCmd[2] == 0x20))
{ bWait = 1; lpszCmd += 3; }
/* create process with new console */
memset(&si,0,sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
if( CreateProcess( NULL, lpszCmd,
NULL, NULL, FALSE, CREATE_NEW_CONSOLE,
NULL, NULL, &si, &pi ) )
{
if (bWait) WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
/* terminate this */
return 0;
}
Вызовы из батника выглядят так (это просто ни к чему не обязывающий пример):
Код:
hidec.exe dontwaitme_1.exe
hidec.exe dontwaitme_2.exe
hidec.exe /W 1st_app_with_wait.exe
@echo Stage 1 completed...
...
hidec.exe /W 2nd_app_(also_wait).bat
@echo Stage 2 completed...
...
Программа hidec, вызванная с параметром /W будет ждать выполнения "своего" процесса.
Надеюсь, кому-то пригодится. Готовый (скомпилёный) вариант екзешника:
тут (22K, сжато в зип до 11К)