Koncept uživatelského rozhraní ve Windows je založen na konceptu okna. Dialogy, tlačítka, ovládací panely, seznamy jsou všechna okna. Proto, abyste mohli provádět jakoukoli akci s jakýmkoli prvkem rozhraní vaší vlastní nebo cizí aplikace, musíte získat popisovač okna.
Nezbytné
- - balíček SDK platformy;
- - překladač.
Instrukce
Krok 1
Získejte popisovač okna vytvořením. Proveďte volání funkcí API CreateWindow nebo CreateWindowEx nebo zavolejte příslušné metody obálky (na nezbytných objektech) tříd použité architektury nebo knihovny, které zapouzdřují funkce práce s okny nebo ovládacími prvky. Funkce CreateWindow a CreateWindowEx přímo vrací popisovač okna při úspěšném vytvoření. Pokud jsou voláni neúspěšně, vrátí NULL. Kód příčiny chyby lze vyžádat pomocí funkce API GetLastError. Prototypy a podrobný popis parametrů funkcí CreateWindow a CreateWindowEx lze získat z odkazů https://msdn.microsoft.com/en-us/library/windows/desktop/ms632679%28v=vs.85%29.aspx and https:// msdn.microsoft.com / en-us / library / windows / desktop / ms632680% 28v = vs.85% 29.aspx Při použití tříd různých frameworků může k vytváření okenních objektů operačního systému dojít buď explicitně (voláním metody) nebo implicitně (implementace strategie RAII). Proto je lepší získat popisovač okna na hotovém inicializovaném objektu. O metodách tříd, které vracejí popisovač okna zapouzdřený objektem, se můžete dozvědět v dokumentaci příslušného rozhraní. Například v MFC je podobná metoda GetSafeHwnd třídy CWnd.
Krok 2
Vyhledejte popisovač okna. Použijte funkce API FindWindow a FindWindowEx nebo vhodné obaly objektů třídy pro rozhraní, které používáte. FindWindow vrací popisovač do okna nejvyšší úrovně, pokud je nalezen, nebo NULL při selhání. Hledání se provádí podle názvu třídy a názvu okna. Popis parametrů a aspektů funkce naleznete na odkazu https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499%28v=vs.85%29.aspx. Sémantika funkce FindWindowEx je podobná funkci FindWindow s tím rozdílem, že hledá podřízená okna. Dokumentace k FindWindowEx je k dispozici na adrese
Krok 3
Vyhledejte popisovač okna a vypsat jejich sady. Použijte funkce API EnumWindows, EnumChildWindows, EnumThreadWindows nebo metody třídních objektů používaného rozhraní. Funkce EnumWindows a EnumChildWindows vyjmenovávají okna nejvyšší úrovně a podřízená okna. Funkce EnumThreadWindows vyjmenuje všechna podřízená okna zadaného vlákna. Každá z těchto funkcí musí být předána ukazateli na proceduru zpětného volání, kterému budou během provozu předány popisovače nalezených oken jako parametry. Kombinací funkcí výčtu, získáním a analýzou vlastností okna v proceduře zpětného volání můžete najít popisovač požadované okno. Dokumentace popsaných funkcí je uvedena na odkazech: - 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.
Krok 4
Získejte popisovač okna se známými souřadnicemi. Funkce WindowFromPoint, ChildWindowFromPoint, ChildWindowFromPointEx vracejí úchyty do oken, do kterých patří zadaný bod. Funkce WindowFromPoint je nejjednodušší použít, ale nevrací úchyty pro skrytá nebo zakázaná okna. Dokumentaci k jeho použití najdete na adrese https://msdn.microsoft.com/en-us/library/windows/desktop/ms633558%28v=vs.85%29.aspx. Funkce ChildWindowFromPoint a ChildWindowFromPointEx naleznou úchyty pro dítě okna daného nadřazeného okna patřícího k danému bodu. V tomto případě lze chování ChildWindowFromPointEx flexibilně řídit pomocí dalšího parametru. Dokumentaci k těmto funkcím poskytují odkazy: - 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.