Estoy teniendo problemas con la función SendMessage. Os cuento
Estos días estaba haciendo unas pruebas de simulacion depulsaciones mediante una dll inyectada. Estos días, para hacer la prueba utilizé simplemente Notepad en un Windows XP sp2. El caso es que anteayer tube que formatear el ordenador y me cambie a windows 7. La misma prueba me funcionó correctamente con el Notepad.
El problema me vino cuando decidí probar con el GuildWars. El caso es que envía el mensaje correctamente (retorna bien y GetLastError == 0) pero parece que no llegan pasar por TranslateMessage (esto lo comprobé depurando).
Al principio, pensé que podía ser la UIPI, pero luego me di cuenta de que no podía ser porque como la funcionalidad está inyectada en el propio proceso, no debería dar problemas. Me equivoco en este razonamiento?
Alguien tiene alguna pista?
Os dejo la función que utilizo para enviar los mensajes, no creo que esté mal porque con otros programas funciona a la perfeción, pero nunca se sabe:
void send_char(char c) {
unsigned vkcode, scancode, keydata;
vkcode = LOBYTE(VkKeyScan(c));
scancode = MapVirtualKey(vkcode,0);
keydata = scancode << 16;
keydata += 1;
SendMessage(h_main_window, WM_CHAR, (WPARAM) c, (LPARAM) keydata);
}
h_main_window contiene el valor correcto.
creo que es porque usa directinput, por eso puede que se ignore tu pulsacion.
¿Seguro que h_main_window es valido?
sip, capturo el valor del handle con un hook en TranslateMessage. Además lo he comprobado con el InmunityDBG y siempre funciona
BOOL WINAPI fake_TranslateMessage(const MSG *lpMsg) {
if (lpMsg->message == WM_CHAR) {
h_main_window = lpMsg->hwnd;
}
return orig_TranslateMessage(lpMsg);
}