Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1148114661
BAngel
2006-05-20 12:44
2006.06.04
Файлы


3-1144741610
NetBot
2006-04-11 11:46
2006.06.04
Простейший пример IB &amp; Delphi. подключение, запрос, результат.


15-1146830150
Der Nechk@ssoff
2006-05-05 15:55
2006.06.04
Место встречи изменить можно!


2-1147894133
Dstr
2006-05-17 23:28
2006.06.04
PopMenu


1-1146000057
Volf_555
2006-04-26 01:20
2006.06.04
Как перевести HotKey1.HotKey в тип String?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский