Připojte myš k zachycení událostí mimo aplikaci

click fraud protection

Naučte se, jak sledovat aktivitu myši, i když vaše aplikace Delphi není aktivní zásobník nebo ano nemají žádné uživatelské rozhraní vůbec.

Instalací háčku myši pro celý systém (nebo globálního) můžete sledovat, co uživatel dělá s myš a podle toho jednat.

Co je hák a jak to funguje?

Zkrátka, háček je (zpětné volání) můžete vytvořit jako součást knihovny DLL (knihovna dynamických odkazů) nebo vaši aplikaci pro sledování „dění“ v operačním systému Windows.
Existují 2 typy háčků - globální a místní. Místní háček sleduje věci, které se dějí pouze pro konkrétní program (nebo vlákno). Globální háček monitoruje celý systém (všechna vlákna).

Chcete-li vytvořit globální zavěšení, potřebujete 2 projekty, 1 pro vytvoření spustitelného souboru a 1 pro vytvoření DLL obsahující proceduru zavěšení.

Náš článek o práce s klávesovými háčky od Delphi vysvětluje, jak zachytit vstup z klávesnice pro ovládací prvky, které nemohou přijímat vstupní fokus (například TImage).

Zapojení myši

Podle návrhu je pohyb myši omezen velikostí obrazovky na ploše (včetně hlavního panelu Windows). Když pohybujete myší k levému / pravému / hornímu / spodnímu okraji, myš se „zastaví“ - podle očekávání (pokud nemáte více než jeden monitor).

instagram viewer

Tady je nápad pro systémový háček myši na celý systém: Pokud například chcete přesunout myš na pravou stranu obrazovky když se pohybuje směrem k levému okraji (a „se ho dotkne“), můžete napsat globální háček myši a přemístit myš ukazatel.

Začnete vytvořením projektu knihovny dynamických odkazů. DLL by měla exportovat dvě metody: "HookMouse" a "UnHookMouse".

Postup HookMouse volá SetWindowsHookEx API předávající "WH_MOUSE" pro první parametr - tedy instalaci procedury zavěšení, která monitoruje zprávy myši. Jedním z parametrů SetWindowsHookEx je funkce zpětného volání, které bude systém Windows volat, když bude zpracována zpráva myši:

SetWindowsHookEx (WH_MOUSE, @HookProc, HInstance, 0);

Poslední parametr (hodnota = 0) v SetWindowsHookEx definuje, že registrujeme globální háček.

HookProc analyzuje zprávy související s myší a odešle vlastní zprávu („MouseHookMessage“) do našeho testovacího projektu:

funkce HookProc (nCode: Integer; celé číslo; MsgID: WParam; Data: LParam): LResult; stdcall;

var

 mousePoint: TPoint;

 notifyTestForm: boolean;

 MouseDirection: TMouseDirection;

začít

 mousePoint: = PMouseHookStruct (Data) ^. pt;


 notifyTestForm: = false;


-li (mousePoint. X = 0) pak

začít

 Okna. SetCursorPos (-2 + obrazovka. Width, mousePoint.y);

 notifyTestForm: = true;

 MouseDirection: = mdRight;

konec;

...
-li notifyTestForm pak

začít

 PostMessage (FindWindow ('TMainHookTestForm', nula), MouseHookMessage, MsgID, Integer (MouseDirection));

konec;

Výsledek: = CallNextHookEx (Hook, nCode, MsgID, Data);
konec;

Spropitné: Přečtěte si soubory nápovědy Win32 SDK a zjistěte více o záznamu PMouseHookStruct a podpisu funkce HookProc.

Poznámka: Funkce zavěšení nemusí nic posílat nikde - volání PostMessage se používá pouze k označení toho, že DLL může komunikovat s „vnějším“ světem.

Mouse Hook "Listener"

Zpráva „MouseHookMessage“ je zaúčtována do vašeho testovacího projektu - formulář s názvem „TMainHookTestForm“. Přepíšete metodu WndProc, abyste dostali zprávu a jednali podle potřeby:

postup TMainHookTestForm. WndProc (var Zpráva: TMessage);

začít

zdědil WndProc (Zpráva);

-li Zpráva. Msg = HookCommon. MouseHookMessage pak

začít

// implementace nalezena v průvodním kódu

 Signál (TMouseDirection (Zpráva). LParam));

konec;

konec;

Samozřejmě, když je formulář vytvořen (OnCreate), voláte proceduru HookMouse z DLL, když se uzavře (OnDestroy), voláte proceduru UnHookMouse.

Poznámka: Háčky mají tendenci zpomalit systém, protože zvyšují množství zpracování, které musí systém provést pro každou zprávu. Háček byste měli nainstalovat pouze v případě potřeby a co nejdříve jej odstranit.

instagram story viewer