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

Вниз

Как получить хэндл главной формы ЧУЖОГО приложения   Найти похожие ветки 

 
Ale}{(is)   (2004-09-24 18:14) [0]

Уважаемые Мастера! Подскажите пожалуйста, как получить хэндл главной формы ЧУЖОГО приложения. Проблема в том, что приложение заранее неизвестно, поэтому пользоваться поиском по заголовку и имени класса окна нельзя. Более того, проблема усугубляется тем, что, например в Дэльфи, все формы (и главная и нет) имеют одного родителя – TApplication, т. е. нельзя перебрать все формы и выбрать из них ту, которая является предком для всех других. Заранее благодарен за помощь…


 
Cobalt ©   (2004-09-24 20:14) [1]

Ммм...
Для ответа на вопрос надо бы ещё и озвучить причину, для чего это надо?
От цели многое зависит.


 
GanibalLector ©   (2004-09-24 22:26) [2]

Вообще-то findwindow ,но т.к. ничего нельзя,то ИМХО получить все видимые окна и хз что с ними делать.


 
Ale}{(is)   (2004-09-25 10:07) [3]

[1] --> Задача, в общем, такая: нужно активизировать приложение (точно известно, что оно запущено), причём активизировать именно главную форму а не какую-нибудь другую. Проблема усугублена тем, что часть окон не имеет кнопки на панели задач, а имеет только иконку в трее.
[2] --> Есть список окон - проходили это. Имеется таблица, в первой графе имя окна, а во второй - PID создавшего процесса. А дальше, как вы правильно сказали - ХЗ, что с этим всем делать!


 
Cobalt ©   (2004-09-25 11:05) [4]

помнится мне, у окон, которые фигурируют на панели задач - есть спец флаг в стилях, которые указывают на его Top-level"ость.
А вообще твоя задача - что-то из области эвристического анализа :( То есть требования не формализованы (в общем-то это половина решения)
Во-первых - конкретизируй, что ты понимаешь под главной формой. Если ты слабо себе представляешь - то бери в руки WinSight - и вперёд.


 
Ale}{(is)   (2004-09-25 15:02) [5]

Прикол в том, что первое, что я сделал - это я запустил WinSight и Spy - по стилям никаких отличий, что у главной, что у дочерней формы.
А то, что задача из области эвристического анализа - это верно: требования не конкретизированны...


 
Cobalt ©   (2004-09-25 17:22) [6]

Да ну? У Application.Handle и Application.Mainorm.Handle одинаковые стили?


 
jack128 ©   (2004-09-25 18:12) [7]

Главное окно - это термин юзера! У самой Windows нет никаких флагов говорящих о том - главное это окно или нет.
Другое дело, что в большенстве случаев главное окно не имеет родителя, вот на это можно и ориентироваться.
Соответсвенно - EnumWindow + проверка, пренадлежит это окно твоему процессу или нет + проверка имеет это окно родителя...


 
GuAV ©   (2004-09-25 20:16) [8]


> Соответсвенно - EnumWindow + проверка, пренадлежит это окно
> твоему процессу или нет + проверка имеет это окно родителя...

И это найдёт Application.Handle и Application.Mainorm.Handle и Хэндл окна хинта ?


 
Ale}{(is)   (2004-09-26 09:55) [9]

У Дэльфей все формы имеют родителя - TApplication, а мне нужно получить только одну!


 
jack128 ©   (2004-09-26 12:11) [10]

GuAV ©   (25.09.04 20:16) [8]
Application.Handle и Application.MainForm.Handle

У MainForm - родитель Application.
procedure TCustomForm.CreateParams(var Params: TCreateParams);
begin
   if (Parent = nil) and (ParentWindow = 0) then
   begin
     WndParent := Application.Handle;

> Хэндл окна хинта

Да, на это я не обратил внимание.. Для Delphi можно проверить на WS_EX_TOOLWINDOW, и то н всегда пройдет.. А так не знаю.. Вообще на RSDN была какая то статейка по поводу того, по какому алгоритму експлоерер создает кнопки на TaskBar"e для приложений.. Поищите - может поможет..(Хотя ИМХО, мало вероятно, что задача решаема в общем случае ;-) А в часном, завязывайся на класс и Caption, иначе никак.. )


 
Digitman ©   (2004-09-27 08:49) [11]


> У Дэльфей все формы имеют родителя - TApplication


на основании чего такая святая уверенность ?


> получить хэндл главной формы ЧУЖОГО приложения


внедрить свой код в АП "чужого" приложения, найти окно класса TApplication, получить глоб.атом, соотв.этому окну, по инф-ции из имени найденного атома определить адрес объекта TApplication, получить св-во MainForm этого объекта


 
Ale}{(is)   (2004-09-28 21:26) [12]

А если нужно работать не только с Дэльфийскими формами? А если не известен копилятор? Теперь что, анализатор компилятора внедрять и для каждого из них свой алгоритм придумывать. По-моему - в Москву через Владивосток!


 
jack128 ©   (2004-09-28 22:52) [13]

Ale}{(is)   (28.09.04 21:26) [12]
Советую еще раз прочитатьь первую строку в [7]

> получить глоб.атом, соотв.этому окну, по инф-ции из
> имени найденного атома определить адрес объекта
> TApplication
а можно ссылку на код?? А то в D5 я что то такого не вижу..


 
Digitman ©   (2004-09-29 11:02) [14]


> Ale}{(is)   (28.09.04 21:26) [12]


> А если нужно работать не только с Дэльфийскими формами?


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


> По-моему - в Москву через Владивосток


это уж тебе решать



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

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

Наверх




Память: 0.5 MB
Время: 0.027 c
9-1087559839
Sormy
2004-06-18 15:57
2004.10.31
AI


6-1093338639
Дмитрий Ботвин
2004-08-24 13:10
2004.10.31
Получение списка файлов с ftp-сервера


14-1097644935
Демидович
2004-10-13 09:22
2004.10.31
Первообразная


3-1096530936
aleks-ran
2004-09-30 11:55
2004.10.31
Транзакция и INSERT? D6, Paradox


1-1097650128
Rentgen
2004-10-13 10:48
2004.10.31
Как узнать число-ли переменная S:String;