A interface de programação de aplicativos dos sistemas operacionais Windows é representada por um conjunto de funções. Quando são chamados, vários objetos (arquivos, processos, threads, objetos de sincronização, etc.) podem ser criados. Para fornecer um acesso suficientemente abstrato e unificado a esses objetos, sua identificação é realizada por meio de descritores - valores numéricos "impessoais".
Necessário
- - um tradutor de uma linguagem de programação que permite o uso da API do Windows;
- - possivelmente SDK da plataforma Windows.
Instruções
Passo 1
Obtenha puxadores de janela. Há muitas maneiras de fazer isso. O método exato depende do objetivo final.
Use as APIs CreateWindow ou CreateWindowEx para criar uma janela. Eles retornam um identificador em caso de sucesso e NULL em caso de falha.
Procure janelas de nível superior e janelas filho por vários parâmetros usando as funções FindWindow e FindWindowEx, respectivamente. Em uma busca bem-sucedida, o identificador da janela será obtido.
Enumere janelas com funções EnumWindows, EnumChildWindows, EnumThreadWindows. As alças das janelas encontradas serão passadas como parâmetro para a função de retorno de chamada.
Encontre a alça da janela localizada em uma posição específica na tela. Chame uma das funções: WindowFromPoint, ChildWindowFromPoint ou ChildWindowFromPointEx.
Passo 2
Obtenha identificadores de processo. Crie um novo processo chamando as funções de API CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW ou CreateProcessWithLogonW. Todos eles retornam um identificador para o novo processo no campo hProcess da estrutura PROCESS_INFORMATION, o ponteiro para o qual deve ser passado a eles como o último parâmetro.
Encontre o identificador para o processo por seu identificador conhecido. Use a chamada OpenProcess. Os IDs de todos os processos em execução podem ser obtidos, por exemplo, usando as funções CreateToolhelp32Snapshot, Process32First e Process32Next da biblioteca Tool Help.
Recupere o pseudo identificador do processo atual usando a função GetCurrentProcess.
etapa 3
Obtenha descritores de tópicos. As funções CreateThread e CreateRemoteThread criam threads em seu próprio processo e no processo de outra pessoa, respectivamente, retornando seus identificadores. Você pode abrir um thread existente usando seu identificador e obter o identificador correspondente usando a função OpenThread. O pseudo-identificador do fluxo atual é retornado quando GetCurrentThread é chamado.
Passo 4
Descritores para arquivos, diretórios, discos físicos, volumes de disco, consoles, recursos de comunicação (portas de E / S), slots de correio e canais nomeados podem ser obtidos chamando uma única função, CreateFile.
Etapa 5
Os descritores de objeto de mapeamento de arquivo para memória são retornados por chamadas para CreateFileMapping e OpenFileMapping.
Etapa 6
As funções CreateMutex, CreateSemaphore e CreateEvent criam e as funções OpenMutex, OpenSemaphore e OpenEvent abrem objetos de sincronização existentes (mutexes, semáforos e eventos). Todos eles retornam descritores.
Etapa 7
Todos os objetos GDI (como contextos de dispositivo, fontes, pincéis, lápis, bitmaps dependentes e independentes de hardware, seções DIB, etc.) são manipulados por meio de seus descritores. As funções para criar objetos GDI são numerosas e devem ser consultadas na seção MSDN para obter informações sobre elas.
Etapa 8
Um descritor obtido em um processo, via de regra, não pode ser utilizado em outro. No entanto, em alguns casos, é possível obter um descritor duplicado correspondente ao objeto principal. Chame a API DuplicateHandle para duplicar o identificador. Isso pode ser usado, por exemplo, para compartilhar objetos de sincronização sem nome ou canais entre vários processos.