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

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

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

Вам знадобиться

  • - пакунок Platform SDK;
  • - компілятор.

Інструкція

1. Отримайте дескриптор вікна, створивши його. Зробіть виклики API-функцій CreceWindow або CreceWindowEx, або викличте відповідні методи-обгортки (на необхідних об 'єктах) класів використовуваного фреймворку або бібліотеки, що інкапсулюють функціонал роботи з вікнами або елементами управління. Функції CreceWindow і CreceWindowEx безпосередньо повертають дескриптор вікна при успішному його створенні. При невдалому виклику вони повертають значення NULL. Код причини помилки може бути запитаний за допомогою API-функції GetLastError. Прототипи і докладний опис параметрів функцій CreceWindow і CreceWindowEx можна отримати за посиланнями http://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 .При використанні класів різних фреймворків створення об 'єктів вікон операційної системи може відбуватися як явно (за допомогою виклику методу), так і неявлення Тому дескриптор вікна краще отримувати на готовому ініціалізованому об 'єкті. Про методи класів, які повертають дескриптор вікна, інкапсулюваний об 'єктом, можна дізнатися в документації відповідного фреймворку. Наприклад, у MFC подібним методом є GetSafeHwnd класу CWnd.

2. Отримайте дескриптор вікна шляхом його пошуку. Використовуйте API-функції FindWindow і FindWindowEx або відповідні методи-обгортки об 'єктів класів застосовуваного фреймворку. Функція FindWindow повертає дескриптор вікна верхнього рівня, якщо воно знайдено або NULL при невдачі. Пошук проводиться за назвою класу і заголовком вікна. Опис параметрів та аспектів роботи функції знаходиться за посиланням http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499% 28v = vs.85% 29 .aspx .Семантика роботи функції FindWindowEx аналогічна FindWindow з тією лише різницею, що вона виробляє Документація для FindWindowEx наведена за посиланням http://msdn.microsoft.com/en-us/library/windows/desktop/ms633500%28v=vs.85%29.aspx .

3. Знайдіть дескриптор вікна під час їх перерахування. Скористайтеся API-функціями EnumWindows, EnumChildWindows, EnumThreadWindows або методами об 'єктів класів використовуваного фреймворку. Функції EnumWindows і EnumChildWindows перераховують вікна верхнього рівня і дочірні вікна відповідно. Функція EnumThreadWindows перераховує всі не дочірні вікна зазначеного потоку. Кожній з цих функцій повинен бути переданий покажчик на процедуру зворотного виклику, якою в процесі роботи будуть передаватися дескриптори знайдених вікон в якості параметрів. Комбінуючи функції перерахування, отримуючи та аналізуючи властивості вікон у процедурі зворотного виклику, можна знайти дескриптор необхідного вікна. Документацію для описаних функцій наведено за посиланнями:- EnumWindows: http://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: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633495%28v=vs.85%29.aspx .

4. Отримайте дескриптор вікна за відомими координатами. Функції WindowFromPoint, ChildWindowFromPoint, ChildWindowFromPointEx повертають дескриптори вікон, до областей розташування яких належить зазначена точка. Функція WindowFromPoint найбільш проста у використанні, але не повертає дескриптори прихованих і відключених вікон. Документація щодо її застосування знаходиться за посиланням http://msdn.microsoft.com/en-us/library/windows/desktop/ms633558% 28v = vs.85% 29 .aspx .Функції ChildWindowFromPoint і ChildWindowFromPo Поведінкою ChildWindowFromPointEx можна гнучко керувати за допомогою додаткового параметра. Документація для даних функцій наводиться за посиланнями:- ChildWindowFromPoint: http://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 .