Вам понадобится
  • - пакет Platform SDK;
  • - компилятор.
Инструкция
1
Получите дескриптор окна, создав его. Произведите вызовы API-функций CreateWindow или CreateWindowEx, либо вызовите соответствующие методы-обертки (на необходимых объектах) классов используемого фреймворка или библиотеки, инкапсулирующих функционал работы с окнами или элементами управления.Функции CreateWindow и CreateWindowEx непосредственно возвращают дескриптор окна при успешном его создании. При неудачном вызове они возвращают значение NULL. Код причины ошибки может быть запрошен при помощи API-функции GetLastError. Прототипы и подробное описание параметров функций CreateWindow и CreateWindowEx можно получить по ссылкам 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 .При использовании классов различных фреймворков создание объектов окон операционной системы может происходить как явно (посредством вызова метода), так и неявно (реализация стратегии RAII). Поэтому дескриптор окна лучше получать на готовом инициализированном объекте. О методах классов, возвращающих дескриптор окна, инкапсулируемый объектом, можно узнать в документации соответствующего фреймворка. Например, в 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 и ChildWindowFromPointEx находят дескрипторы дочерних окон заданного родительского окна, принадлежащих заданной точке. При этом поведением 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 .