Текущий архив: 2005.10.23;
Скачать: CL | DM;
ВнизИдентификация окон Найти похожие ветки
← →
HardTouch (2005-08-18 12:32) [0]Может кто подскажет как можно отличить одно окно от другого в чужом приложении, причем класс окон одинаковый, а заголовков окон нет. Например, инструментальные окна Adobe Photoshop и т.п.
← →
Digitman © (2005-08-18 12:44) [1]если тобой не определены иные атрибуты (признаки) для однозначной идентификации окна, то - никак.
← →
n0name (2005-08-18 12:56) [2]EnumChildWindows
Порядок перечисления будет одинаков для каждого запуска.
← →
Digitman © (2005-08-18 13:33) [3]
> n0name (18.08.05 12:56) [2]
это НЕ имеет к задаче автора ни малейшего отношения.
← →
Leonid Troyanovsky © (2005-08-18 13:35) [4]
> Digitman © (18.08.05 13:33) [3]
> > n0name (18.08.05 12:56) [2]
> это НЕ имеет к задаче автора ни малейшего отношения.
Иметь-то имеет, но не дает гарантий.
--
Regards, LVT.
← →
Digitman © (2005-08-18 13:49) [5]
> Leonid Troyanovsky © (18.08.05 13:35) [4]
ну и нахрена ему хэндлы эти сдались ?
задача-то у него - получить КОНКРЕТНЫЙ хендл некоего НУЖНОГО ему окна, а не огульный список хэндлов всех подряд доч.окон !
← →
Leonid Troyanovsky © (2005-08-18 13:53) [6]
> Digitman © (18.08.05 13:49) [5]
> ну и нахрена ему хэндлы эти сдались ?
Если он n по порядку (z-order) у парента,
то так и найдет.
Только, оный порядок не гарантирован.
--
Regards, LVT.
← →
Digitman © (2005-08-18 14:01) [7]
> Leonid Troyanovsky © (18.08.05 13:53) [6]
> оный порядок не гарантирован
вот именно !
и МАССА чего еще не гарантировано)
производитель ПО не обязан придерживаться каких-либо соглашений с каким-то HardTouch, производитель имеет полное право в любой секунд изменить все что угодно (в т.ч. и этот "порядок"), в рез-те чего софт автора в мгновение ока становится в известную позу.
← →
Leonid Troyanovsky © (2005-08-18 14:16) [8]
> Digitman © (18.08.05 14:01) [7]
> > оный порядок не гарантирован
> вот именно !
> и МАССА чего еще не гарантировано)
Ну, а HardTouch чем провинился-то?
Ты, брат, впал в полемический раж ;)
--
Regards, LVT.
← →
Digitman © (2005-08-18 14:47) [9]
> Leonid Troyanovsky © (18.08.05 14:16) [8]
> HardTouch чем провинился-то
тем что не определил исх.условия для решения задачи.
признак того что некое одно окно (из множества подобных по классу) имеет, к примеру, некий дочерний edit-контрол, а другое (того же класса) оного не имеет, УЖЕ есть признак, по которому можно неким образом идентифицировать окно !
> Ты, брат, впал в полемический раж
про твое "не дает гарантий" я ж не комментирую ?)
"понятно что лошадь" - только детальное исследование отличий одного от другого окон заданного класса в этом случае приведет к построению конечного алгортитма !
)
← →
HardTouch (2005-08-18 14:57) [10]Да, ну и палемика тут разгорелась! :-))) И всему виной я...
Вобщем дело вот в чем. Я уже пытался использовать EnumChildWindows, но ни к чему хорошему это не привело, рассмотрим на примере Photoshop. Можно создать много окон самому путем перетаскивания закладок инструментальных окон на рабочую область. Сами понимаете про что я...не выход это.
← →
HardTouch (2005-08-18 15:03) [11]Есть еще одна зацепка, но как ей воспользоваться!? Как-то заметил я в утиле SPY++, что у каждого окна в свойствах есть некое постоянное значение, названное там, "window bytes",кажется. Но как его получает SPY++? В смысле как его получить мне!? :-) Может на эту тему у кого есть соображения.
← →
Leonid Troyanovsky © (2005-08-18 15:19) [12]
> HardTouch (18.08.05 15:03) [11]
> Есть еще одна зацепка, но как ей воспользоваться!? Как-то
> заметил я в утиле SPY++, что у каждого окна в свойствах
> есть некое постоянное значение, названное там, "window bytes",кажется.
> Но как его получает SPY++? В смысле как его получить мне!?
> :-) Может на эту тему у кого есть соображения.
Некоторым контролам присваивается идентификатор,
прочитать который можно GetDlgCtrlID.
Некоторые контролы пишут свою информацию в Extra Window Memory,
определяемую при регистрации класса окна.
Некоторые контролы (например, VCL) навешавают на свои окна
SetProp.
Но, все эти некоторые признаки, даже в их совокупности,
не могут однозначно идентифицировать контрол.
Т.е., для уже работающего приложения можно почти наверное
идентифицировать, но если его рестартовать - работу
придется начинать заново.
Ну и еще одно замечание. Практически все сколько-нибудь
полезные приложения предоставляют интерфейсы или что-то другое.
Т.е., управлять оными приложениями путем нажатия кнопок
извне представляется атавизмом.
--
Regards, LVT.
← →
HardTouch (2005-08-18 15:43) [13]Мне посоветовали использовать EnumProps/GetProp или GetWindowLong, внедренный в чужой процесс. Как считаете? Просто ни про то, ни про другое не вкурсе, стоит ли рыть информацию по этой теме?
← →
HardTouch (2005-08-18 16:03) [14]
> Т.е., для уже работающего приложения можно почти наверное
> идентифицировать, но если его рестартовать - работу
> придется начинать заново.
Я готов даже с некоторой переодичностью идентифицировать. Только как?
> Ну и еще одно замечание. Практически все сколько-нибудь
> полезные приложения предоставляют интерфейсы или что-то
> другое.
> Т.е., управлять оными приложениями путем нажатия кнопок
> извне представляется атавизмом.
И как можно управлять, например, Photoshop"ом?
← →
Leonid Troyanovsky © (2005-08-18 16:45) [15]
> HardTouch (18.08.05 15:43) [13]
> Мне посоветовали использовать EnumProps/GetProp или GetWindowLong,
> внедренный в чужой процесс. Как считаете? Просто ни про
> то, ни про другое не вкурсе, стоит ли рыть информацию по
> этой теме?
Внедрять в данном случае не вижу смысла.
Ну, а про остальною повторю, что всего этого может и не быть.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2005-08-18 16:51) [16]
> HardTouch (18.08.05 16:03) [14]
>
> > Т.е., для уже работающего приложения можно почти наверное
> > идентифицировать, но если его рестартовать - работу
> > придется начинать заново.
> Я готов даже с некоторой переодичностью идентифицировать.
> Только как?
Используя всю доступную информацию, начиная от:
GetDlgCtrlID (у кнопок, пунктов менюшек оно есть),
и заканчивая z-order в паренте, а может и их координатами.
Наконец, на некоторые можно указать мышью.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2005-08-18 16:53) [17]
> > Т.е., управлять оными приложениями путем нажатия кнопок
> > извне представляется атавизмом.
> И как можно управлять, например, Photoshop"ом?
Даже не представляю. Поэтому и толкаю к COM.
Ну, а назачем тогда оная идентификация?
--
Regards, LVT.
← →
Digitman © (2005-08-18 16:58) [18]
> HardTouch
на то существует Гугль.
Который всегда рад дать тебе МОРЕ инф-ции по теме "Adobe Photoshop как OLE/COM-сервер автоматизации"
← →
HardTouch (2005-08-19 10:50) [19]Ладненько, всем спасибо за помощь. Похоже задача в общем виде неразрешима. Закину подальше :-)
Страницы: 1 вся ветка
Текущий архив: 2005.10.23;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.042 c