Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


nester ©   (2004-09-10 10:52:00) 

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


Polevi   (2004-09-12 19:28:00) [1]

ShellExecuteEx


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

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


Digitman   (2004-09-10 11:48:00) [3]


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


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


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

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


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

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:24:00) [6]

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


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

WaitForInputIdle ?


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

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


Digitman   (2004-09-10 11:03:00) [9]


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


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


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

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


Digitman   (2004-09-10 10:58:00) [11]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо