Ahi te lo dice claramente, tenes que hacer un casting
HWND hwnd = (HWND)590396;
Igual eso no sirve, el HWND cambiara con cada ejecucion asi que tenes que conseguir un metodo para encontrar la ventana en tiempo de ejecucion ...
PD. Las DLLs tienen DllMain y no main.
Gracias. El hwnd lo puedo obtener en cada ejecución de forma automática eso no es problema. Ya puse para que haga el hook en el hwnd indicado al cargarse la DLL. Pero aún así sigue sin interceptar el mensaje... hay algún error en donde indiqué el mensaje o el hwnd? Ya que creo que esta todo bien pero no me avisa al interceptar el mensaje WM_SETTEXT como debería hacerlo. También probé con WM_MOUSEMOVE y otros, pero tampoco funciona. Te dejo mi código:
WNDPROC default_procedure;
LRESULT CALLBACK hook(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
HWND hwnd = (HWND)590396;
default_procedure = (WNDPROC)SetWindowLongPtr(hwnd, WM_MOUSEMOVE, (LONG)hook);
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
LRESULT CALLBACK hook(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
// Haces tu trabajo...
MessageBox (0, "Message Detected", "DLL", MB_ICONINFORMATION);
return CallWindowProc(default_procedure, hwnd, message, wParam, lParam);
}
En este caso usé la constante WM_MOUSEMOVE
Gracias