Главная страница
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.034 c
8-1117077210
ksa3003
2005-05-26 07:13
2005.10.16
Распознавание текста


14-1127380649
__DATA__
2005-09-22 13:17
2005.10.16
Поиск наиближнего времени к текущему из списка


4-1124203470
s999
2005-08-16 18:44
2005.10.16
TranslateMessage и VK_HOME, VK_END...


2-1126616707
Гость22
2005-09-13 17:05
2005.10.16
В чем ошибка?


3-1125769275
HITMAN
2005-09-03 21:41
2005.10.16
Подскажите как создать файл.BD