Vartotojo sąsajos „Windows“koncepcija remiasi lango koncepcija. Dialogai, mygtukai, valdymo skydai, sąrašai yra visi langai. Todėl, norėdami atlikti bet kokį veiksmą naudodami bet kurį savo ar kieno nors kito programos sąsajos elementą, turite gauti lango rankeną.
Būtinas
- - Platformos SDK paketas;
- - kompiliatorius.
Nurodymai
1 žingsnis
Gaukite lango rankeną, sukurdami jį. Skambinkite į „CreateWindow“arba „CreateWindowEx“API funkcijas arba iškvieskite reikiamus naudojamo pagrindo ar bibliotekos klasių pakavimo metodus (reikalingiems objektams), apimančius darbo su „Windows“ar valdikliais funkcionalumą. Funkcijos „CreateWindow“ir „CreateWindowEx“tiesiogiai grąžina lango rankena apie sėkmingą kūrimą. Jei skambina nesėkmingai, jie grąžina NULL. Klaidos priežasties kodo galima paprašyti naudojant „GetLastError“API funkciją. Prototipus ir išsamų funkcijų „CreateWindow“ir „CreateWindowEx“parametrų aprašymą galite rasti iš nuorodų https://msdn.microsoft.com/en-us/library/windows/desktop/ms632679%28v=vs.85%29.aspx ir https:// msdn.microsoft.com / lt-us / library / windows / desktop / ms632680% 28v = vs.85% 29.aspx Naudojant skirtingų rėmų klases, operacinės sistemos lango objektai gali būti kuriami tiesiogiai (iškviečiant metodą) arba netiesiogiai (RAII strategijos įgyvendinimas). Todėl geriau gauti lango rankeną ant paruošto inicializuoto objekto. Apie klasių, kurios grąžina objekto apgaubtą lango rankeną, metodus galite sužinoti atitinkamos sistemos dokumentuose. Pavyzdžiui, naudojant MFC, panašus metodas yra „GetSafeHwnd“iš CWnd klasės.
2 žingsnis
Gaukite lango rankeną jo ieškodami. Naudokite „FindWindow“ir „FindWindowEx“API funkcijas arba atitinkamus klasės objektų įvyniojimo įrankius, kuriuos naudojate. „FindWindow“grąžina rankeną į viršutinio lygio langą, jei jis rastas, arba NULL, jei nepavyksta. Paieška atliekama pagal klasės pavadinimą ir lango pavadinimą. Parametrų ir funkcijos aspektų aprašą galite rasti nuorodoje https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499%28v=vs.85%29.aspx. funkcija „FindWindowEx“yra panaši į „FindWindow“, nes skirtumas tik tas, kad ji ieško vaikų langų. „FindWindowEx“dokumentus galima rasti šiuo adresu:
3 žingsnis
Raskite lango rankeną, nurodydami jų rinkinius. Naudokite API funkcijas „EnumWindows“, „EnumChildWindows“, „EnumThreadWindows“arba naudojamų struktūrų klasės objektų metodus. Funkcijos „EnumWindows“ir „EnumChildWindows“išvardija atitinkamai aukščiausio lygio langus ir antrinius langus. Funkcija „EnumThreadWindows“surašo visus nurodytos gijos ne antrinius langus. Kiekvienai iš šių funkcijų reikia perduoti žymeklį atgalinio skambinimo procedūrai, kuri operacijos metu kaip parametrai bus perduodami rastų langų rankenoms. Derindami surašymo funkcijas, gaudami ir analizuodami lango ypatybes atgalinio skambinimo procedūroje, galite rasti reikiamą langą. Aprašytų funkcijų dokumentacija pateikiama nuorodose: - „EnumWindows“: https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497%28v=vs.85%29.aspx; - „EnumChildWindows“: https:// msdn.microsoft.com/en-us/library/windows/desktop/ms633494%28v=vs.85%29.aspx; - „EnumThreadWindows“: https://msdn.microsoft.com/en-us/library / windows / desktop /ms633495%28v=vs.85%29.aspx.
4 žingsnis
Gaukite lango rankeną žinomomis koordinatėmis. Funkcijos „WindowFromPoint“, „ChildWindowFromPoint“, „ChildWindowFromPointEx“grąžina rankenas į langus, kuriems priklauso nurodytas taškas. Lengviausia naudoti „WindowFromPoint“funkciją, tačiau ji negrąžina paslėptų ar išjungtų langų rankenų. Dokumentus apie jo naudojimą galite rasti apsilankę https://msdn.microsoft.com/en-us/library/windows/desktop/ms633558%28v=vs.85%29.aspx. Funkcijos „ChildWindowFromPoint“ir „ChildWindowFromPointEx“randa vaikui rankenas. tam tikro pirminio lango langai, priklausantys tam tikram taškui. Tokiu atveju „ChildWindowFromPointEx“elgesį galima lanksčiai valdyti naudojant papildomą parametrą. Šių funkcijų dokumentaciją pateikia nuorodos: - ChildWindowFromPoint: https://msdn.microsoft.com/en-us/library/windows/desktop/ms632676%28v=vs.85%29.aspx; - ChildWindowFromPointEx: https:// msdn.microsoft.com/en-us/library/windows/desktop/ms632677%28v=vs.85%29.aspx.