diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c
index a7e22cc..8d8d8b5 100644
--- a/src/winapi_hooks.c
+++ b/src/winapi_hooks.c
@@ -612,7 +612,7 @@ HHOOK WINAPI fake_SetWindowsHookExA(int idHook, HOOKPROC lpfn, HINSTANCE hmod, D
     return result;
 }
 
-void HandleMessage(LPMSG lpMsg, HWND hWnd)
+BOOL HandleMessage(LPMSG lpMsg, HWND hWnd)
 {
     if (lpMsg && g_ddraw.ref && g_ddraw.hwnd && g_ddraw.width && !g_config.fixmousehook)
     {
@@ -637,7 +637,7 @@ void HandleMessage(LPMSG lpMsg, HWND hWnd)
         }
 
         if (lpMsg->hwnd != g_ddraw.hwnd)
-            return;
+            return TRUE;
 
         switch (LOWORD(lpMsg->message))
         {
@@ -653,6 +653,7 @@ void HandleMessage(LPMSG lpMsg, HWND hWnd)
                 mouse_lock();
 
                 lpMsg->message = (UINT)MAKELONG(WM_NULL, HIWORD(lpMsg->message));
+                return FALSE;
             }
             
             break;
@@ -675,12 +676,15 @@ void HandleMessage(LPMSG lpMsg, HWND hWnd)
             {
                 // Does not work with 'New Robinson'
                 lpMsg->message = (UINT)MAKELONG(WM_NULL, HIWORD(lpMsg->message));
+                return FALSE;
             }
 
             break;
         }
         }
     }
+
+    return TRUE;
 }
 
 BOOL WINAPI fake_GetMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax)
@@ -705,7 +709,7 @@ BOOL WINAPI fake_PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT w
     BOOL result = real_PeekMessageA(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg);
     if (result)
     {
-        HandleMessage(lpMsg, hWnd);
+        return HandleMessage(lpMsg, hWnd);
     }
 
     return result;