Accessible: IAccessible;
..
if Succeeded(AccessibleObjectFromWindow(AWnd, ..,..IAccessible, Accessible)) then
Role := Accessible.get_accRole(....)
and check the Role against:
ROLE_SYSTEM_TEXT
ROLE_SYSTEM_DROPLIST
ROLE_SYSTEM_COMBOBOX
ROLE_SYSTEM_COLUMN
ROLE_SYSTEM_COLUMNHEADER
..
and so on
Здравствуйте, st0nx, Вы писали:
S>Возникла необходимость определить тип элемента управления(ListBox, ComboBox, Button...) чужого окна, имея его идентификатор(handle) S>Пробовал определять по классу или\и по стилю. Но например некие элементы из окна MS Office Outlook:
S>
S>Это имя класса и его стиль. В общем, вопрос в том: каким еще образом можно определить, какой это элемент управления, если используется нестандартный класс при его создании?
Здравствуйте, st0nx, Вы писали:
S>В общем, вопрос в том: каким еще образом можно определить, какой это элемент управления, если используется нестандартный класс при его создании?
В общем случае — никак.
Лучше расскажи, что ты хочешь сделать.
Возникла необходимость определить тип элемента управления(ListBox, ComboBox, Button...) чужого окна, имея его идентификатор(handle)
Пробовал определять по классу или\и по стилю. Но например некие элементы из окна MS Office Outlook:
MsoCommandBar 56000000
MsoCommandBar 46000000
Это имя класса и его стиль. В общем, вопрос в том: каким еще образом можно определить, какой это элемент управления, если используется нестандартный класс при его создании?
Здравствуйте, rus blood, Вы писали:
RB>Здравствуйте, st0nx, Вы писали:
S>>В общем, вопрос в том: каким еще образом можно определить, какой это элемент управления, если используется нестандартный класс при его создании?
RB>В общем случае — никак. RB>Лучше расскажи, что ты хочешь сделать.
Мне необходимо собрать некие свойства, в том числе и что за тип, всех окон и элементов управления чужого процесса. Вот.
Здравствуйте, kero, Вы писали:
S>>В общем, вопрос в том: каким еще образом можно определить, какой это элемент управления, если используется нестандартный класс при его создании?
K>Try WM_GETDLGCODE ( => DLGC_WANTARROWS etc)
Спасибо! Это пока лучшее из того, что есть. Но увы не все объекты можно так определить.
Здравствуйте, st0nx, Вы писали:
S>Это имя класса и его стиль. В общем, вопрос в том: каким еще образом можно определить, какой это элемент управления, если используется нестандартный класс при его создании?
Обработчики стандартных контролов(GetWindowLong(hWnd, GWL_WNDPROC); ) лежат в области кода библиотек User32.dll и ComCtl32.dll, если только они не перехвачены... хотя, перехваченные стандартные контролы уже как бы не совсем стандартные
Ну а самый простой способ: перебрать все названия стандатных классов и проверить, что это (GetClassName(hWnd....); ) не они.
Здравствуйте, st0nx, Вы писали:
S>>>В общем, вопрос в том: каким еще образом можно определить, какой это элемент управления, если используется нестандартный класс при его создании?
K>>Try WM_GETDLGCODE ( => DLGC_WANTARROWS etc) S>Спасибо! Это пока лучшее из того, что есть. Но увы не все объекты можно так определить.
Здравствуйте, kero, Вы писали:
K>>Try WM_GETDLGCODE ( => DLGC_WANTARROWS etc)
K>Хотя конкретно для MsoCommandBar это не сработает.
Для него, может, и не сработает, но поясни. что ты хочешь тут получить ? В свое время я соорудил самописный контрол, и он отзывался на WM_GETDLGCODE, кажется, тем же DLGC_WANTARROWS. А может, и не тем. В любом случае — что ты о моем контроле ценного узнал бы, послав ему это сообщение ?
Здравствуйте, Pavel Dvorkin, Вы писали:
K>>>Try WM_GETDLGCODE ( => DLGC_WANTARROWS etc) K>>Хотя конкретно для MsoCommandBar это не сработает.
PD>Для него, может, и не сработает, но поясни. что ты хочешь тут получить ? В свое время я соорудил самописный контрол, и он отзывался на WM_GETDLGCODE, кажется, тем же DLGC_WANTARROWS. А может, и не тем. В любом случае — что ты о моем контроле ценного узнал бы, послав ему это сообщение ?
Насчет ценности чего бы то ни было — вопрос всегда спорный, но в предлагаемом тобой случае как раз все очень просто:
если PavelDvorkinСамописныйКонтрол на WM_GETDLGCODE возвращает DLGC_WANTARROWS, которое не фига не соответствует функционалу PavelDvorkinСамописныйКонтрола, — то это значит, что PavelDvorkinСамописныйКонтрол — халтура
Здравствуйте, kero, Вы писали:
PD>>Для него, может, и не сработает, но поясни. что ты хочешь тут получить ? В свое время я соорудил самописный контрол, и он отзывался на WM_GETDLGCODE, кажется, тем же DLGC_WANTARROWS. А может, и не тем. В любом случае — что ты о моем контроле ценного узнал бы, послав ему это сообщение ?
K>Насчет ценности чего бы то ни было — вопрос всегда спорный, но в предлагаемом тобой случае как раз все очень просто: K>если PavelDvorkinСамописныйКонтрол на WM_GETDLGCODE возвращает DLGC_WANTARROWS, которое не фига не соответствует функционалу PavelDvorkinСамописныйКонтрола, — то это значит, что PavelDvorkinСамописныйКонтрол — халтура
А можно поинтересоваться, откуда ты взял, что возвращаемый WM_GETDLGCODE код для этого PavelDvorkinСамописныйКонтрол не соответствует функционалу ? Ты этот контрол видел ? Ты что-то о его функционале знаешь ?
Смею тебя заверить, что он вполне соответствовал, так как я это сообщение обрабатывал, как требовалось. Был ли там DLGC_WANTARROWS в качестве ответа или что-то иное — уже не помню, об этом я честно написал, см. выше.
Так что твое обвинение в халтуре, мягко говоря
a) ничем не обосновано
б) представляет собой попытку уйти от вопроса : "Что ты о моем контроле ценного узнал бы, послав ему это сообщение ?"
А поэтому твой ответ я могу расценивать только как попытку уйти от вопроса и заняться демагогией вместо ответа.
Не согласен — давай сюда ответ на вопрос. Без рассуждений обо мне и моем коде, который ты не видел.
Здравствуйте, Pavel Dvorkin, Вы писали:
[...]
Ни фига себе реакция на добродушную шутку, что за бред...
А в результате — желание общаться испарилось, расценивай как хочешь.
Здравствуйте, kero, Вы писали:
K>Здравствуйте, Pavel Dvorkin, Вы писали: K>[...] K>Ни фига себе реакция на добродушную шутку, что за бред...
Вообще говоря, если обвинить собеседника в халтуре, не имея оснований к тому, а в конце поставить смайлик — шуткой это можно назвать разве что очень низкого качества.
K>А в результате — желание общаться испарилось, расценивай как хочешь.
Естественно, испарилось, коль скоро на вопрос ответить нечего
PD>Вообще говоря, если обвинить собеседника в халтуре, не имея оснований к тому, а в конце поставить смайлик — шуткой это можно назвать разве что очень низкого качества. K>>А в результате — желание общаться испарилось, расценивай как хочешь. PD>Естественно, испарилось, коль скоро на вопрос ответить нечего
А ты поменьше в строну уходи и юмор свой демонстрируй, а вместо этого лучше просто на вопрос ответь. Он ведь по существу был (и остается), и не очень красиво всякими уловками от него уходить. А если ответить нечего — так и скажи, промахнулся, мол, с ответом. По крайней мере честнее будет...
Здравствуйте, st0nx, Вы писали:
S>Мне необходимо собрать некие свойства, в том числе и что за тип, всех окон и элементов управления чужого процесса. Вот.
У окон есть класс, оконная функция, размеры, стили и т.д., но никакого типа нет. Сформулируй , что именно надо узнать, не употребляя слова "тип".
AccessibleObjectFromWindow и get_accRole выполняются нормально. При обходе всех элементов окна Outlook например, получаю одинаковое значение 9.
Видимо, что то не до понял из msdn...
Здравствуйте, mr.pavel, Вы писали:
MP>MSAA MP>Oleacc.h
MP>MSDN for details
MP>
MP>Accessible: IAccessible;
MP>..
MP>if Succeeded(AccessibleObjectFromWindow(AWnd, ..,..IAccessible, Accessible)) then
MP> Role := Accessible.get_accRole(....)
MP>
MP>and check the Role against:
MP>ROLE_SYSTEM_TEXT MP>ROLE_SYSTEM_DROPLIST MP>ROLE_SYSTEM_COMBOBOX MP>ROLE_SYSTEM_COLUMN MP>ROLE_SYSTEM_COLUMNHEADER MP>.. MP>and so on
MP>Здравствуйте, st0nx, Вы писали:
S>>Возникла необходимость определить тип элемента управления(ListBox, ComboBox, Button...) чужого окна, имея его идентификатор(handle) S>>Пробовал определять по классу или\и по стилю. Но например некие элементы из окна MS Office Outlook:
S>>
S>>Это имя класса и его стиль. В общем, вопрос в том: каким еще образом можно определить, какой это элемент управления, если используется нестандартный класс при его создании?