Опитвам се от мое приложение да стартирам чуждо приложение и по таймер да следя и броя колко време работи чуждото приложение.
Със стартирането нямам проблеми – винаго се стартира ОК, но много бързо след това в събитието на таймера получавам GetExitCodeProcess различно от STILL_ACTIVE.
Къде ли е ключа от бараката?
Стартирането
{}function App__XXX_Start: boolean;
var
si : STARTUPINFO;
pi : PROCESS_INFORMATION;
CmdLine : string;
StartPath: string;
begin
Result := false;
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
CmdLine:=Dlg_Params.Label__XXXPath.Caption+#0;
StartPath:=ExtractFilePath(Dlg_Params.Label__XXXPath.Caption)+#0;
if CreateProcess( nil, // No module name (use command line).
PChar(cmdline), // 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.
PChar(StartPath), // Use parent's starting directory.
si, // Pointer to STARTUPINFO structure.
pi ) // Pointer to PROCESS_INFORMATION structure.
then begin
Handle_XXX_Process := pi.hProcess;
Handle_XXX_Thread := pi.hThread;
Result := true;
end else begin
MsgDlg( 'Неуспешен опит за старт на програма "_XXX".'#13+
Dlg_Params.Label__XXXPath.Caption,
'Грешка',
mb_OK+MB_ICONERROR);
end;
end;
Таймера
OnTimer:
if GetExitCodeProcess(Handle_XXX_Process, xStyle) then begin
if xStyle=STILL_ACTIVE then begin
BitBtn__XXX.Caption := TmSecToMMSS(Timer_XXX_Cnt);
end else begin
Timer_XXX.Enabled := false;
end;
end;{}