Як отримати дескриптор вікна

Концепція інтерфейсу користувача в ОС Windows побудована на понятті вікна. Діалоги, кнопки, панелі управління, списки - все це вікна. Тому для того щоб провести які-небудь дії з яким або елементом інтерфейсу свого або чужого додатки, потрібно отримати дескриптор вікна.
Як отримати дескриптор вікна




Вам знадобиться
  • - пакет Platform SDK;
  • - компілятор.
Інструкція
1
Отримайте дескриптор вікна, створивши його. Проведіть виклики API-функцій CreateWindow або CreateWindowEx, або викличте відповідні методи-обгортки (на необхідних об'єктах) класів використовуваного фреймворку або бібліотеки, інкапсулюючих функціонал роботи з вікнами або елементами управленія.Функціі CreateWindow і CreateWindowEx безпосередньо повертають дескриптор вікна при успішному його створенні. При невдалому виклику вони повертають значення NULL. Код причини помилки може бути запитаний за допомогою API-функції GetLastError. Прототипи і докладний опис параметрів функцій CreateWindow і CreateWindowEx можна отримати за посиланнями https://msdn.microsoft.com/en-us/library/windows/desktop/ms632679%28v=vs.85%29.aspx і http: // msdn .microsoft.com / en-us / library / windows / desktop / ms632680% 28v = vs.85% 29.aspx .При використанні класів різних фреймворків створення об'єктів вікон операційної системи може відбуватися як явно (за допомогою виклику методу), так і неявно (реалізація стратегії RAII). Тому дескриптор вікна краще отримувати на готовому ініціалізованих об'єкті. Про методи класів, які повертають дескриптор вікна, інкапсуліруемий об'єктом, можна дізнатися в документації відповідного фреймворку. Наприклад, в MFC подібним методом є GetSafeHwnd класу CWnd.


2
Отримайте дескриптор вікна шляхом його пошуку. Використовуйте API-функції FindWindow і FindWindowEx або відповідні методи-обгортки об'єктів класів застосовуваного фреймворка.Функція FindWindow повертає дескриптор вікна верхнього рівня, якщо воно знайдено або NULL при невдачі. Пошук здійснюється по імені класу і заголовку вікна. Опис параметрів і аспектів роботи функції знаходиться за посиланням https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499%28v=vs.85%29.aspx .Семантіка роботи функції FindWindowEx аналогічна FindWindow з тією лише різницею, що вона виробляє пошук дочірніх вікон. Документація для FindWindowEx наведена за посиланням https://msdn.microsoft.com/en-us/library/windows/desktop/ms633500%28v=vs.85%29.aspx.
3
Знайдіть дескриптор вікна в процесі перерахування їх множин. Скористайтеся API-функціями EnumWindows, EnumChildWindows, EnumThreadWindows або методами об'єктів класів використовуваного фреймворка.Функціі EnumWindows і EnumChildWindows перераховують вікна верхнього рівня і дочірні вікна відповідно. Функція EnumThreadWindows перераховує все не дочірні вікна вказаного потоку. Кожній з цих функцій має бути переданий покажчик на процедуру зворотного виклику, якої в процесі роботи будуть передаватися дескриптори знайдених вікон в якості параметров.Комбініруя функції перерахування, отримуючи і аналізуючи властивості вікон у процедурі зворотного виклику, можна знайти дескриптор необхідного вікна. Документація для описаних функцій наведена за посиланнями: - EnumWindows: https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497%28v=vs.85%29.aspx - EnumChildWindows: http: // msdn.microsoft.com/en-us/library/windows/desktop/ms633494%28v=vs.85%29.aspx - EnumThreadWindows: https://msdn.microsoft.com/en-us/library/windows/desktop /ms633495%28v=vs.85%29.aspx.
4
Отримайте дескриптор вікна по відомим координатам. Функції WindowFromPoint, ChildWindowFromPoint, ChildWindowFromPointEx повертають дескриптори вікон, до областей розташування яких належить задана точка.Функція WindowFromPoint найбільш проста у використанні, але не повертає дескриптори прихованих і відключених вікон. Документація щодо її застосування знаходиться за посиланням https://msdn.microsoft.com/en-us/library/windows/desktop/ms633558%28v=vs.85%29.aspx .Функціі ChildWindowFromPoint і ChildWindowFromPointEx знаходять дескриптори дочірніх вікон заданого батьківського вікна, належать заданій точці. При цьому поведінкою ChildWindowFromPointEx можна гнучко управляти за допомогою додаткового параметра. Документація для даних функцій наводиться за посиланнями: - ChildWindowFromPoint: https://msdn.microsoft.com/en-us/library/windows/desktop/ms632676%28v=vs.85%29.aspx - ChildWindowFromPointEx: http: // msdn.microsoft.com/en-us/library/windows/desktop/ms632677%28v=vs.85%29.aspx.
Переглядів: 2311

Увага, тільки СЬОГОДНІ!