![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как можно узнать когда закончила запускаться внешняя программа?
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()