Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

Как можно узнать когда закончила запускаться внешняя программа?   Найти похожие ветки 

 
nester   (2004-09-10 10:52) [0]

Добрый день.
Мне необходимо узнать момент когда закончила запускаться запущенная мною внешняя программа(например по ShellExecute).
Т.е. посмотрите например на Adobe Photoshop или Acrobat.
Пока они запускаются у них торчит сплэшскрин, причем довольно долго, и когда наконец запустилсяпоявляется основная форма для работы. Как отловить этот момент когда появилась основная форма?


 
Digitman ©   (2004-09-10 10:58) [1]

в цикле вызывай FindWindow()


 
nester   (2004-09-10 10:59) [2]

Не, не могу, в том то весь и прикол, что я заранее не знаю что за прога которую нужно запустить


 
Digitman ©   (2004-09-10 11:03) [3]


> заранее не знаю что за прога которую нужно запустить


не знаешь ? тогда откуда такая уверенность, что "прога" будет вообще иметь какие-либо формы ?


 
nester   (2004-09-10 11:17) [4]

Знаю что проги предназначены для отображения/редактирования инфы. Я думаю что у них будут формы%)))
Собсна может я и не правильно выразился, мне нужен тот момент когда прога готова работе. Т.е. тот момент когда произошел
Application.Run говоря языком делфи


 
Рамиль ©   (2004-09-10 11:19) [5]

WaitForInputIdle ?


 
nester   (2004-09-10 11:24) [6]

Хмм похоже на правду судя по названию, а мочно немного поподробнее?
P.S. У нас тут прям чат какойто


 
Рамиль ©   (2004-09-10 11:34) [7]

var
 Rlst: LongBool;
 StartUpInfo: TStartUpInfo;
 ProcessInfo: TProcessInformation;
 Error: integer;
begin
 FillChar(StartUpInfo, SizeOf(TStartUpInfo), 0);
 with StartUpInfo do
 begin
   cb := SizeOf(TStartUpInfo);
   dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
   wShowWindow := SW_SHOWNORMAL;
 end;
 Rlst := CreateProcess("C:\Windows\System32\notepad.exe", " c:\readme.txt", nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
 if Rlst then
 with ProcessInfo do begin
   WaitForInputIdle(hProcess, INFINITE); // ждем завершения инициализации
   CloseHandle(hThread); // закрываем дескриптор процесса
   CloseHandle(hProcess); // закрываем дескриптор потока
 end
else Error := GetLastError;
end;


 
nester   (2004-09-10 11:41) [8]

Ж)))))))) Благодарствую Рамиль


 
Digitman ©   (2004-09-10 11:48) [9]


> nester   (10.09.04 11:24) [6]
> Хмм похоже на правду


эта ф-ция всего лишь проверяет факт создания целевым процессом очереди оконных сообщений, но никоим образом не отражает фак создания этим процессом "формы"


 
nester   (2004-09-10 16:29) [10]

Хмм. Оно сработало так как надо мне, все замечательно, но вот проблемма частенько нужно еще чтобы не ехе-шник запускать, а .doc или .pdf или ... В общем как в ShellExecute(0, "open",PChar("gogogo.doc")...
А для CreateProcess нужен только исполнимый файл, где бы теперь еще узнать как можно по рассширению узнать ассоциированую программу?


 
Polevi ©   (2004-09-12 19:28) [11]

ShellExecuteEx



Страницы: 1 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
10-1047967678
Comwad
2003-03-18 09:07
2004.10.17
Обрыв соединения ЛВС для Corba клиентов.


4-1095353519
RaPToR_1
2004-09-16 20:51
2004.10.17
блокировка


11-1081438953
Delphi5.01
2004-04-08 19:42
2004.10.17
Mojet oshibka? Result:=PCheckMesh(NewPanel(AParent, EdgeStyle));


6-1091779038
Evgenius
2004-08-06 11:57
2004.10.17
Как разделить сообщение отправляемое через сокеты на блоки???


14-1096128458
Ricks
2004-09-25 20:07
2004.10.17
Помогите с физикой!!!