Возникла необходимость определить тип элемента управления(ListBox, ComboBox, Button...) чужого окна, имея его идентификатор(handle)
Пробовал определять по классу или\и по стилю. Но например некие элементы из окна MS Office Outlook:
MsoCommandBar 56000000
MsoCommandBar 46000000
Это имя класса и его стиль. В общем, вопрос в том: каким еще образом можно определить, какой это элемент управления, если используется нестандартный класс при его создании?
Здравствуйте, st0nx, Вы писали:
S>В общем, вопрос в том: каким еще образом можно определить, какой это элемент управления, если используется нестандартный класс при его создании?
В общем случае — никак.
Лучше расскажи, что ты хочешь сделать.
Здравствуйте, 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СамописныйКонтрол — халтура
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>Это имя класса и его стиль. В общем, вопрос в том: каким еще образом можно определить, какой это элемент управления, если используется нестандартный класс при его создании?
Здравствуйте, 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>Мне необходимо собрать некие свойства, в том числе и что за тип, всех окон и элементов управления чужого процесса. Вот.
У окон есть класс, оконная функция, размеры, стили и т.д., но никакого типа нет. Сформулируй , что именно надо узнать, не употребляя слова "тип".