Red de conocimiento informático - Computadora portátil - Problema de enlace del programa C#

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?

///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")]

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")]

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);

//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)

{ 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);

}

}