Die toepassingsprogrammeringskoppelvlak van Windows-bedryfstelsels word deur 'n stel funksies voorgestel. Wanneer dit genoem word, kan verskillende voorwerpe (lêers, prosesse, drade, sinchronisasie-voorwerpe, ens.) Geskep word. Om voldoende abstrakte en verenigde toegang tot hierdie voorwerpe te bied, word die identifikasie daarvan met behulp van beskrywers - "onpersoonlike" numeriese waardes gedoen.
Nodig
- - 'n vertaler uit 'n programmeertaal wat die gebruik van Windows API toelaat;
- - moontlik Windows Platform SDK.
Instruksies
Stap 1
Kry vensterhandvatsels. Daar is baie maniere om dit te doen. Die presiese metode hang af van die einddoel.
Gebruik die CreateWindow of CreateWindowEx API's om 'n venster te skep. Hulle gee sukses aan sukses en NULL vir mislukking.
Soek na vensters op die hoogste vlak en kindervensters volgens verskillende parameters deur onderskeidelik die FindWindow- en FindWindowEx-funksies te gebruik. By suksesvolle soektog sal die vensterhandvatsel verkry word.
Tel vensters met EnumWindows, EnumChildWindows, EnumThreadWindows-funksies. Die handvatsels van die gevindde vensters sal oorgedra word as 'n parameter vir die terugbelfunksie.
Vind die handvatsel na die venster op 'n spesifieke posisie op die skerm. Bel een van die funksies: WindowFromPoint, ChildWindowFromPoint of ChildWindowFromPointEx.
Stap 2
Kry proseshandvatsels. Skep 'n nuwe proses deur die funksies CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW of CreateProcessWithLogonW aan te roep. Hulle gee almal 'n handgreep na die nuwe proses in die hProcess-veld van die PROCESS_INFORMATION-struktuur, waarvan die aanwyser as laaste parameter aan hulle gestuur moet word.
Vind die handvatsel van die proses deur die bekende identifiseerder daarvan. Gebruik die OpenProcess-oproep. Die ID's van alle lopende prosesse kan verkry word, byvoorbeeld met behulp van die CreateToolhelp32Snapshot-, Process32First- en Process32Next-funksies van die Tool Help-biblioteek.
Kry die pseudo-handvatsel van die huidige proses met behulp van die GetCurrentProcess-funksie.
Stap 3
Kry beskrywers van drade. Die CreateThread- en CreateRemoteThread-funksies skep drade in onderskeidelik hul eie en iemand anders se proses om hul handvatsels terug te gee. U kan 'n bestaande draad met behulp van die identifiseerder oopmaak en die ooreenstemmende handvatsel kry met die OpenThread-funksie. Die pseudo-handvatsel van die huidige vloei word teruggestuur wanneer GetCurrentThread gebel word.
Stap 4
Beskrywers vir lêers, gidse, fisiese skywe, skyfvolumes, konsoles, kommunikasiehulpbronne (I / O-poorte), posgleuwe en genoemde pype kan verkry word deur 'n enkele funksie, CreateFile, te noem.
Stap 5
Lêer-na-geheue-kartering-objekbeskrywers word teruggestuur deur oproepe na CreateFileMapping en OpenFileMapping.
Stap 6
Die funksies CreateMutex, CreateSemaphore en CreateEvent skep, en die funksies OpenMutex, OpenSemaphore en OpenEvent maak bestaande sinkroniseringsobjekte (mutexes, semafore en gebeure) oop. Hulle gee almal beskrywers terug.
Stap 7
Alle GDI-voorwerpe (soos toestelskontekste, lettertipes, kwaste, potlode, hardewareafhanklike en onafhanklike bitmaps, DIB-afdelings, ens.) Word deur hul beskrywings gemanipuleer. Die funksies vir die skep van GDI-voorwerpe is baie en moet in die MSDN-afdeling geraadpleeg word vir meer inligting.
Stap 8
'N Beskrywer wat in een proses verkry word, kan gewoonlik nie in 'n ander gebruik word nie. In sommige gevalle is dit egter moontlik om 'n duplikaatbeskrywer te kry wat ooreenstem met die primêre voorwerp. Bel die DuplicateHandle API om die handvatsel te dupliseer. Dit kan byvoorbeeld gebruik word om naamlose sinchronisasie-voorwerpe of -kanale tussen verskeie prosesse te deel.