Вам понадобится
  • - транслятор с языка программирования, допускающего использование Windows API;
  • - возможно, Windows Platform SDK.
Инструкция
1
Получите дескрипторы окон. Это можно сделать очень многими путями. Конкретный способ зависит от конечной цели.

Используйте API-функции CreateWindow или CreateWindowEx для создания окна. Они возвращают дескриптор в случае успеха и NULL в случае неудачи.

Произведите поиск окон верхнего уровня и дочерних окон по различным параметрам с использованием функций FindWindow и FindWindowEx соответственно. При успешном поиске будет получен дескриптор окна.

Перечисляйте окна функциями EnumWindows, EnumChildWindows, EnumThreadWindows. Дескрипторы найденных окон будут передаваться в качестве параметра функции обратного вызова.

Найдите дескриптор окна, расположенного в определенной позиции на экране. Произведите вызов одной из функций: WindowFromPoint, ChildWindowFromPoint или ChildWindowFromPointEx.
2
Получите дескрипторы процессов. Создайте новый процесс при помощи вызова API-функций CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW или CreateProcessWithLogonW. Все они возвращают дескриптор нового процесса в поле hProcess структуры типа PROCESS_INFORMATION, указатель на которую должен передаваться им последним параметром.

Найдите дескриптор процесса по его известному идентификатору. Используйте вызов OpenProcess. Идентификаторы всех запущенных процессов могут быть получены, например, при помощи функций CreateToolhelp32Snapshot, Process32First и Process32Next библиотеки Tool Help.

Извлеките псевдо-дескриптор текущего процесса, используя функцию GetCurrentProcess.
3
Получите дескрипторы потоков. Функции CreateThread и CreateRemoteThread создают потоки в своем и чужом процессе, соответственно, возвращая их дескрипторы. Открыть существующий поток с использованием его идентификатора, получив соответствующий дескриптор, можно при помощи функции OpenThread. Псевдо-дескриптор текущего подтока возвращается при вызове GetCurrentThread.
4
Дескрипторы файлов, директорий, физических дисков, томов на дисках, консолей, коммуникационных ресурсов (портов ввода-вывода), почтовых слотов и именованных каналов могут быть получены при помощи вызова единственной функции - CreateFile.
5
Дескрипторы объектов отображения файлов на память возвращаются при вызовах CreateFileMapping и OpenFileMapping.
6
Функции CreateMutex, CreateSemaphore и CreateEvent создают, а функции OpenMutex, OpenSemaphore и OpenEvent открывают существующие объекты синхронизации (мьютексы, семафоры и события). Все они возвращают дескрипторы.
7
Манипуляции всеми объектами GDI (такими как контексты устройств, шрифты, кисти, карандаши, аппаратно зависимые и независимые растры, DIB-секции, и т.д.) производятся посредством их дескрипторов. Функции для создания объектов GDI многочисленны и за получением информации о них стоит обратиться к соответствующему разделу MSDN.
8
Дескриптор, полученный в одном процессе, как правило, не может использоваться в другом. Однако в ряде случаев возможно получение дескриптора-дубликата, соответствующего первичному объекту. Произведите вызов API-функции DuplicateHandle для осуществления дублирования дескриптора. Это может быть применено, например, для реализации совместного использования неименованных объектов синхронизации или каналов несколькими процессами.