Sučelje za aplikacijsko programiranje operacijskih sustava Windows predstavljeno je skupom funkcija. Kada se pozovu, mogu se stvoriti različiti objekti (datoteke, procesi, niti, objekti sinkronizacije itd.). Da bi se pružio dovoljno apstraktan i jedinstven pristup tim objektima, njihova se identifikacija vrši pomoću deskriptora - "neosobnih" numeričkih vrijednosti.
Potrebno
- - prevoditelj s programskog jezika koji omogućuje upotrebu Windows API-ja;
- - moguće Windows Platform SDK.
Upute
Korak 1
Nabavite ručke za prozor. Postoji mnogo načina za to. Točna metoda ovisi o krajnjem cilju.
Za izradu prozora koristite API-je CreateWindow ili CreateWindowEx. Vraćaju uspjeh, a NULL neuspjeh.
Pretražite prozore najviše razine i podređene prozore prema različitim parametrima pomoću funkcija FindWindow i FindWindowEx. Uspješnom pretragom dobit će se kvaka prozora.
Nabroji prozore s funkcijama EnumWindows, EnumChildWindows, EnumThreadWindows. Ručke pronađenih prozora proslijedit će se kao parametar funkciji povratnog poziva.
Pronađite kvaku do prozora koji se nalazi na određenom mjestu na zaslonu. Pozovite jednu od funkcija: WindowFromPoint, ChildWindowFromPoint ili ChildWindowFromPointEx.
Korak 2
Nabavite procesne ručke. Stvorite novi postupak pozivanjem API-ja CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW ili CreateProcessWithLogonW API. Svi oni vraćaju ručicu novom procesu u polju hProcess strukture PROCESS_INFORMATION, čiji bi im se pokazivač trebao proslijediti kao zadnji parametar.
Pronađite ručicu postupka prema njegovom poznatom identifikatoru. Upotrijebite poziv OpenProcess. ID-ovi svih pokrenutih procesa mogu se dobiti, na primjer, pomoću funkcija CreateToolhelp32Snapshot, Process32First i Process32Next u knjižnici Alat za pomoć.
Dohvatite pseudo ručku trenutnog postupka pomoću funkcije GetCurrentProcess.
3. korak
Nabavite deskriptore niti. Funkcije CreateThread i CreateRemoteThread stvaraju niti u vlastitom, odnosno tuđem procesu, vraćajući im ručke. Postojeću nit možete otvoriti pomoću njezinog identifikatora i dobiti odgovarajuću ručicu pomoću funkcije OpenThread. Pseudo-ručka trenutnog toka vraća se kada se pozove GetCurrentThread.
4. korak
Deskriptori datoteka, direktorija, fizičkih diskova, volumena diska, konzola, komunikacijskih resursa (I / O priključci), utora za poštu i imenovanih cijevi mogu se dobiti pozivanjem jedne funkcije CreateFile.
Korak 5
Deskriptori objekata mapiranja datoteke u memoriju vraćaju se pozivima CreateFileMapping i OpenFileMapping.
Korak 6
Funkcije CreateMutex, CreateSemaphore i CreateEvent stvaraju, a funkcije OpenMutex, OpenSemaphore i OpenEvent otvaraju postojeće sinkronizacijske objekte (muteksevi, semafori i događaji). Svi oni vraćaju deskriptore.
7. korak
Svim GDI objektima (poput konteksta uređaja, fontova, četkica, olovaka, hardverski ovisnih i neovisnih bitmapa, DIB odjeljaka itd.) Manipulira se putem njihovih deskriptora. Funkcije za stvaranje GDI objekata su brojne i treba ih potražiti u odjeljku MSDN za informacije o njima.
Korak 8
Deskriptor dobiven u jednom postupku, u pravilu, ne može se koristiti u drugom. Međutim, u nekim je slučajevima moguće dobiti duplicirani deskriptor koji odgovara primarnom objektu. Nazovite API DuplicateHandle da biste duplicirali hvataljku. To se može koristiti, na primjer, za dijeljenje neimenovanih sinkronizacijskih objekata ili kanala između više procesa.