Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 18171|Válasz: 0

[Kommunikáció] Tiszta C# hook megvalósítás

[Linket másol]
Közzétéve 2019. 02. 07. 21:10:23 | | |
Tiszta C# Hook megvalósítás

A rendszerhorgók megvalósításához valójában nagyon egyszerű: csak hívjuk a három Win32 API-t.
A SetWindowsHookEx a hookok beállítására szolgál. (Állíts be egy kártyát, hogy ellenőrizd a szükséges információkat)

A CallNextHookEx-et a hookok továbbítására használják (az üzenetek fontosak, így honnan jönnek, vissza kell menniük oda, ahol blokkolni szeretnéd őket).




UnHookWindowsHookEx Eltávolítsa a hookokat (az eltávolítás nagyon fontos, túl sok elragadt beállítás torlódást okoz)


A "HOGYAN TO: Ablakhorogok beállítása Visual C# .NET-ben" című cikk a következőképpen írja le:
A globális hookok nem támogatottak a .NET keretrendszerben
A Microsoft .NET keretrendszerben nem lehet globális hookokat megvalósítani. A globális hook telepítéséhez a hooknak natív dinamikus link könyvtár (DLL) exporttal kell rendelkeznie, hogy beilleszthető egy másik folyamatba, amelyet érvényes és konzisztens függvénybe kell hívni. Ez DLL exportot igényel, amit a .NET keretrendszer nem támogat. A menedzselt kódnak nincs egységes értéke a függvénymutatóknak, mert ezek a függvények dinamikusan felépített proxyk.
Sok kódot találtam az interneten, és a legtöbben van egy C++ DLL, amely azonosítja azt a DLL-t, amely tartalmazza az lpfn által említett alprogramot, ami úgy tűnik, megerősíti ezt az állítást.

De a valóságban ez nem így van, és a globális hook a következő kóddal valósítható meg:
IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule );
Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0);
Megjegyzés: A ManifestModule tulajdonság egy új kiadvány a .Net Framework 2.0-ban, így amikor még mindig használod . A Net Framework 1.x-ben a GetModules metóduszot használhatod, hogy megszerezd az aktuális assembly összes modulját, majd az egyiket használhatod paraméterként a GetHINSTAN metódushoz, hogy megkapd a megfelelő handle mutatót.





Előző:Delegált C#-ban
Következő:Hook függvények használata a C# programozási készségekben - SetWindowsHookEx
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com