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

Вниз

Хэндл главного окна запущенного мною приложения   Найти похожие ветки 

 
Pasha L ©   (2005-08-16 17:59) [0]

Здравствуйте. Совсем с недавних времен работаю с winapi, так что мой вопрос может показаться вам глупым. Ладно. Я запускаю приложение с помощью shellexecute. Как мне узнать хэндл главного окна запущенного мною приложения?


 
Leonid Troyanovsky ©   (2005-08-16 21:27) [1]


> Pasha L ©   (16.08.05 17:59)  

> запускаю приложение с помощью shellexecute. Как мне узнать
> хэндл главного окна запущенного мною приложения?


Главное окно - понятие неопределенное.
Т.е., в зависимости от .. главное окно м.б. найдено,
например, FindWindow*, скажем, после WaitForInputIdle.

--
Regards, LVT.


 
Pasha L ©   (2005-08-16 22:56) [2]

А если в приложении только одно окно? то есть есть Application (я где то слышал, что это тоже окно, только невидимое) и Form1. Вот я хочу найти Form1.


 
alpet ©   (2005-08-16 23:50) [3]

Pasha L ©   (16.08.05 22:56) [2]

А в чем проблема то? Если известен заголовок и/или класс окна - попытай удачи с помощью FindWindow.


 
Leonid Troyanovsky ©   (2005-08-17 09:41) [4]


> Pasha L ©   (16.08.05 22:56) [2]
> А если в приложении только одно окно? то есть есть Application
> (я где то слышал, что это тоже окно, только невидимое) и
> Form1. Вот я хочу найти Form1.


Если оба приложения твоих, то проще всего сделать так:
запускающее приложение передает в комстроке хендл своего
окна, которое будет ожидать ответное сообщение, например,
WM_USER (обработчик WMUser(var msg: TMessage); message WM_USER)

Запускаемое приложение в OnCreate своей главной формы
читает параметр и отправляет
SendMessage(AppHandle, WM_USER, Application.Handle, Handle)

Если запускаемое приложение чужое, то запускать лучше
CreateProcess, чтобы получить хендл процесса для
WaitForInputIdle, а затем использовать EnumWindows для
выделения окон, принадлежащих запущенному процессу с
помощью GetWindowThreadProcessId.

Если известно, что запускаемый процесс однопоточный, то
искать можно EnumThreadWindows.

Ну, и выделить среди них "главное" окно - отдельная проблема.
С некоторым приближением можно считать, что оно то, что
показывает кнопку на таскбаре (если таковое одно).

--
Regards, LVT.



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

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

Наверх




Память: 0.48 MB
Время: 0.064 c
2-1127113380
Гость22
2005-09-19 11:03
2005.10.16
Поскажите, как собрать всю инфу о файлах и папках на компе?


14-1127745617
Fl@sh
2005-09-26 18:40
2005.10.16
Form1.Caption := я, сделал это... ;


14-1126997219
P.N.P.
2005-09-18 02:46
2005.10.16
Смысл жизни


1-1127876176
Bigman
2005-09-28 06:56
2005.10.16
Как перенести Код из Visual Basic в Delphi?


3-1125407170
menart
2005-08-30 17:06
2005.10.16
Как отловить изменение размера столбца в TDBGrid?