Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.048 c
8-1091359722
Itap
2004-08-01 15:28
2004.10.31
"Распознать" звук


1-1097868727
Wint_
2004-10-15 23:32
2004.10.31
Разрулите трабла с RichEdit


1-1098182137
Scraber
2004-10-19 14:35
2004.10.31
Обычная кпока - контрол


14-1097236306
Alone
2004-10-08 15:51
2004.10.31
Компьютер-розетка :)


8-1091337932
maxistent
2004-08-01 09:25
2004.10.31
растяжка битмапа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский