me encontré con este código de enlace de teclado, lo que estoy tratando de modificar ligeramente para mis propósitos: http://blogs.msdn.com/toub/archive/2006/05/03/589423.aspx¿Puedo cambiar la entrada del teclado de un usuario?
Como una visión general, yo quiero tener el usuario pulse una tecla, por ejemplo 'E', y tienen el retorno del teclado un personaje diferente, 'Z', a cualquier aplicación que esté enfocada.
El método relevante he cambiado se ve ahora como:
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
//The truely typed character:
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
KBDLLHOOKSTRUCT replacementKey = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));
replacementKey.vkCode = 90; // char 'Z'
Marshal.StructureToPtr(replacementKey, lParam, false);
//Now changed to my set character
vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
La consola emite correctamente esto como:
E
Z
T
Z
G
Z
etc.
Sin embargo, 'E' los de aplicación enfoque todavía tipos en lugar de 'Z' . ¿Por qué? Cambié la entrada del teclado enganchado para contener 'Z' en lugar de 'E', ¡y las líneas de la consola muestran que se cambió correctamente!
Según tengo entendido, llamar al return CallNextHookEx(_hookID, nCode, wParam, lParam);
es lo que envía el comando "imprimir ahora" a la aplicación abierta. ¿No es así como funciona? ¿Hay algo que me impida escribir el personaje que quiero? Sé que aplicaciones como AutoHotkey toman una tecla de entrada, la comprueban y devuelven un personaje diferente. ¿Cómo hago lo mismo aquí?
Gracias!
por curiosidad, ¿cuál es la aplicación de esto? –
¡No es un keylogger! :) La aplicación es tecnología de asistencia.Piensa en el teclado del iPhone; detrás de escena, modifica el área clave, corrige los errores obvios y ejecuta otro código inteligente para ayudarlo a escribir más rápido y con mayor precisión. Esta es una aplicación similar, pero para teclados completos. – cksubs