Главная страница
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.052 c
6-1092235218
Павел
2004-08-11 18:40
2004.10.17
Динамические массивы.


4-1095420430
Black CAT
2004-09-17 15:27
2004.10.17
И опять про CAD


1-1096517611
Васёк
2004-09-30 08:13
2004.10.17
Рисование по текстуре


1-1096624987
leonidus
2004-10-01 14:03
2004.10.17
Как програмно заблокировать pop-up окна?


1-1096530029
Pushkin
2004-09-30 11:40
2004.10.17
Как из VС передать массив в DLL на Делфи