Акжан в сети - На уровень вверх(W32) Как правильно завершить некое приложение?

Если не принудительно, то можно послать на его Instance сообщение WM_QUIT. Если же необходимо принудительно терминировать приложение, то смотрите ниже - под Windows NT процесс можно терминировать через специально предназначенный для этого хэндл. Иначе гарантии нет. Предположим, что процесс создаем мы, ожидая его завершения в течение maxworktime. Тогда -

var
  dwResult: Longint; // This example was converted from C source.
begin                // Not tested. Some 'nil' assignments must be applied
                     // as zero assignments in Pascal. Some vars need to
                     // be declared (maxworktime, si, pi). AA.
  if CreateProcess(nil, CmdStr, nil, nil, FALSE,
                              CREATE_NEW_CONSOLE, nil, nil, si, pi) then
  begin
    CloseHandle( pi.hThread );
    dwResult := WaitForSingleObject(pi.hProcess, maxworktime*1000*60);
    CloseHandle( pi.hProcess );
    if dwResult <> WAIT_OBJECT_0 then
    begin
      pi.hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, pi.dwProcessId);
      if pi.hProcess <> nil then
      begin
          TerminateProcess(pi.hProcess, 0);
          CloseHandle(pi.hProcess);
      end;
    end;
  end;
end;

Serge Nozhenko

(2:5020/175)