Почему некоторые элементы управления не имеют дескриптора окна? - PullRequest
1 голос
/ 15 июня 2011

Я хочу, чтобы дескриптор окна некоторых элементов управления выполнял некоторые действия с ним (требуется дескриптор).Элементы управления находятся в другом приложении.

Как ни странно;Я обнаружил, что многие элементы управления не имеют дескриптора окна, как кнопки на панели инструментов (?) В проводнике Windows.Просто попробуйте получить ручку к кнопкам папки / поиска / (и т. Д.).Это просто дает мне 0.

Итак ... первый вопрос: почему некоторые элементы управления не имеют дескриптора окна?Разве не все окна управления в их сердцах?(Говоря просто о стандартных элементах управления, как я и ожидал, их в проводнике Windows, ничего не настраиваемых на панели и т. П.)

Это подводит меня ко второму вопросу: как с ними работать (например, с помощью EnableWindow)если вы не можете получить их дескриптор?

Большое спасибо за любые входные данные!

РЕДАКТИРОВАТЬ (ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ):

Windows Explorer является лишь примером.У меня часто возникает проблема - и в другом приложении (которое мне действительно интересно, проприетарное).У меня есть «физические» элементы управления (так как я могу получить AutomationElement этих элементов управления), но у них нет дескриптора окна.Кроме того, я пытаюсь отправить сообщение (SendMessage), чтобы получить состояние кнопки, пытаюсь выяснить, нажата она или нет (это стандартная кнопка, которая, кажется, демонстрирует такое поведение только через это сообщение - по крайней мере, насколькоЯ также видел. Кроме того, нажатое состояние может длиться намного дольше на этой кнопке, чем вы ожидаете от стандартной кнопки, хотя кнопки проводника Windows показывают аналогичное поведение, действуя как кнопки-флажки, хотя они являются (нажимными) кнопками.).SendMessage требует дескриптор окна.

Меняет ли панель инструментов каким-либо образом поведение своих дочерних элементов?Забирая их оконную ручку или что-то подобное?(Использование родительского дескриптора / идентификатора элемента управления для идентификации ??) Но тогда как использовать функции в тех элементах управления, которые требуют дескриптор окна?

Ответы [ 3 ]

7 голосов
/ 15 июня 2011

Если у них нет дескриптора, они не являются настоящими элементами управления, они просто нарисованы в виде элементов управления.

Но, конечно, кнопки панели инструментов в проводнике Windows do имеют дескрипторы окон, они являются частью панели инструментов.Используйте функции управления панелью инструментов для взаимодействия с ними, а не EnableWindow.

Или, что еще лучше, используйте документированные API для таких вещей, как поиск.Обратный инжиниринг Windows Explorer никогда не заканчивался никогда. ни для кого не заканчивался, в первую очередь для бедной команды Windows Shell, усыпанной годами взломов обратной совместимости для некоторых разработчиков, которые думали, что API-интерфейсы для всех остальных.То, что вам удастся заставить работать, очень вероятно, сломается в следующей версии Windows.

3 голосов
/ 15 июня 2011

Элементы управления, о которых вы говорите, используют класс ToolbarWindow32.Если вы хотите взаимодействовать с ними, вам нужно использовать панель инструментов APIs / message.Например, для включения кнопок вы хотите использовать TB_ENABLEBUTTON .

0 голосов
/ 30 апреля 2014

Вы можете реализовать элементы управления самостоятельно, используя GDI, OpenGL или DirectX.Попробуйте Window Detective на Mozilla Firefox, и вы увидите, что есть только одно окно.Элементы управления в диалоговых окнах не являются окнами, известными Windows.

...