Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Подождать и закрыть


Автор: Akella 22.4.2005, 13:42
Есть код
Код

function TfmMain.ExecAndWait(const FileName, Params: ShortString; ArcDir:string ;const WinState: Word): boolean; export;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: ShortString;
begin
  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do
  begin
    cb := SizeOf(StartInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WinState;
  end;
  Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                          PChar(ArcDir),StartInfo,ProcInfo);
  if Result then
  begin
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
    { Free the Handles }
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;
end;

При запуске консольного приложения ожидание не получается.
В цикле поиска распаковываем архивы в подкаталогах и нужно удалить архивы после распаковки, т.к. архиватор сам не может удалить архив после распаковки, то нужно удалить самим распакованный архив, но удать не можем, т.к. архив занят.
Код

  ExecAndWait('rar', 'e -o+ *.rar',Dir, SW_SHOWNORMAL);
  DeleteFile(SearchRec.name);

Автор: Girder 22.4.2005, 21:20
Код
dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;

Автор: Akella 23.4.2005, 08:36
Girder, у тебя нет случайно всех описаний для этой функции (CreateProcess)

Автор: Akella 23.4.2005, 08:50
Всё нормально с удалением, а то забыл поставить Dir+SearchRec.name, т.е. патался удлять файл без пути к нему
Код

 ExecAndWait('rar', 'e -o+ *.rar',Dir, SW_SHOWNORMAL);
 DeleteFile(Dir+SearchRec.name);

Автор: Alex 25.4.2005, 19:02
Цитата(dsergey @ 23.4.2005, 09:36)
Girder, у тебя нет случайно всех описаний для этой функции (CreateProcess)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp

Автор: Akella 26.4.2005, 08:50
а на русском? smile

Автор: Alex 26.4.2005, 11:43
http://doc.mpv.ru/steps/mfc/winapi/131.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)