Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 17250|Atbildi: 0

[Padomi] Āķa funkciju izmantošana C# programmēšanas prasmēs - SetWindowsHookEx

[Kopēt saiti]
Publicēts 07.02.2019 21:12:59 | | |
Kā jūs zināt: C# ir .NET Framework platformas pavadoņa valoda, un nav iespējams ieviest globālos āķus ar savām bibliotēkām un kompilatora noteikumiem. Bet praksē nepārvaldīta koda izsaukumi ir patiesi C#, izmantojot rekvizītu DllImport, lai atsauktos uz nepārvaldītā koda bibliotēkas metodēm. Āķa funkcijas pastāv user32.dll, un funkcijas prototips ir šāds:

HHOOK WINAPI SetWindowsHookEx(

__in int idHook,

__in HOOKPROC lpfn,

__in HINSTANCE hMod,

__in DWORD dwThreadId);

To var izmantot, lai reģistrētu konkrēta veida ziņojumu pārtveršanas apstrādes metodi operētājsistēmā (Windows), piemēram, mēs varam reģistrēt āķi, lai bloķētu globālos tastatūras ziņojumus, lai mēs varētu uztvert un apstrādāt visus tastatūras nospiešanas un pacelšanas notikumus (nav izslēgts, ka ir priekšējais āķis, lai nomestu ziņojumu).

Mēs varam atsaukties uz šo funkciju C#, deklarējot to šādi:

  [DllImport("user32.dll")]
        public static extern int SetWindowsHookEx(
            Āķa tips idĀķis,
            HookProc lpfn,
            IntPtr hInstance,
            int threadId
            );

Ir vērts pieminēt, ka iepriekš minētie HookType un HookProc ir mani pielāgotie veidi, kas nav svarīgi (jo programma darbojas atmiņas laikā), bet tai jāatbilst noteiktām specifikācijām.

Funkcijas parametri no augšas uz leju ir:

  idHook tips, ko šeit attēlo formas uzskaitījums
     LPFN atzvanīšanas funkcija, kad tiek spēlēti āķi
     hLietojumprogrammas instances moduļa rokturis (parasti tās lietojumprogrammas instances moduļa turis, kurā atrodas jūsu āķa atzvanīšanas funkcija)
       threadIdAr instalēto āķa apakšprogrammu saistītā pavediena identifikators

Ir vairāki āķu veidi:
Mēs parasti izmantojam 13, lai bloķētu tastatūras ziņojumus, un 14, lai bloķētu peles ziņojumus.

Atzvanīšanas funkcijas deklarācija Mums ir jāizmanto delegāti C#, un deklarācija ir šāda:
    publiskais delegāts int HookProc(int nCode, int wParam, IntPtr lParam);

Parametrs no augšas uz leju nozīmē, ka parametrs, ko nodod atpakaļ nCode āķa ķēde, 0 nozīmē, ka šis ziņojums (ar iepriekšējo ziņojumu āķi) tiek atmests, un ne-0 nozīmē, ka šis ziņojums joprojām ir derīgs

wParam ziņojuma parametri

lParam ziņojuma parametrs

Ir vērts pieminēt, ka wParam un lParam ir dažādi dažādu ziņojumu tipu veidi, bet wParam veidus var aptuveni attēlot ar šādu uzskaitījumu:
lParam parasti ir iekapsulēts kā struktūra, kas mainās atkarībā no ziņojuma veida, peles un tastatūras ziņojumu lParam struktūra ir šādas divas struktūras:
Kad mēs saprotam iepriekš minēto informāciju, mums ir pamata izpratne par āķa funkciju C# ieviešanu, un pēc tam pievēršam uzmanību dažiem jautājumiem:

1. Āķi aizņem daudz resursu, un tie ir jāatceļ laikā, kad tie netiek izmantoti, kas prasa izmantot funkciju UnhookWindowsHookEx

2. Pieklājības labad āķim jāatgriež nākamā āķa apstrādes rezultāts, nevis tikai pašreizējā āķa apstrādes rezultāts (izmantojiet CallNextHookEx, lai izsauktu nākamo āķi, jo āķis tiek iestatīts vispirms un pēc tam stājas spēkā, tāpēc tas jādara, lai nodrošinātu normālu āķa ķēdes piegādi).

3. Āķa funkcijas parametrā hInstance ir tikai tur, kur ir pašreizējā āķa atzvanīšanas funkcija, un jānorāda pareiza adrese

4. Tā kā tiek izmantots pārstāvis, jānodrošina, ka pārstāvja atmiņas adrese (atsauce uz metodi) netiks izmesta, pretējā gadījumā būs izņēmums, kad āķis tiek izpildīts



Jūs varat lejupielādēt manis uzrakstīto programmas paraugu, bet manai programmai ir nepieciešami šādi galvenie punkti:

1. Es bloķēju āķu ieviešanu un atvēru tikai tastatūras un peles ziņojumu pārtveršanu un apstrādi (lietošanas metode ir tāda pati kā C # WinForm peles un tastatūras notikumiem), un jūs varat atvērt citus

2. Es izstrādāju āķi tā, lai tas būtu vientuļā režīmā, jūs varat to atcelt

3. Sakarā ar noteiktu ielaušanos operētājsistēmā pretvīrusu programmatūra var tikt uzskatīta par riskantu

4. Kods ir slikti uzrakstīts, vienkārši samierinieties ar to......



Visbeidzot, atšķirība starp programmēšanas tehnoloģiju un valodu ir tāda, ka to kompilatori un to lietotāji ir atšķirīgi, cilvēki, kas izmanto C, nevar teikt, ka ir augstāki par tiem, kas izmanto Java, un tehnoloģija ne vienmēr atspoguļojas rādītājos, matricās, datu struktūrās, ja vien cilvēki, kas saprot datora principus, kompilācijas principus, operētājsistēmas principus utt. Protams, ir labi, ka ikvienam ir sava iecienītākā valoda un parastās programmēšanas metodes.





Iepriekšējo:Tīra C# āķa ieviešana
Nākamo:【Jiangshi WeChat Multi-Open】 WeChat skenēšanas koda izvēles pieteikšanās|Neierobežota vairāku atvēršanu|Saglabāt pieteikšanās konfigurāciju
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com