mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-25 01:57:47 +01:00
hook DefWindowProcA
This commit is contained in:
parent
34250bf224
commit
f70f67857e
@ -74,7 +74,6 @@ typedef struct CNCDDRAWCONFIG
|
|||||||
BOOL no_dinput_hook;
|
BOOL no_dinput_hook;
|
||||||
BOOL direct3d_passthrough;
|
BOOL direct3d_passthrough;
|
||||||
BOOL center_cursor_fix;
|
BOOL center_cursor_fix;
|
||||||
BOOL allow_wm_nchittest;
|
|
||||||
char fake_mode[128];
|
char fake_mode[128];
|
||||||
BOOL lock_mouse_top_left;
|
BOOL lock_mouse_top_left;
|
||||||
char win_version[32];
|
char win_version[32];
|
||||||
|
@ -16,7 +16,7 @@ typedef struct HOOKLISTDATA {
|
|||||||
HMODULE mod;
|
HMODULE mod;
|
||||||
} HOOKLISTDATA;
|
} HOOKLISTDATA;
|
||||||
|
|
||||||
typedef struct HOOKLIST { char module_name[32]; HOOKLISTDATA data[35]; } HOOKLIST;
|
typedef struct HOOKLIST { char module_name[32]; HOOKLISTDATA data[36]; } HOOKLIST;
|
||||||
|
|
||||||
typedef BOOL(WINAPI* GETCURSORPOSPROC)(LPPOINT);
|
typedef BOOL(WINAPI* GETCURSORPOSPROC)(LPPOINT);
|
||||||
typedef BOOL(WINAPI* CLIPCURSORPROC)(const RECT*);
|
typedef BOOL(WINAPI* CLIPCURSORPROC)(const RECT*);
|
||||||
@ -59,6 +59,7 @@ typedef BOOL(WINAPI* GETMESSAGEAPROC)(LPMSG, HWND, UINT, UINT);
|
|||||||
typedef BOOL(WINAPI* GETWINDOWPLACEMENTPROC)(HWND, WINDOWPLACEMENT*);
|
typedef BOOL(WINAPI* GETWINDOWPLACEMENTPROC)(HWND, WINDOWPLACEMENT*);
|
||||||
typedef BOOL(WINAPI* SETWINDOWPLACEMENTPROC)(HWND, const WINDOWPLACEMENT*);
|
typedef BOOL(WINAPI* SETWINDOWPLACEMENTPROC)(HWND, const WINDOWPLACEMENT*);
|
||||||
typedef BOOL(WINAPI* ENUMDISPLAYSETTINGSAPROC)(LPCSTR, DWORD, DEVMODEA*);
|
typedef BOOL(WINAPI* ENUMDISPLAYSETTINGSAPROC)(LPCSTR, DWORD, DEVMODEA*);
|
||||||
|
typedef LRESULT(WINAPI* DEFWINDOWPROCAPROC)(HWND, UINT, WPARAM, LPARAM);
|
||||||
typedef SHORT(WINAPI* GETKEYSTATEPROC)(int);
|
typedef SHORT(WINAPI* GETKEYSTATEPROC)(int);
|
||||||
typedef SHORT(WINAPI* GETASYNCKEYSTATEPROC)(int);
|
typedef SHORT(WINAPI* GETASYNCKEYSTATEPROC)(int);
|
||||||
|
|
||||||
@ -117,6 +118,7 @@ extern GETMESSAGEAPROC real_GetMessageA;
|
|||||||
extern GETWINDOWPLACEMENTPROC real_GetWindowPlacement;
|
extern GETWINDOWPLACEMENTPROC real_GetWindowPlacement;
|
||||||
extern SETWINDOWPLACEMENTPROC real_SetWindowPlacement;
|
extern SETWINDOWPLACEMENTPROC real_SetWindowPlacement;
|
||||||
extern ENUMDISPLAYSETTINGSAPROC real_EnumDisplaySettingsA;
|
extern ENUMDISPLAYSETTINGSAPROC real_EnumDisplaySettingsA;
|
||||||
|
extern DEFWINDOWPROCAPROC real_DefWindowProcA;
|
||||||
extern GETKEYSTATEPROC real_GetKeyState;
|
extern GETKEYSTATEPROC real_GetKeyState;
|
||||||
extern GETASYNCKEYSTATEPROC real_GetAsyncKeyState;
|
extern GETASYNCKEYSTATEPROC real_GetAsyncKeyState;
|
||||||
extern GETDEVICECAPSPROC real_GetDeviceCaps;
|
extern GETDEVICECAPSPROC real_GetDeviceCaps;
|
||||||
|
@ -35,6 +35,7 @@ BOOL WINAPI fake_GetMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wM
|
|||||||
BOOL WINAPI fake_GetWindowPlacement(HWND hWnd, WINDOWPLACEMENT* lpwndpl);
|
BOOL WINAPI fake_GetWindowPlacement(HWND hWnd, WINDOWPLACEMENT* lpwndpl);
|
||||||
BOOL WINAPI fake_SetWindowPlacement(HWND hWnd, const WINDOWPLACEMENT* lpwndpl);
|
BOOL WINAPI fake_SetWindowPlacement(HWND hWnd, const WINDOWPLACEMENT* lpwndpl);
|
||||||
BOOL WINAPI fake_EnumDisplaySettingsA(LPCSTR lpszDeviceName, DWORD iModeNum, DEVMODEA* lpDevMode);
|
BOOL WINAPI fake_EnumDisplaySettingsA(LPCSTR lpszDeviceName, DWORD iModeNum, DEVMODEA* lpDevMode);
|
||||||
|
LRESULT WINAPI fake_DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||||||
SHORT WINAPI fake_GetKeyState(int nVirtKey);
|
SHORT WINAPI fake_GetKeyState(int nVirtKey);
|
||||||
SHORT WINAPI fake_GetAsyncKeyState(int vKey);
|
SHORT WINAPI fake_GetAsyncKeyState(int vKey);
|
||||||
int WINAPI fake_GetDeviceCaps(HDC hdc, int index);
|
int WINAPI fake_GetDeviceCaps(HDC hdc, int index);
|
||||||
|
@ -87,7 +87,6 @@ void cfg_load()
|
|||||||
GET_BOOL(g_config.no_dinput_hook, "no_dinput_hook", FALSE);
|
GET_BOOL(g_config.no_dinput_hook, "no_dinput_hook", FALSE);
|
||||||
GET_BOOL(g_config.direct3d_passthrough, "direct3d_passthrough", FALSE);
|
GET_BOOL(g_config.direct3d_passthrough, "direct3d_passthrough", FALSE);
|
||||||
GET_BOOL(g_config.center_cursor_fix, "center_cursor_fix", FALSE);
|
GET_BOOL(g_config.center_cursor_fix, "center_cursor_fix", FALSE);
|
||||||
GET_BOOL(g_config.allow_wm_nchittest, "allow_wm_nchittest", FALSE);
|
|
||||||
GET_STRING("fake_mode", "", g_config.fake_mode, sizeof(g_config.fake_mode));
|
GET_STRING("fake_mode", "", g_config.fake_mode, sizeof(g_config.fake_mode));
|
||||||
GET_BOOL(g_config.lock_mouse_top_left, "lock_mouse_top_left", FALSE);
|
GET_BOOL(g_config.lock_mouse_top_left, "lock_mouse_top_left", FALSE);
|
||||||
GET_STRING("win_version", "", g_config.win_version, sizeof(g_config.win_version));
|
GET_STRING("win_version", "", g_config.win_version, sizeof(g_config.win_version));
|
||||||
@ -395,7 +394,6 @@ static void cfg_create_ini()
|
|||||||
"; 7th Legion\n"
|
"; 7th Legion\n"
|
||||||
"[legion]\n"
|
"[legion]\n"
|
||||||
"maxgameticks=25\n"
|
"maxgameticks=25\n"
|
||||||
"allow_wm_nchittest=true\n"
|
|
||||||
"singlecpu=false\n"
|
"singlecpu=false\n"
|
||||||
"\n"
|
"\n"
|
||||||
"; Atrox\n"
|
"; Atrox\n"
|
||||||
@ -1331,10 +1329,6 @@ static void cfg_create_ini()
|
|||||||
"checkfile=.\\nox.cfg\n"
|
"checkfile=.\\nox.cfg\n"
|
||||||
"maxgameticks=125\n"
|
"maxgameticks=125\n"
|
||||||
"\n"
|
"\n"
|
||||||
"; Nightlong - Union City Conspiracy\n"
|
|
||||||
"[NL]\n"
|
|
||||||
"allow_wm_nchittest=true\n"
|
|
||||||
"\n"
|
|
||||||
"; Outlaws\n"
|
"; Outlaws\n"
|
||||||
"[olwin]\n"
|
"[olwin]\n"
|
||||||
"noactivateapp=true\n"
|
"noactivateapp=true\n"
|
||||||
|
@ -53,6 +53,7 @@ GETMESSAGEAPROC real_GetMessageA = GetMessageA;
|
|||||||
GETWINDOWPLACEMENTPROC real_GetWindowPlacement = GetWindowPlacement;
|
GETWINDOWPLACEMENTPROC real_GetWindowPlacement = GetWindowPlacement;
|
||||||
SETWINDOWPLACEMENTPROC real_SetWindowPlacement = SetWindowPlacement;
|
SETWINDOWPLACEMENTPROC real_SetWindowPlacement = SetWindowPlacement;
|
||||||
ENUMDISPLAYSETTINGSAPROC real_EnumDisplaySettingsA = EnumDisplaySettingsA;
|
ENUMDISPLAYSETTINGSAPROC real_EnumDisplaySettingsA = EnumDisplaySettingsA;
|
||||||
|
DEFWINDOWPROCAPROC real_DefWindowProcA = DefWindowProcA;
|
||||||
GETKEYSTATEPROC real_GetKeyState = GetKeyState;
|
GETKEYSTATEPROC real_GetKeyState = GetKeyState;
|
||||||
GETASYNCKEYSTATEPROC real_GetAsyncKeyState = GetAsyncKeyState;
|
GETASYNCKEYSTATEPROC real_GetAsyncKeyState = GetAsyncKeyState;
|
||||||
GETDEVICECAPSPROC real_GetDeviceCaps = GetDeviceCaps;
|
GETDEVICECAPSPROC real_GetDeviceCaps = GetDeviceCaps;
|
||||||
@ -108,6 +109,7 @@ HOOKLIST g_hook_hooklist[] =
|
|||||||
{ "GetWindowPlacement", (PROC)fake_GetWindowPlacement, (PROC*)&real_GetWindowPlacement, 0 },
|
{ "GetWindowPlacement", (PROC)fake_GetWindowPlacement, (PROC*)&real_GetWindowPlacement, 0 },
|
||||||
{ "SetWindowPlacement", (PROC)fake_SetWindowPlacement, (PROC*)&real_SetWindowPlacement, 0 },
|
{ "SetWindowPlacement", (PROC)fake_SetWindowPlacement, (PROC*)&real_SetWindowPlacement, 0 },
|
||||||
{ "EnumDisplaySettingsA", (PROC)fake_EnumDisplaySettingsA, (PROC*)&real_EnumDisplaySettingsA, 0 },
|
{ "EnumDisplaySettingsA", (PROC)fake_EnumDisplaySettingsA, (PROC*)&real_EnumDisplaySettingsA, 0 },
|
||||||
|
{ "DefWindowProcA", (PROC)fake_DefWindowProcA, (PROC*)&real_DefWindowProcA, 0 },
|
||||||
{ "GetKeyState", (PROC)fake_GetKeyState, (PROC*)&real_GetKeyState, 0 },
|
{ "GetKeyState", (PROC)fake_GetKeyState, (PROC*)&real_GetKeyState, 0 },
|
||||||
{ "GetAsyncKeyState", (PROC)fake_GetAsyncKeyState, (PROC*)&real_GetAsyncKeyState, 0 },
|
{ "GetAsyncKeyState", (PROC)fake_GetAsyncKeyState, (PROC*)&real_GetAsyncKeyState, 0 },
|
||||||
{ "SetForegroundWindow", (PROC)fake_SetForegroundWindow, (PROC*)&real_SetForegroundWindow, 0 },
|
{ "SetForegroundWindow", (PROC)fake_SetForegroundWindow, (PROC*)&real_SetForegroundWindow, 0 },
|
||||||
|
@ -855,6 +855,17 @@ BOOL WINAPI fake_EnumDisplaySettingsA(LPCSTR lpszDeviceName, DWORD iModeNum, DEV
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LRESULT WINAPI fake_DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
if (g_ddraw.ref && g_ddraw.hwnd && g_ddraw.hwnd == hWnd)
|
||||||
|
{
|
||||||
|
if (Msg == WM_NCHITTEST)
|
||||||
|
return HTCLIENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return real_DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
SHORT WINAPI fake_GetKeyState(int nVirtKey)
|
SHORT WINAPI fake_GetKeyState(int nVirtKey)
|
||||||
{
|
{
|
||||||
if (g_config.windowed && g_ddraw.ref && g_ddraw.hwnd && !util_in_foreground())
|
if (g_config.windowed && g_ddraw.ref && g_ddraw.hwnd && !util_in_foreground())
|
||||||
|
@ -50,7 +50,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
|||||||
case WM_CANCELMODE:
|
case WM_CANCELMODE:
|
||||||
case WM_DISPLAYCHANGE:
|
case WM_DISPLAYCHANGE:
|
||||||
{
|
{
|
||||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
return real_DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
case WM_GETMINMAXINFO:
|
case WM_GETMINMAXINFO:
|
||||||
{
|
{
|
||||||
@ -88,20 +88,20 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
return real_DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
case WM_NCACTIVATE:
|
case WM_NCACTIVATE:
|
||||||
{
|
{
|
||||||
if (g_config.noactivateapp)
|
if (g_config.noactivateapp)
|
||||||
{
|
{
|
||||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
return real_DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case WM_NCHITTEST:
|
case WM_NCHITTEST:
|
||||||
{
|
{
|
||||||
if (g_config.allow_wm_nchittest && (g_mouse_locked || g_config.devmode))
|
if (g_mouse_locked || g_config.devmode)
|
||||||
{
|
{
|
||||||
POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };
|
POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
|||||||
CallWindowProcA(g_ddraw.wndproc, hWnd, uMsg, wParam, MAKELPARAM(pt.x, pt.y));
|
CallWindowProcA(g_ddraw.wndproc, hWnd, uMsg, wParam, MAKELPARAM(pt.x, pt.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT result = DefWindowProc(hWnd, uMsg, wParam, lParam);
|
LRESULT result = real_DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||||
|
|
||||||
if (!g_config.resizable)
|
if (!g_config.resizable)
|
||||||
{
|
{
|
||||||
@ -173,7 +173,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
|||||||
case HTTOP:
|
case HTTOP:
|
||||||
case HTTOPLEFT:
|
case HTTOPLEFT:
|
||||||
case HTTOPRIGHT:
|
case HTTOPRIGHT:
|
||||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
return real_DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||||
case HTCLIENT:
|
case HTCLIENT:
|
||||||
if (!g_mouse_locked && !g_config.devmode)
|
if (!g_mouse_locked && !g_config.devmode)
|
||||||
{
|
{
|
||||||
@ -548,7 +548,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
|||||||
RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN);
|
RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN);
|
||||||
}
|
}
|
||||||
|
|
||||||
return DefWindowProc(hWnd, uMsg, wParam, lParam); /* Carmageddon fix */
|
return real_DefWindowProcA(hWnd, uMsg, wParam, lParam); /* Carmageddon fix */
|
||||||
}
|
}
|
||||||
case WM_MOVE:
|
case WM_MOVE:
|
||||||
{
|
{
|
||||||
@ -575,7 +575,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
|||||||
if (g_ddraw.got_child_windows)
|
if (g_ddraw.got_child_windows)
|
||||||
RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN);
|
RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN);
|
||||||
|
|
||||||
return DefWindowProc(hWnd, uMsg, wParam, lParam); /* Carmageddon fix */
|
return real_DefWindowProcA(hWnd, uMsg, wParam, lParam); /* Carmageddon fix */
|
||||||
}
|
}
|
||||||
case WM_RESTORE_STYLE:
|
case WM_RESTORE_STYLE:
|
||||||
{
|
{
|
||||||
@ -606,7 +606,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
|||||||
if (wParam == SC_MAXIMIZE)
|
if (wParam == SC_MAXIMIZE)
|
||||||
{
|
{
|
||||||
if (IsWine())
|
if (IsWine())
|
||||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
return real_DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||||
|
|
||||||
if (g_config.resizable)
|
if (g_config.resizable)
|
||||||
{
|
{
|
||||||
@ -626,7 +626,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!GameHandlesClose)
|
if (!GameHandlesClose)
|
||||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
return real_DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -855,7 +855,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
|||||||
{
|
{
|
||||||
if (wParam == VK_TAB || (wParam && wParam == g_config.hotkeys.toggle_fullscreen))
|
if (wParam == VK_TAB || (wParam && wParam == g_config.hotkeys.toggle_fullscreen))
|
||||||
{
|
{
|
||||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
return real_DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user