#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? Продолжайте перемещаться, пока не найдете окно рабочего стола.