Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.023 c
14-1126443842
whatisthematrix1
2005-09-11 17:04
2005.10.23
Просто зашел посмотреть...


14-1128273573
Palladin
2005-10-02 21:19
2005.10.23
Cache 5.0.15


14-1127996007
Kolan
2005-09-29 16:13
2005.10.23
Забавная клавиатура.


6-1120318987
GEEK
2005-07-02 19:43
2005.10.23
WebServer application: работа с базами данных


3-1126599292
NewAtoL
2005-09-13 12:14
2005.10.23
Сервер отчетов в FastReport.




   Наверх