Реальный hwnd из точки

#winapi

#winapi

Вопрос:

Когда мы используем WindowFromPoint функцию winapi, мы обычно можем получить случай, когда Point указывает на некоторый элемент управления в окне. И в таких случаях WindowFromPoint возвращает дескриптор этому элементу управления, а не окну, которое обрабатывает этот элемент управления.

Например, в моем небольшом тестовом приложении, если я укажу на «тело» браузера Chrome, я получу элемент управления с class = Chrome_RenderWidgetHostHWND и его hwnd.

Но что мне нужно, так это получить «родительское» окно для этого элемента управления (которым, очевидно, должно быть окно chrome).

Комментарии:

1. Под «указателем» вы подразумеваете «дескриптор».

2. @Andreas Rejbrand: да, дескриптор окна. Исправлено, спасибо.

Ответ №1:

Перейдите к родителям, используя GetAncestor() передачу GA_PARENT . Это отличается от вызова GetParent() , который вернет владельца, если окно является окном верхнего уровня.

Комментарии:

1. Да, но, похоже, GA_ROOT это лучше соответствует моим ожиданиям, не так ли?

2. @zerkms Может GA_ROOT быть лучше, я не уверен точно, какое окно вы ищете. Только вы это знаете! 😉

3. обычное окно, которое является верхним контейнером для всех элементов управления, с заголовком и кнопками свернуть / развернуть / закрыть.

4. @zerkms В таком случае GA_ROOT предоставит вам окно верхнего уровня.

5. хорошо, спасибо. /me притворился, что он понял разницу между вторыми GetAncestor() аргументами.

Ответ №2:

Разве вы не можете просто использовать getParent? Продолжайте перемещаться, пока не найдете окно рабочего стола.