Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 18171|Respuesta: 0

[Comunicación] Implementación pura de gancho en C#

[Copiar enlace]
Publicado en 7/2/2019 21:10:23 | | |
Implementación pura de gancho en C#

Para implementar ganchos de sistema, en realidad es muy sencillo: solo hay que llamar a las tres APIs de Win32.
SetWindowsHookEx se utiliza para configurar ganchos. (Crea una tarjeta para comprobar la información que necesitas)

CallNextHookEx se usa para pasar ganchos (los mensajes son importantes, así que de donde vienen deberían volver a donde quieres bloquearlos)




DesenganchaWindowsHookEx Desinstala ganchos (desinstalar es muy importante, demasiados ajustes atascados causan congestión)


El artículo "CÓMO TO: Configurar ganchos de ventana en Visual C# .NET" lo describe de la siguiente manera:
Los ganchos globales no están soportados en el framework .NET
No puedes implementar ganchos globales en el framework Microsoft .NET. Para instalar un hook global, el hook debe tener una exportación nativa de biblioteca de enlace dinámico (DLL) para poder insertarse en otro proceso que deba ser llamado a una función válida y consistente. Esto requiere una exportación DLL, que no es compatible con el framework .NET. El código gestionado no tiene el concepto de tener un valor uniforme para los punteros de función, porque estas funciones son proxies construidos dinámicamente.
Encontré mucho código en Internet, y la mayoría contienen una DLL en C++ para identificar la DLL que contiene la subrutina a la que se refiere lpfn, lo que parece validar esta afirmación.

Pero en realidad, no es así, y el gancho global puede implementarse usando el siguiente código:
IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule );
Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 );
Nota: La propiedad ManifestModule es una incorporación nueva en el .Net Framework 2.0, así que cuando sigas usando . En Net Framework 1.x, puedes usar el método GetModules para obtener todos los módulos del ensamblaje actual, y luego usar uno de ellos como parámetro para el método GetHINSTAN para obtener el puntero de handle adecuado.





Anterior:Delegar en C#
Próximo:Uso de funciones hook en habilidades de programación en C# - SetWindowsHookEx
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com