Sužinokite, kaip sekti pelės veiklą, net kai jūsų „Delphi“ programa nėra aktyvi, yra dėklas ar daro neturėti jokios vartotojo sąsajos iš viso.
Įdiegę visos sistemos (arba globalų) pelės kablį, galite stebėti, ką vartotojas daro su pelė ir atitinkamai elgtis.
Kas yra kabliukas ir kaip jis veikia?
Trumpai tariant, kabliukas yra (perskambink) funkciją, kurią galite sukurti kaip DLL (dinaminių nuorodų biblioteka) arba jūsų programa, skirta stebėti „eigą“ „Windows“ operacinėje sistemoje.
Yra 2 kabliukų tipai - globalūs ir vietiniai. Vietinis kabliukas stebi, kas vyksta tik su konkrečia programa (ar gija). Visuotinis kabliukas stebi visą sistemą (visus siūlus).
Norėdami sukurti visuotinį kabliuką, jums reikia 2 projektų, 1 - vykdomojo failo sukūrimui, 1 - DLL, kuriame yra „hook“ procedūra.
Mūsų straipsnis apie darbas su klaviatūros kabliais iš „Delphi“ paaiškinama, kaip perimti klaviatūros įvestį valdikliams, kurie negali priimti įvesties fokusavimo (pvz., „TImage“).
Pelės užkabinimas
Pagal dizainą pelės judėjimą riboja darbalaukio ekrano dydis (įskaitant „Windows“ užduočių juostą). Kai judinate pelę į kairę / dešinę / viršutinę / apatinę briauną, pelė „sustos“ - kaip ir tikėtasi (jei neturite daugiau nei vieno monitoriaus).
Čia yra visos sistemos pelės kablio idėja: jei, pavyzdžiui, norite perkelti pelę į dešinę ekrano pusę kai jis juda kairiojo krašto link (ir „paliečia“ jį), galite parašyti visuotinį pelės kabliuką, kad pakeistumėte pelę rodyklė.
Pirmiausia sukuriate dinaminių nuorodų bibliotekos projektą. DLL turėtų eksportuoti du metodus: „HookMouse“ ir „UnHookMouse“.
„HookMouse“ procedūra iškviečia „SetWindowsHookEx“ API perduoda pirmojo parametro „WH_MOUSE“ - tokiu būdu įdiegiama „hook“ procedūra, kuri stebi pelės pranešimus. Vienas iš „SetWindowsHookEx“ parametrų yra jūsų atgalinio iškvietimo funkcija, kurią „Windows“ paskambins, kai bus apdorojamas pelės pranešimas:
„SetWindowsHookEx“ (WH_MOUSE, @HookProc, HInstance, 0);
Paskutinis „SetWindowsHookEx“ parametras (vertė = 0) nusako, kad registruojame visuotinį kabliuką.
„HookProc“ analizuoja su pele susijusius pranešimus ir siunčia pasirinktinį pranešimą („MouseHookMessage“) į mūsų bandomąjį projektą:
funkcija „HookProc“ („nCode“: sveikasis skaičius; MsgID: WParam; Duomenys: LParam): LResult; stdcall;
var
„mousePoint“: „TPoint“;
praneštiTestForm: boolean;
„MouseDirection“: „TMouseDirection“;
prasideda
mousePoint: = PMouseHookStruct (duomenys) ^ pt;
praneštiTestForm: = klaidinga;
jei („mousePoint“. X = 0) tada
prasideda
„Windows“. „SetCursorPos“ (-2 + ekranas. Plotis, mousePoint.y);
praneštiTestForm: = tiesa;
„MouseDirection“: = „mdRight“;
galas;
...
jei praneštiTestForm tada
prasideda
„PostMessage“ („FindWindow“ ('TMainHookTestForm', nulis), „MouseHookMessage“, „MsgID“, sveikasis skaičius („MouseDirection“));
galas;
Rezultatas: = CallNextHookEx (Hook, nCode, MsgID, Data);
galas;
Patarimas: Perskaitykite „Win32 SDK“ žinyno failus, kad sužinotumėte apie „PMouseHookStruct“ įrašą ir „HookProc“ funkcijos parašą.
Pastaba: „Hook“ funkcijai nieko nereikia nieko siųsti - „PostMessage“ skambutis naudojamas tik norint parodyti, kad DLL gali susisiekti su „išoriniu“ pasauliu.
Pelės kablys "Klausytojas"
Pranešimas „MouseHookMessage“ yra paskelbtas jūsų bandymo projekte - forma pavadinta „TMainHookTestForm“. Jūs nepaisysite „WndProc“ metodo, jei norite gauti pranešimą ir veikti kaip reikia:
procedūra „TMainHookTestForm“. „WndProc“ (var Žinutė: TMessage);
prasideda
paveldėtas „WndProc“ (žinutė);
jei Žinutė. Msg = „HookCommon“. „MouseHookMessage“ tada
prasideda
// įgyvendinimas rastas pridedamame kode
Signalas (TMouseDirection (žinutė. LParam));
galas;
galas;
Žinoma, kai forma yra sukurta (OnCreate), jūs iškviejate „HookMouse“ procedūrą iš DLL, kai ji uždaroma (OnDestroy), jūs vadinate „UnHookMouse“ procedūrą.
Pastaba: Kabliukai paprastai lėtina sistemą, nes padidina apdorojimo, kurį sistema turi atlikti kiekvienam pranešimui, kiekį. Kabliuką turėtumėte įdiegti tik tada, kai reikia, ir kuo greičiau jį nuimkite.