Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
ВнизShellExecuteEx и WaitForSingleObject Найти похожие ветки
← →
Близнец (2006-05-19 09:21) [0]Доброго времени суток!
Необходимо вывести сообщение только после завершения архивации. Использую код:FillChar(ShellExecuteInfo, SizeOf(TShellExecuteInfo), 0);
with ShellExecuteInfo do
begin
cbSize := Sizeof(TShellExecuteInfo);
Wnd := Handle;
lpFile := PChar("winrar.exe");
lpParameters:=PChar("a -agYYYYMMDD -ep1 -t -r "+"""+filename+"" +"""+dir_path+"\*.*" ");
lpDirectory:=PChar(rar_path);
lpVerb := "open";
nShow := SW_SHOWNORMAL;
end;
try
if ShellExecuteEx(@ShellExecuteInfo) then
begin
while WaitforSingleObject(ShellExecuteInfo.hProcess,200)=WAIT_TIMEOUT do
Repaint;
showmessage ("Архивирование "+dir_path+" закончено!")
end
else showmessage ("Архивирование "+dir_path+" завершилось неудачей!")
finally
CloseHandle(ShellExecuteInfo.hProcess);
end;
Сообщение появляется сразу, как архивация начинается, а не после. Подскажите, что не так, плз.
← →
balepa © (2006-05-19 09:50) [1]while WaitforSingleObject(ShellExecuteInfo.hProcess,200)=WAIT_TIMEOUT do
Repaint;
showmessage ("Архивирование "+dir_path+" закончено!")
end
Ну вопервых while нафик не нужен
Во-вторых ты поставил скажем так время ожидания 200 мс а за 200 мс ты заархивировать не успееш
DWORD WINAPI WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
Parameters
hHandle
[in] Handle to the object. For a list of the object types whose handles can be specified, see the following Remarks section.
If this handle is closed while the wait is still pending, the function"s behavior is undefined.
The handle must have the SYNCHRONIZE access right. For more information, see Standard Access Rights.
dwMilliseconds
[in] Time-out interval, in milliseconds. The function returns if the interval elapses, even if the object"s state is nonsignaled. If dwMilliseconds is zero, the function tests the object"s state and returns immediately. If dwMilliseconds is INFINITE, the function"s time-out interval never elapses.
← →
Игорь Шевченко © (2006-05-19 09:56) [2]
> while WaitforSingleObject(ShellExecuteInfo.hProcess,200)=WAIT_TIMEOUT
> do
> Repaint;
> showmessage ("Архивирование "+dir_path+" закончено!")
> end
Не пиши так больше никогда
← →
Близнец (2006-05-19 10:29) [3]200 мс заменен на INFINITE, все по-прежнему...
← →
balepa © (2006-05-19 10:36) [4]
> Близнец (19.05.06 10:29) [3]
> 200 мс заменен на INFINITE, все по-прежнему...
While убрал ?
← →
Близнец (2006-05-19 10:47) [5]да
← →
balepa © (2006-05-19 10:50) [6]Покажи как теперь
← →
Близнец (2006-05-19 13:08) [7]
if ShellExecuteEx(@ShellExecuteInfo) then
begin
WaitforSingleObject(ShellExecuteInfo.hProcess,INFINITE);
showmessage ("Архивирование "+dir_path+" закончено!")
end
else showmessage ("Архивирование "+dir_path+" завершилось неудачей!")
← →
Близнец (2006-05-19 13:13) [8]
if ShellExecuteEx(@ShellExecuteInfo) then
begin
WaitforSingleObject(ShellExecuteInfo.hProcess,INFINITE);
showmessage ("Архивирование "+dir_path+" закончено!")
end
else showmessage ("Архивирование "+dir_path+" завершилось неудачей!")
← →
Сергей М. © (2006-05-19 13:31) [9]if ShellExecuteEx(@ShellExecuteInfo) then
case MsgWaitForMultipleObjects(1, @ShellExecuteInfo.hProcess, False, INFINITE, QS_ALLINPUT) of
WAIT_OBJECT_0:
showmessage ("Архивирование "+dir_path+" закончено!");
WAIT_OBJECT_0 + 1:
Application.ProcessMessages;
end
else
showmessage ("Архивирование "+dir_path+" не то чтобы не завершилось - оно вообще не начато !")
← →
Близнец (2006-05-19 14:12) [10]2 Сергей М.
если я пишу так:if ShellExecuteEx(@ShellExecuteInfo) then
if WaitforSingleObject(ShellExecuteInfo.hProcess,INFINITE)=WAIT_OBJECT_0 then
showmessage ("Архивирование "+dir_path+" закончено!")
else showmessage ("Архивирование "+dir_path+" завершилось неудачей!")
то, я так понимаю, для меня разницы с твоим вариантом никакой нет
результат - архивирование идет, сообщения вообще никакого не выдается
← →
Игорь Шевченко © (2006-05-19 14:44) [11]
procedure TfMain.DumpFile(const FileName: string);
var
ShellInfo: TShellExecuteInfo;
ParamsString: string;
begin
ParamsString := Format("-em %s %s.aaa", [FileName, FileName]);
ShellInfo.cbSize := SizeOf(ShellInfo);
ShellInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
ShellInfo.Wnd := Handle;
ShellInfo.lpVerb := "open";
ShellInfo.lpFile := "tdump";
ShellInfo.lpParameters := PChar(ParamsString);
ShellInfo.lpDirectory := nil;
ShellInfo.nShow := SW_SHOW;
if not ShellExecuteEx(@ShellInfo) then
RaiseLastWin32Error;
if ShellInfo.hProcess <> 0 then
try
WaitForSingleObjectEx(ShellInfo.hProcess, INFINITE, false);
finally
CloseHandle(ShellInfo.hProcess);
end;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c