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

Концепція призначеного для користувача інтерфейсу в ОС 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.


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


Оцініть, будь ласка статтю
Всього голосів: 144
Увага, тільки СЬОГОДНІ!