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

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

Хэндл главного окна запущенного мною приложения [D6, WinXP]


Pasha L ©   (2005-08-16 17:59:00) 

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


Leonid Troyanovsky   (2005-08-17 09:41:00) [1]


> 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.


alpet   (2005-08-16 23:50:00) [2]

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

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


Pasha L   (2005-08-16 22:56:00) [3]

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


Leonid Troyanovsky   (2005-08-16 21:27:00) [4]


> Pasha L ©   (16.08.05 17:59)  

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


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

--
Regards, LVT.


Наверх

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