Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 726

/ вопрос открыт /

Приветствую, уважаемые эксперты!
В программку в качестве ресурса поместил архиватор 7-Zip Command line version. В общем это один файл "7z.exe".
При работе в программе я извлекаю из ресурса архиватор в темповою папку и сохраняю туда файл данных. Затем данные архивируются, я это делаю так: WinExec(PAnsiChar('c:\7z.exe a -sfx -pprm c:\1.bin c:\1.txt'), SW_HIDE );
НО как можно программно определить, что процесс архивации завершился чтобы я мог что-то еще делать с файлом?

Roman Novikov Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Roman Novikov (статус: Посетитель)
Вопрос отправлен: 13 ноября 2010, 10:17
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Ну, к примеру, в пакете модулей Delphi Works есть такая процедура:

procedure dwExecAndWait(const FileName, Params: String; const CmdShow: Integer);
var
  exInfo: TShellExecuteInfo;
  Ph: DWORD;
begin
  FillChar(exInfo, SizeOf(exInfo), 0);
  with exInfo do
  begin
    cbSize := SizeOf(exInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd := GetActiveWindow();
    ExInfo.lpVerb := 'open';
    ExInfo.lpParameters := PChar(Params);
    lpFile := PChar(FileName);
    nShow := CmdShow;
  end;
  if ShellExecuteEx(@exInfo) then
    Ph := exInfo.HProcess
  else
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;
  while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    dwProcessMessages;
  CloseHandle(Ph);
end;
Подойдёт?

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 13 ноября 2010, 10:25
Оценка за ответ: 5

Комментарий к оценке: Спасибо большое!

Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 19 ноября 2010, 16:46; участников в обсуждении: 1.
Roman Novikov

Roman Novikov (статус: Посетитель), 19 ноября 2010, 15:02 [#1]:

Вот еще наiел:

function FileExecuteWait(const FileName, Params, StartDir: string; InitialState: TExecState): Integer;
var
    Info: TShellExecuteInfo;
    ExitCode: DWORD;
begin
    FillChar(Info, SizeOf(Info), 0);
    Info.cbSize := SizeOf(TShellExecuteInfo);
    with Info do begin
        fMask := SEE_MASK_NOCLOSEPROCESS;
        Wnd := Application.Handle;
        lpFile := PChar(FileName);
        lpParameters := PChar(Params);
        lpDirectory := PChar(StartDir);
        nShow := ShowCommands[InitialState];
    end;
    if ShellExecuteEx(@Info) then
    begin
        repeat
            Application.ProcessMessages;
            GetExitCodeProcess(Info.hProcess, ExitCode);
        until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
        Result := ExitCode;
    end
    else
        Result := -1;
end;
Roman Novikov

Roman Novikov (статус: Посетитель), 19 ноября 2010, 16:46 [#2]:

Не воспринимает пути и имена файлов с пробелами, подскажите что делать.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:42
Выполнено за 0.03 сек.