Code: |
var pi : TProcessInformation; si : TStartupInfo; begin ZeroMemory(@si,sizeof(si)); si.cb:=SizeOf(si); if not CreateProcess( PChar(lpApplicationName), //pointer to name of executable module PChar(lpCommandLine), // Command line. nil, // Process handle not inheritable. nil, // Thread handle not inheritable. False, // Set handle inheritance to FALSE. 0, // No creation flags. nil, // Use parent's environment block. nil, // Use parent's starting directory. si, // Pointer to STARTUPINFO structure. pi ) // Pointer to PROCESS_INFORMATION structure. then begin Result:=false; RaiseLastWin32Error; Exit; end; WaitForSingleObject(pi.hProcess,INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); // ... здесь твой код end; |
Автор ответа: TAPAKAH
Примечание Vit:
Если заменить
WaitForSingleObject(pi.hProcess,INFINITE);
на
while WaitforSingleObject(PI.hProcess,200)=WAIT_TIMEOUT do application.ProcessMessages;
то вызывающая программа не будет казаться завешанной и будет отвечать на сообщения
Примечание Mikel: В RxLib есть функция для этого: FileExecuteWait
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!