Куката на мишката, за да улови събития извън приложение

click fraud protection

Научете как да проследявате активността на мишката, дори когато приложението ви Delphi не е активно, седи в поднос или прави нямате потребителски интерфейс изобщо.

Чрез инсталиране на системна (или глобална) кука на мишката можете да следите какво прави потребителят с мишка и да действа съответно.

Какво е кука и как работи?

Накратко, куката е (обаждане) функция, която можете да създадете като част от DLL (динамична библиотека за връзки) или вашето приложение за наблюдение на „ходенето“ в операционната система Windows.
Има 2 вида куки - глобални и локални. Местната кука следи нещата, които се случват само за конкретна програма (или нишка). Глобална кука следи цялата система (всички нишки).

За да създадете глобална кука, се нуждаете от 2 проекта, 1 да направите изпълним файл и 1 да направите DLL, съдържащ процедурата на куката.

Нашата статия за работа с куки за клавиатура от Delphi обяснява как да прихванете клавиатурния вход за контроли, които не могат да получат фокус на входа (като TImage).

instagram viewer

Кукане на мишката

По дизайн движението на мишката е ограничено от размера на екрана на вашия работен плот (включително лентата със задачи на Windows). Когато преместите мишката вляво / вдясно / горния / долния ръб, мишката ще „спре“ - както се очаква (ако нямате повече от един монитор).

Ето една идея за куката на мишката в цялата система: Ако например искате да преместите мишката в дясната страна на екрана когато се придвижи към левия ръб (и "го докосне"), можете да напишете глобална кука на мишката, за да препозиционирате мишката показалка.

Започвате, като създавате проект за библиотека с динамични връзки. DLL трябва да експортира два метода: "HookMouse" и "UnHookMouse".

Процедурата HookMouse се обажда на SetWindowsHookEx API, преминаващ „WH_MOUSE“ за първия параметър - по този начин инсталирайте процедура на куката, която следи съобщенията на мишката. Един от параметрите на SetWindowsHookEx е вашата функция за обратно извикване, която Windows ще извика, когато има съобщение на мишката, което трябва да бъде обработено:

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

Последният параметър (стойност = 0) в SetWindowsHookEx определя, че регистрираме глобална кука.

HookProc анализира свързаните с мишката съобщения и изпраща персонализирано съобщение ("MouseHookMessage") към нашия тестов проект:

функция HookProc (nCode: Integer; MsgID: WParam; Данни: LParam): LResult; stdcall;

Var

 mousePoint: TPoint;

 notifyTestForm: boolean;

 MouseDirection: TMouseDirection;

започвам

 mousePoint: = PMouseHookStruct (данни) ^. pt;


 notifyTestForm: = false;


ако (MousePoint. X = 0) тогава

започвам

 Windows. SetCursorPos (-2 + екран. Ширина, mousePoint.y);

 notifyTestForm: = true;

 MouseDirection: = mdRight;

край;

...
ако notifyTestForm тогава

започвам

 PostMessage (FindWindow ('TMainHookTestForm', нула), MouseHookMessage, MsgID, Integer (MouseDirection));

край;

Резултат: = CallNextHookEx (Hook, nCode, MsgID, Data);
край;

Бакшиш: Прочетете помощните файлове на Win32 SDK, за да научите повече за записа на PMouseHookStruct и подписа на функцията HookProc.

Забележка: Функцията на куката не трябва да изпраща нищо навсякъде - повикването PostMessage се използва само за да покаже, че DLL може да комуникира с „външния“ свят.

Кука за мишка "Слушател"

Съобщението "MouseHookMessage" се публикува във вашия тестов проект - форма, наречена "TMainHookTestForm". Ще замените метода WndProc, за да получите съобщението и да действате според нуждите:

процедура TMainHookTestForm. WndProc (Var Съобщение: TMessage);

започвам

наследен WndProc (Съобщение);

ако Съобщение. Msg = HookCommon. MouseHookMessage тогава

започвам

// реализация, намерена в придружаващия код

 Сигнал (TMouseDirection (Съобщение) LParam));

край;

край;

Разбира се, когато формата е създадена (OnCreate), вие се обаждате на процедурата HookMouse от DLL, когато тя се затвори (OnDestroy), вие извиквате процедурата UnHookMouse.

Забележка: Куките са склонни да забавят системата, тъй като увеличават количеството обработка, която системата трябва да извърши за всяко съобщение. Трябва да инсталирате кука само когато е необходимо и да я извадите възможно най-скоро.

instagram story viewer