Problema de enlace del programa C#
C# es un lenguaje de programación orientado a objetos, por lo que los ganchos se escriben en clases. ///?
///?El conjunto de tipos de gancho
///?
public?enum?HookType? :?int
{
///?
///?WH_MSGFILTER? y ?WH_SYSMSGFILTER?Hooks nos permiten proteger menús y migrar. ¿Cambiar?
///Barra, cuadro de mensaje, mensaje del cuadro de diálogo y descubre que los usuarios usan la combinación de teclas ALT+TAB?o?ALT+ESC?para cambiar de ventana. ?
///WH_MSGFILTER? ¿Hook solo puede monitorear los mensajes pasados a menús, barras de transición, cuadros de mensajes y mensajes pasados para pasar?
///Instalando Hook Messages para diálogo cuadros creados por la aplicación. WH_SYSMSGFILTER?Hook?
///Supervisar toda la información de la aplicación. ?
///WH_MSGFILTER? y ?WH_SYSMSGFILTER?Hooks nos permiten filtrar mensajes durante el ciclo de modo?
///Esto es equivalente a filtrar mensajes en el ciclo de mensajes principal. ?
///Puedes llamar directamente a WH_MSGFILTER?Hook llamando a la función CallMsgFilter?. Al usar esta función, la aplicación puede usar el mismo código para filtrar mensajes durante el bucle de patrón que en el bucle de mensajes principal.
/// Igual que en el anillo
// /?
WH_MSGFILTER?=?-1,
///?
///?WH_JOURNALRECORD?Se utiliza el gancho para monitorear y registrar las transacciones de entrada. Normalmente, puede usar este gancho para grabar eventos consecutivos del mouse y el teclado, y luego usar el gancho WH_JOURNALPLAYBACK para reproducir de un lado a otro. WH_JOURNALRECORD? El gancho es un gancho global, ¿no se puede utilizar como un gancho específico de un hilo?
///. ¿WH_JOURNALRECORD son ganchos?locales?para todo el sistema, ¿no se inyectarán en ninguna línea?
///espacio de direcciones del proceso
///?
WH_JOURNALRECORD?=?0,
///?
///?WH_JOURNALRECORD?=?Hook permite que la aplicación inserte mensajes en el mensaje del sistema cola. ¿Puedes?
///Puedes usar este gancho para reproducir eventos continuos de mouse y teclado grabados usando el gancho WH_JOURNALRECORD?.
/// Mientras se haya instalado WH_JOURNALPLAYBACK?Hook, las transacciones normales de mouse y teclado?
/// no son válidas. ¿WH_JOURNALPLAYBACK? El gancho es un gancho global, ¿no se puede utilizar como un gancho específico para un hilo?
///Hook. WH_JOURNALPLAYBACK?Hook devuelve un valor de tiempo de espera. Este valor le indica al sistema cuánto tiempo (milisegundos) debe esperar antes de procesar el mensaje actual desde el gancho de reproducción.
/// Esto permite a Hook captar la reproducción de transacciones en tiempo real.
///
WH_JOURNALPLAYBACK son ganchos?locales?para todo el sistema, ¿no serán?
///inyectados en ningún espacio de direcciones de viaje
///?
WH_JOURNALPLAYBACK?=?1,
///?
///?En la aplicación, WH_KEYBOARD?Hook se utiliza para controlar WM_KEYDOWN?y?
///Mensajes WM_KEYUP, estos mensajes se devuelven a través de la función GetMessage?o?PeekMessage?. ¿Puedes usarlo?
///Utiliza este gancho para monitorear los mensajes del teclado ingresados en la cola de mensajes
///?
¿WH_KEYBOARD? =?2,
///?
///La aplicación utiliza el gancho WH_GETMESSAGE para controlar la respuesta de GetMessage o PeekMessage
// /Número de mensajes devueltos. ¿Puede utilizar el gancho WH_GETMESSAGE para monitorear la entrada del mouse y el teclado, así como también?
///Otros mensajes enviados a la cola de mensajes
///?< / p>
WH_GETMESSAGE?=?3,
///?
///? Monitoriza los mensajes enviados al proceso de ventana. el mensaje se envía al receptor llamado antes del procedimiento de ventana
///?
WH_CALLWNDPROC?=?4,
/// ?
/// Antes de los siguientes eventos, el sistema llamará al subproceso WH_CBT Hook. Estos eventos incluyen:
///1. destruir, minimizar, maximizar, mover, cambiar el tamaño y otras transacciones de ventana;?
///2.?Instrucciones completas del sistema;?
///3.?Mover el mouse desde la cola de mensajes del sistema, asuntos del teclado ?
///4. Establecer asuntos centrales de entrada?
///5.
///El valor de retorno del subproceso Hook determina si el sistema permite o impide una de estas operaciones
///?
WH_CBT ?=?5,
///?
///?WH_MSGFILTER? y ?WH_SYSMSGFILTER?Hooks nos permiten monitorear menús y migrarlos?
///Barra, cuadro de mensaje, mensaje del cuadro de diálogo y descubre que el usuario usa la combinación de teclas ALT+TAB?o?ALT+ESC?para cambiar de ventana. ?
///WH_MSGFILTER? ¿Hook solo puede monitorear los mensajes pasados a menús, barras de transición, cuadros de mensajes y mensajes pasados para pasar?
///Instalando Hook Messages para diálogo cuadros creados por la aplicación. WH_SYSMSGFILTER?Hook?
///Monitorear toda la información de la aplicación. ?
///WH_MSGFILTER? y ?WH_SYSMSGFILTER?Hooks nos permiten filtrar mensajes durante el ciclo de modo?
///Esto es equivalente a filtrar mensajes en el ciclo de mensajes principal. ?
///Puedes llamar directamente a WH_MSGFILTER?Hook llamando a la función CallMsgFilter?.
Al usar esta función, la aplicación puede usar el mismo código para filtrar mensajes durante el bucle de patrón que en el bucle de mensajes principal.
/// Igual que en el anillo
// /?
WH_SYSMSGFILTER?=?6,
///?
///?WH_MOUSE?Hook monitorea el mouse mensaje devuelto por la función GetMessage?o?PeekMessage?. ?
///Utilice este gancho para proteger los mensajes del mouse ingresados en la cola de mensajes
///?
WH_MOUSE?=?7 ,
///?
///?Al llamar a GetMessage? o?PeekMessage? para consultar mensajes que no sean del mouse ni del teclado desde la cola de mensajes
///?
WH_HARDWARE?=?8,
///?
///?En Antes de que el sistema llame al subproceso Hook que está relacionado con otros Hooks en el sistema, el sistema llamará al subproceso ?
///WH_DEBUG?Hook. ¿Puede utilizar este gancho para decidir si permite que el sistema llame a subprocesos de gancho asociados con otros?
///Hooks
///?
WH_DEBUG?=?9,
///?
/// Las aplicaciones Shell pueden usar WH_SHELL?Hook para recibir notificaciones importantes. Cuando la aplicación shell está?
///Activada y cuando se crea o destruye la ventana de nivel superior, el sistema llama a la subrutina WH_SHELL?Hook. ?
///WH_SHELL? *** Hay 5 situaciones: ?
///1. ¿Solo se crea y funciona una ventana de nivel superior sin propietario? ser destruido;?
///2.?Cuando la barra de tareas necesita volver a dibujar un botón;?
///3.?Cuando el sistema necesita mostrar información sobre la barra de tareas minimizada estado de un programa ?
///4. Cuando cambia la distribución actual del teclado ?
///5. o un programa de nivel similar). ?
///Como regla general, las aplicaciones shell no aceptan mensajes WH_SHELL. Por lo tanto, antes de que la aplicación pueda recibir mensajes WH_SHELL, la aplicación debe llamar a la función SystemParametersInfo para registrarse
///self
///?
WH_SHELL?=?10,
///?
///?Cuándo Cuando el hilo de primer plano de la aplicación está inactivo, ¿puedes usar WH_FOREGROUNDIDLE? p>
///Hook para realizar tareas de baja prioridad.
Cuando el subproceso de primer plano de la aplicación puede quedar inactivo, el sistema llamará al subproceso Hook WH_FOREGROUNDIDLE
///
WH_FOREGROUNDIDLE?=?11,
///?
///? Supervisa los mensajes enviados al procedimiento de ventana. El sistema espera hasta que el mensaje se envía a Llamado después de hacerse cargo del procedimiento de ventana.
///?
WH_CALLWNDPROCRET?=?12,
///?
///?Guardar mensajes del teclado ingresado en la cola de mensajes del hilo
///?
WH_KEYBOARD_LL?=?13,
///? ///?Guarda los mensajes del mouse ingresados en la cola de mensajes del hilo ///?
WH_MOUSE_LL?=?14
}
público?partial?clase?Form1?:?Formulario
{
público ?Form1()
{
InitializeComponent();
}
[DllImport("USER32.DLL")] p>
privado?estático?extern?int? CallNextHookEx(IntPtr?hhk,?int?nCode,?IntPtr?wParam,?IntPtr?lParam);//Método para importar el paso de mensajes de la función de enlace
[DllImport("USER32.DLL")] p>
private?static?extern?IntPtr?SetWindowsHookEx(HookType?idHook,?HookProc?lpfn,?IntPtr?hMod,?int?dwThreadId);// Método de enlace de configuración de importación
[DllImport ("user32.dll",?CharSet?=?CharSet.Auto,?CallingConvention?=?CallingConvention.StdCall)]
privado?static ?extern?bool?UnhookWindowsHookEx(int?idHook); p>
//Método para importar el gancho de desinstalación
private?delegate?int?HookProc(int?nCode,?int?wParam, ?IntPtr?lParam);?//Función de devolución de llamada de declaración
p>
///
///Función de devolución de llamada personalizada
///< /summary>
private?int?HookCallback (int?nCode,?IntPtr?wParam,?IntPtr?lParam)
{
MessageBox.Show(nCode .ToString());
// Cuando se presiona el teclado
if?(nCode?>=?0?&&?wParam?==?(IntPtr)0) p>
{ int?vkCode?=?Marshal. ReadInt32(lParam); ¿Claves?clave?=?(Claves)vkCode;
x.Show(key.ToString());
}
return?CallNextHookEx(handle,?nCode,?wParam,?lParam);
}
private?void?Form1_Load(object?sender,?EventArgs?e)
{
//Crea un gancho (puedes encontrar los parámetros de este función en Baidu Find, el enlace C# se estudió pero falló)
SetWindowsHookEx(params);
}
}