|
Вопрос # 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 (статус: Посетитель)
Вопрос отправлен: 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 (статус: Посетитель), 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 (статус: Посетитель), 19 ноября 2010, 16:46 [#2]:
Не воспринимает пути и имена файлов с пробелами, подскажите что делать.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|