Rozhranie aplikačného programovania operačných systémov Windows je predstavované súborom funkcií. Po ich vyvolaní je možné vytvoriť rôzne objekty (súbory, procesy, vlákna, synchronizačné objekty atď.). Na zabezpečenie dostatočne abstraktného a jednotného prístupu k týmto objektom sa ich identifikácia vykonáva pomocou deskriptorov - „neosobných“číselných hodnôt.
Nevyhnutné
- - prekladač z programovacieho jazyka, ktorý umožňuje použitie Windows API;
- - možno Windows Platform SDK.
Inštrukcie
Krok 1
Získajte okenné kľučky. Existuje mnoho spôsobov, ako to urobiť. Presná metóda závisí od konečného cieľa.
Na vytvorenie okna použite API CreateWindow alebo CreateWindowEx. Vrátia kľučku pri úspechu a NULL pri neúspechu.
Vyhľadávajte okná najvyššej úrovne a podradené okná podľa rôznych parametrov pomocou funkcií FindWindow a FindWindowEx. Pri úspešnom vyhľadaní sa získa kľučka okna.
Vymenujte okná pomocou funkcií EnumWindows, EnumChildWindows, EnumThreadWindows. Úchytky nájdených okien sa odovzdajú ako parameter funkcii spätného volania.
Nájdite rukoväť k oknu umiestnenému na konkrétnom mieste na obrazovke. Zavolajte jednu z funkcií: WindowFromPoint, ChildWindowFromPoint alebo ChildWindowFromPointEx.
Krok 2
Získajte procesné rukoväte. Vytvorte nový proces volaním funkcií API CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW alebo CreateProcessWithLogonW. Všetci vrátia popisovač k novému procesu v poli hProcess štruktúry PROCESS_INFORMATION, pričom ukazovateľ, ktorý by im mal byť odovzdaný ako posledný parameter.
Vyhľadajte popisovač procesu podľa známeho identifikátora. Použite volanie OpenProcess. ID všetkých spustených procesov je možné získať napríklad pomocou funkcií CreateToolhelp32Snapshot, Process32First a Process32Next v knižnici Pomocníka nástrojov.
Načítajte pseudoúchyt aktuálneho procesu pomocou funkcie GetCurrentProcess.
Krok 3
Získajte deskriptory vlákien. Funkcie CreateThread a CreateRemoteThread vytvárajú vlákna vo vlastnom a cudzom procese a vracajú svoje rukoväte. Existujúce vlákno môžete otvoriť pomocou jeho identifikátora a získať zodpovedajúci popisovač pomocou funkcie OpenThread. Keď sa volá GetCurrentThread, vráti sa pseudo-popisovač aktuálneho toku.
Krok 4
Deskriptory súborov, adresárov, fyzických diskov, diskových zväzkov, konzol, komunikačných prostriedkov (I / O porty), poštových slotov a pomenovaných prepojení je možné získať volaním jednej funkcie CreateFile.
Krok 5
Deskriptory objektov mapovania súborov do pamäte sa vracajú volaniami CreateFileMapping a OpenFileMapping.
Krok 6
Funkcie CreateMutex, CreateSemaphore a CreateEvent vytvárajú a funkcie OpenMutex, OpenSemaphore a OpenEvent otvárajú existujúce synchronizačné objekty (mutexy, semafory a udalosti). Všetci vracajú deskriptory.
Krok 7
So všetkými objektmi GDI (ako sú kontexty zariadení, písma, štetce, ceruzky, hardvérové a nezávislé bitmapy, sekcie DIB atď.) Sa manipuluje prostredníctvom ich deskriptorov. Funkcií na vytváranie objektov GDI je veľa a informácie o nich by ste si mali prečítať v časti MSDN.
Krok 8
Deskriptor získaný v jednom procese spravidla nemožno použiť v inom. V niektorých prípadoch je však možné získať duplikátny deskriptor zodpovedajúci primárnemu objektu. Zavolajte DuplicateHandle API a duplikujte popisovač. To sa dá použiť napríklad na zdieľanie nepomenovaných synchronizačných objektov alebo kanálov medzi viacerými procesmi.