1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

make fixwndprochook useful for other games as well

This commit is contained in:
FunkyFr3sh 2021-06-04 22:46:15 +02:00
parent 1c8a793e29
commit 50e6cf7534
4 changed files with 29 additions and 6 deletions

View File

@ -25,6 +25,7 @@ typedef BOOL (WINAPI* SETWINDOWPOSPROC)(HWND, HWND, int, int, int, int, UINT);
typedef BOOL (WINAPI* MOVEWINDOWPROC)(HWND, int, int, int, int, BOOL);
typedef LRESULT (WINAPI* SENDMESSAGEAPROC)(HWND, UINT, WPARAM, LPARAM);
typedef LONG (WINAPI* SETWINDOWLONGAPROC)(HWND, int, LONG);
typedef LONG (WINAPI* GETWINDOWLONGAPROC)(HWND, int);
typedef BOOL (WINAPI* ENABLEWINDOWPROC)(HWND, BOOL);
typedef HWND (WINAPI* CREATEWINDOWEXAPROC)(DWORD, LPCSTR, LPCSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID);
typedef BOOL (WINAPI* DESTROYWINDOWPROC)(HWND);
@ -52,6 +53,7 @@ extern SETWINDOWPOSPROC real_SetWindowPos;
extern MOVEWINDOWPROC real_MoveWindow;
extern SENDMESSAGEAPROC real_SendMessageA;
extern SETWINDOWLONGAPROC real_SetWindowLongA;
extern GETWINDOWLONGAPROC real_GetWindowLongA;
extern ENABLEWINDOWPROC real_EnableWindow;
extern CREATEWINDOWEXAPROC real_CreateWindowExA;
extern DESTROYWINDOWPROC real_DestroyWindow;

View File

@ -22,6 +22,7 @@ BOOL WINAPI fake_SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int
BOOL WINAPI fake_MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint);
LRESULT WINAPI fake_SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
LONG WINAPI fake_SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong);
LONG WINAPI fake_GetWindowLongA(HWND hWnd, int nIndex);
BOOL WINAPI fake_EnableWindow(HWND hWnd, BOOL bEnable);
BOOL WINAPI fake_DestroyWindow(HWND hWnd);
int WINAPI fake_MapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT cPoints);

View File

@ -33,6 +33,7 @@ SETWINDOWPOSPROC real_SetWindowPos = SetWindowPos;
MOVEWINDOWPROC real_MoveWindow = MoveWindow;
SENDMESSAGEAPROC real_SendMessageA = SendMessageA;
SETWINDOWLONGAPROC real_SetWindowLongA = SetWindowLongA;
GETWINDOWLONGAPROC real_GetWindowLongA = GetWindowLongA;
ENABLEWINDOWPROC real_EnableWindow = EnableWindow;
CREATEWINDOWEXAPROC real_CreateWindowExA = CreateWindowExA;
DESTROYWINDOWPROC real_DestroyWindow = DestroyWindow;
@ -66,6 +67,7 @@ static hook_list g_hooks[] =
{ "MoveWindow", (PROC)fake_MoveWindow, (PROC*)&real_MoveWindow },
{ "SendMessageA", (PROC)fake_SendMessageA, (PROC*)&real_SendMessageA },
{ "SetWindowLongA", (PROC)fake_SetWindowLongA, (PROC*)&real_SetWindowLongA },
{ "GetWindowLongA", (PROC)fake_GetWindowLongA, (PROC*)&real_GetWindowLongA },
{ "EnableWindow", (PROC)fake_EnableWindow, (PROC*)&real_EnableWindow },
{ "CreateWindowExA", (PROC)fake_CreateWindowExA, (PROC*)&real_CreateWindowExA },
{ "DestroyWindow", (PROC)fake_DestroyWindow, (PROC*)&real_DestroyWindow },

View File

@ -306,14 +306,19 @@ LONG WINAPI fake_SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong)
{
if (dwNewLong == (LONG)compat_WndProc)
{
LONG result = real_SetWindowLongA(hWnd, nIndex, (LONG)g_compat_wndproc);
g_compat_wndproc = NULL;
return result;
WNDPROC old = g_ddraw->wndproc = g_compat_wndproc;
//g_compat_wndproc = NULL;
return (LONG)old;
}
else if (!g_compat_wndproc)
else
{
g_compat_wndproc = (WNDPROC)real_SetWindowLongA(hWnd, nIndex, dwNewLong);
return g_compat_wndproc ? (LONG)compat_WndProc : 0;
if (dwNewLong != (LONG)g_ddraw->wndproc)
{
g_compat_wndproc = g_ddraw->wndproc;
g_ddraw->wndproc = (WNDPROC)dwNewLong;
}
return (LONG)compat_WndProc;
}
}
}
@ -321,6 +326,19 @@ LONG WINAPI fake_SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong)
return real_SetWindowLongA(hWnd, nIndex, dwNewLong);
}
LONG WINAPI fake_GetWindowLongA(HWND hWnd, int nIndex)
{
if (g_ddraw && g_ddraw->hwnd == hWnd)
{
if (nIndex == GWL_WNDPROC && g_ddraw->fixwndprochook)
{
return (LONG)compat_WndProc;
}
}
return real_GetWindowLongA(hWnd, nIndex);
}
BOOL WINAPI fake_EnableWindow(HWND hWnd, BOOL bEnable)
{
if (g_ddraw && g_ddraw->hwnd == hWnd)