witam, oto moje pytanie:
mam następującą funkcje uruchamiającą program zewnętrzny (konkretnie jest to enkoder plików audio):
function Run_E(App, Param : pchar) : string;
var
TempFilePath : string;
TempFileName : string;
ExitCode : cardinal;
Console : PShellExecuteInfoA;
begin
TempFileName:=GenerateRandomName+'.wav';
Param:=pchar(AnsiReplaceStr(Param,'%s',TempFileName));
GetMem(Console, SizeOf(ShellExecuteInfoA));
ZeroMemory(Console, SizeOf(ShellExecuteInfoA));
Console.cbSize := SizeOf(ShellExecuteInfoA);
Console.fMask := SEE_MASK_NOCLOSEPROCESS;
Console.nShow := byte(FEncShow);
Console.lpFile := App;
Console.lpParameters:=Param;
Console.lpDirectory:=pchar(FANSIWorkDir);
ShellExecuteEx(Console);
TempFilePath:=FANSIWorkDir+TempFileName;
repeat
WaitForSingleObject(Console.hProcess, 100);
GetExitCodeProcess(Console.hProcess, ExitCode);
until FTerminated or (ExitCode<>STILL_ACTIVE);
if FTerminated then
begin
TerminateProcess(Console.hProcess,0);
WaitForSingleObject(Console.hProcess, infinite);
FErrorCode:=1006;
end
else
result:=Compute(TempFilePath);
CloseHandle(Console.hProcess);
DeleteFile(pChar(TempFilePath));
end;
jak widać
Console.nShow := byte(FEncShow);
funkcja umożliwia otwarcie programu w widocznym oknie. co za tym idzie, użytkownik może ten program skasować. tylko jak zrobić żebym ja o tym wiedział ? to znaczy, czy w pętli
repeat
WaitForSingleObject(Console.hProcess, 100);
GetExitCodeProcess(Console.hProcess, ExitCode);
until FTerminated or (ExitCode<>STILL_ACTIVE);
mogę jakoś takie zamknięcie wykryć ?
(no i nawet jak okno jest niewidoczne to można je przecież z menadżera zamknąć, więc analogicznie to samo pytanie)