Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 18171|Risposta: 0

[Comunicazione] Implementazione pura di hook C#

[Copiato link]
Pubblicato su 07/02/2019 21:10:23 | | |
Implementazione pura C# Hook

Per implementare i system hook, in realtà è molto semplice: basta chiamare le tre API Win32.
SetWindowsHookEx viene usato per impostare i hook. (Prepara una scheda per controllare le informazioni necessarie)

CallNextHookEx viene usato per passare hook (i messaggi sono importanti, quindi da dove provengono dovrebbero tornare dove vuoi bloccarli)




Scollega WindowsHookEx Disinstalla i hook (disinstallare è molto importante, troppe impostazioni bloccate causeranno congestione)


L'articolo "HOW TO: Setting Window Hooks in Visual C# .NET" lo descrive come segue:
I hook globali non sono supportati nel framework .NET
Non puoi implementare ganci globali nel framework Microsoft .NET. Per installare un hook globale, il hook deve avere un'esportazione nativa della libreria dinamica (DLL) in modo che possa essere inserito in un altro processo che deve essere chiamato in una funzione valida e coerente. Questo richiede un'esportazione DLL, che non è supportata dal framework .NET. Il codice gestito non ha il concetto di avere un valore uniforme per i puntatori di funzione, perché queste funzioni sono proxy costruiti dinamicamente.
Ho trovato molto codice su Internet, e la maggior parte contiene una DLL C++ per identificare la DLL che contiene la subroutine a cui si fa riferimento lpfn, il che sembra confermare questa affermazione.

Ma in realtà, non è così, e il gancio globale può essere implementato usando il seguente codice:
IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule );
Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 );
Nota: La proprietà ManifestModule è una nuova aggiunta nel .Net Framework 2.0, quindi quando continui a usare . In Net Framework 1.x, puoi usare il metodo GetModules per ottenere tutti i moduli dell'assembly corrente, e poi usarne uno come parametro per il metodo GetHINSTAN per ottenere il puntatore appropriato.





Precedente:Delega in C#
Prossimo:Uso delle funzioni hook nelle competenze di programmazione C# - SetWindowsHookEx
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com