From 88a1dbb2f58fc96cf8e095ef96e6bfc0df52d3d9 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Wed, 9 Jun 2021 04:51:29 +0200 Subject: [PATCH] fix SetWindowPos and MoveWindow hooks --- src/winapi_hooks.c | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c index 65cfd36..55a8f0a 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -251,18 +251,47 @@ int WINAPI fake_GetSystemMetrics(int nIndex) BOOL WINAPI fake_SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags) { - UINT req_flags = SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER; + if (g_ddraw && g_ddraw->hwnd) + { + if (g_ddraw->hwnd == hWnd) + { + UINT req_flags = SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER; - if (g_ddraw && g_ddraw->hwnd == hWnd && (uFlags & req_flags) != req_flags) - return TRUE; + if ((uFlags & req_flags) != req_flags) + return TRUE; + } + else if (!IsChild(g_ddraw->hwnd, hWnd)) + { + POINT pt = { 0, 0 }; + if (real_ClientToScreen(g_ddraw->hwnd, &pt)) + { + X += pt.x; + Y += pt.y; + } + } + } return real_SetWindowPos(hWnd, hWndInsertAfter, X, Y, cx, cy, uFlags); } BOOL WINAPI fake_MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint) { - if (g_ddraw && g_ddraw->hwnd == hWnd) - return TRUE; + if (g_ddraw && g_ddraw->hwnd) + { + if (g_ddraw->hwnd == hWnd) + { + return TRUE; + } + else if (!IsChild(g_ddraw->hwnd, hWnd)) + { + POINT pt = { 0, 0 }; + if (real_ClientToScreen(g_ddraw->hwnd, &pt)) + { + X += pt.x; + Y += pt.y; + } + } + } return real_MoveWindow(hWnd, X, Y, nWidth, nHeight, bRepaint); }