WhatsApp Discord
Fix: Bug de Teclas Pegadas y Reset de Mouse al Minimizar (WM_ACTIVATE) - Source Mu - Mu Server Files
 

Fix: Bug de Teclas Pegadas y Reset de Mouse al Minimizar (WM_ACTIVATE)

Publicado por Dakosmu, Mar 20, 2026, 09:39 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Dakosmu

Fix: Bug de Teclas Pegadas y Reset de Mouse al Minimizar (WM_ACTIVATE)

¿Te ha pasado que al hacer Alt+Tab en tu servidor Mu Online o aplicación C++, el personaje se queda caminando solo o el mouse deja de responder correctamente? Este problema ocurre porque el buffer de entrada no se limpia al perder el foco de la ventana.


En este tutorial, aprenderás a implementar un fix profesional en el WndProc para gestionar correctamente el estado de los periféricos.

Este código utiliza el mensaje de Windows WM_ACTIVATE para detectar cuándo el usuario entra o sale de la aplicación, asegurando un reset total de los inputs.

Pasos para la instalación:

  • Abre el archivo de origen donde gestionas los mensajes de ventana (comúnmente User.cpp o Window.cpp).
  • Busca la sentencia
    switch (uMsg) y localiza el caso
    case WM_ACTIVATE:.
  • Reemplaza el bloque de código existente por el siguiente fragmento optimizado:

case WM_ACTIVATE:
if (LOWORD(wParam) == WA_INACTIVE)
{
// Si la ventana está inactiva, reseteamos el estado del Mouse
if (gwinhandle->CheckWndMode())
{
MouseLButton = false;
MouseLButtonPop = false;
MouseRButton = false;
MouseRButtonPop = false;
MouseRButtonPush = false;
MouseLButtonDBClick = false;
MouseMButton = false;
MouseMButtonPop = false;
MouseMButtonPush = false;
MouseWheel = false;

        // Reset completo del array de teclado para evitar teclas pegadas
        extern bool KeyState[256];
        memset(KeyState, 0, sizeof(KeyState));
    }
}
else
{
    // Al volver a la ventana, limpiamos modificadores (Alt, Ctrl, Shift)
    extern bool KeyState[256];
    KeyState[VK_MENU] = false;    // Reset ALT
    KeyState[VK_CONTROL] = false; // Reset CTRL
    KeyState[VK_SHIFT] = false;   // Reset SHIFT
}
break;

Asegúrate de que las variables globales como MouseLButton o el array KeyState coincidan con los nombres definidos en tu código fuente original.

Una vez aplicado, compila tu proyecto. Notarás que al minimizar el juego con la tecla ALT, esta ya no se quedará "presionada" virtualmente al regresar.

Si el compilador no reconoce memset, recuerda incluir la librería
#include <string.h> en la cabecera de tu archivo.

¿Te sirvió este fix?
Si tienes dudas sobre la implementación en otros protocolos de Mu Online o aplicaciones C++, deja un comentario abajo. ¡No olvides compartir tus resultados!
Bon Dia

🡱 🡳
Real Time Web Analytics