Pues vengo a haceros una preguntilla para ver si me podéis echar una manita
El tema es que estoy probando con la calculadora de windows a ver si conseguía lograr lo que digo en el título de este hilo. La cuestión sería clicar en cualquier botón de la calculadora y que esta reciba los clics y responda a los botones presionados, pero que no se active su ventana (que la ventana no coja el foco).
Estoy tratando de hacer un hook a WH_CALLWNDPROC para capturar cuando se llama a WM_ACTIVATEAPP y seguidamente ya intentaría invalidarlo, pero el tema es que no me hace el hook.
Este sería parte del código que estoy utilizando, pero no se porqué no me engancha el hook, a ver si sabríais decirme que estaría mal:
Código:
private void Iniciar_Hook()
{
try
{
HookProc HookDelegado = new HookProc(HookProcHandler);
if (hook.Equals(IntPtr.Zero))
{
Console.Beep();
IntPtr hwndWindow = FindWindowByCaption(IntPtr.Zero, "Calculadora");
//MessageBox.Show(hwndWindow.ToString());
hook = SetWindowsHookEx(HookType.WH_CALLWNDPROC, HookDelegado, hwndWindow, 0);
MessageBox.Show(hook.ToString()); //Muestra 0
bt_boton1.Text = "STOP";
}
else
{
UnhookWindowsHookEx(hook);
hook = IntPtr.Zero;
bt_boton1.Text = "GO";
}
}
catch (Exception e)
{
MessageBox.Show("Error en el Hook: \n" + e.Message);
}
}
private IntPtr HookProcHandler(int code, WM wParam, KBDLLHOOKSTRUCT lParam)
{
try
{
MessageBox.Show("hola1");
if (code >= 0 && (lParam.Equals(WM.ACTIVATEAPP) || lParam.Equals(WM.ACTIVATE)))
{
//MessageBox.Show("hola2");
//Console.Beep();
}
return CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
}
catch (Exception e)
{
MessageBox.Show("Error en el Hook: \n" + e.Message);
}
return (IntPtr)1;
}
También decir que me ejecuta el programa y tal, por lo que la declaración de funciones etc no es problema, el tema es que no me hace el hook.
Muchas gracias como siempre!!!