Форум: "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