remove early hook function
This commit is contained in:
parent
8fe772d385
commit
1452bbe598
7 changed files with 154 additions and 95 deletions
|
@ -16,9 +16,12 @@
|
|||
|
||||
BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint)
|
||||
{
|
||||
if (!g_ddraw || !g_ddraw->hwnd || !g_ddraw->width)
|
||||
return real_GetCursorPos(lpPoint);
|
||||
|
||||
POINT pt, realpt;
|
||||
|
||||
if (!real_GetCursorPos(&pt) || !g_ddraw)
|
||||
if (!real_GetCursorPos(&pt))
|
||||
return FALSE;
|
||||
|
||||
realpt.x = pt.x;
|
||||
|
@ -130,7 +133,7 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint)
|
|||
|
||||
BOOL WINAPI fake_ClipCursor(const RECT* lpRect)
|
||||
{
|
||||
if (g_ddraw)
|
||||
if (g_ddraw && g_ddraw->hwnd && g_ddraw->width)
|
||||
{
|
||||
RECT dst_rc = {
|
||||
0,
|
||||
|
@ -176,7 +179,7 @@ BOOL WINAPI fake_ClipCursor(const RECT* lpRect)
|
|||
|
||||
int WINAPI fake_ShowCursor(BOOL bShow)
|
||||
{
|
||||
if (g_ddraw)
|
||||
if (g_ddraw && g_ddraw->hwnd)
|
||||
{
|
||||
if (g_mouse_locked || g_ddraw->devmode)
|
||||
{
|
||||
|
@ -197,7 +200,7 @@ int WINAPI fake_ShowCursor(BOOL bShow)
|
|||
|
||||
HCURSOR WINAPI fake_SetCursor(HCURSOR hCursor)
|
||||
{
|
||||
if (g_ddraw)
|
||||
if (g_ddraw && g_ddraw->hwnd)
|
||||
{
|
||||
HCURSOR cursor = (HCURSOR)InterlockedExchange((LONG*)&g_ddraw->old_cursor, (LONG)hCursor);
|
||||
|
||||
|
@ -260,7 +263,10 @@ BOOL WINAPI fake_GetClientRect(HWND hWnd, LPRECT lpRect)
|
|||
|
||||
BOOL WINAPI fake_ClientToScreen(HWND hWnd, LPPOINT lpPoint)
|
||||
{
|
||||
if (g_ddraw && g_ddraw->hwnd != hWnd)
|
||||
if (!g_ddraw || !g_ddraw->hwnd)
|
||||
return real_ClientToScreen(hWnd, lpPoint);
|
||||
|
||||
if (g_ddraw->hwnd != hWnd)
|
||||
return real_ClientToScreen(hWnd, lpPoint) && real_ScreenToClient(g_ddraw->hwnd, lpPoint);
|
||||
|
||||
return TRUE;
|
||||
|
@ -268,7 +274,10 @@ BOOL WINAPI fake_ClientToScreen(HWND hWnd, LPPOINT lpPoint)
|
|||
|
||||
BOOL WINAPI fake_ScreenToClient(HWND hWnd, LPPOINT lpPoint)
|
||||
{
|
||||
if (g_ddraw && g_ddraw->hwnd != hWnd)
|
||||
if (!g_ddraw || !g_ddraw->hwnd)
|
||||
return real_ScreenToClient(hWnd, lpPoint);
|
||||
|
||||
if (g_ddraw->hwnd != hWnd)
|
||||
return real_ClientToScreen(g_ddraw->hwnd, lpPoint) && real_ScreenToClient(hWnd, lpPoint);
|
||||
|
||||
return TRUE;
|
||||
|
@ -276,35 +285,41 @@ BOOL WINAPI fake_ScreenToClient(HWND hWnd, LPPOINT lpPoint)
|
|||
|
||||
BOOL WINAPI fake_SetCursorPos(int X, int Y)
|
||||
{
|
||||
if (g_ddraw && !g_mouse_locked && !g_ddraw->devmode)
|
||||
if (!g_ddraw || !g_ddraw->hwnd || !g_ddraw->width)
|
||||
return real_SetCursorPos(X, Y);
|
||||
|
||||
if (!g_mouse_locked && !g_ddraw->devmode)
|
||||
return TRUE;
|
||||
|
||||
POINT pt = { X, Y };
|
||||
|
||||
if (g_ddraw)
|
||||
if (g_ddraw->adjmouse)
|
||||
{
|
||||
if (g_ddraw->adjmouse)
|
||||
{
|
||||
pt.x = (LONG)(roundf(pt.x * g_ddraw->render.scale_w));
|
||||
pt.y = (LONG)(roundf(pt.y * g_ddraw->render.scale_h));
|
||||
}
|
||||
|
||||
pt.x += g_ddraw->mouse.x_adjust;
|
||||
pt.y += g_ddraw->mouse.y_adjust;
|
||||
pt.x = (LONG)(roundf(pt.x * g_ddraw->render.scale_w));
|
||||
pt.y = (LONG)(roundf(pt.y * g_ddraw->render.scale_h));
|
||||
}
|
||||
|
||||
return g_ddraw && real_ClientToScreen(g_ddraw->hwnd, &pt) && real_SetCursorPos(pt.x, pt.y);
|
||||
pt.x += g_ddraw->mouse.x_adjust;
|
||||
pt.y += g_ddraw->mouse.y_adjust;
|
||||
|
||||
return real_ClientToScreen(g_ddraw->hwnd, &pt) && real_SetCursorPos(pt.x, pt.y);
|
||||
}
|
||||
|
||||
HWND WINAPI fake_WindowFromPoint(POINT Point)
|
||||
{
|
||||
if (!g_ddraw || !g_ddraw->hwnd)
|
||||
return real_WindowFromPoint(Point);
|
||||
|
||||
POINT pt = { Point.x, Point.y };
|
||||
return g_ddraw && real_ClientToScreen(g_ddraw->hwnd, &pt) ? real_WindowFromPoint(pt) : NULL;
|
||||
return real_ClientToScreen(g_ddraw->hwnd, &pt) ? real_WindowFromPoint(pt) : NULL;
|
||||
}
|
||||
|
||||
BOOL WINAPI fake_GetClipCursor(LPRECT lpRect)
|
||||
{
|
||||
if (lpRect && g_ddraw)
|
||||
if (!g_ddraw || !g_ddraw->width)
|
||||
return real_GetClipCursor(lpRect);
|
||||
|
||||
if (lpRect)
|
||||
{
|
||||
lpRect->bottom = g_ddraw->height;
|
||||
lpRect->left = 0;
|
||||
|
@ -319,12 +334,15 @@ BOOL WINAPI fake_GetClipCursor(LPRECT lpRect)
|
|||
|
||||
BOOL WINAPI fake_GetCursorInfo(PCURSORINFO pci)
|
||||
{
|
||||
return pci && g_ddraw && real_GetCursorInfo(pci) && real_ScreenToClient(g_ddraw->hwnd, &pci->ptScreenPos);
|
||||
if (!g_ddraw || !g_ddraw->hwnd)
|
||||
return real_GetCursorInfo(pci);
|
||||
|
||||
return pci && real_GetCursorInfo(pci) && real_ScreenToClient(g_ddraw->hwnd, &pci->ptScreenPos);
|
||||
}
|
||||
|
||||
int WINAPI fake_GetSystemMetrics(int nIndex)
|
||||
{
|
||||
if (g_ddraw)
|
||||
if (g_ddraw && g_ddraw->width)
|
||||
{
|
||||
if (nIndex == SM_CXSCREEN)
|
||||
return g_ddraw->width;
|
||||
|
@ -396,7 +414,10 @@ BOOL WINAPI fake_MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BO
|
|||
|
||||
LRESULT WINAPI fake_SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (g_ddraw && g_ddraw->hwnd == hWnd && Msg == WM_MOUSEMOVE)
|
||||
if (!g_ddraw || !g_ddraw->hwnd)
|
||||
return real_SendMessageA(hWnd, Msg, wParam, lParam);
|
||||
|
||||
if (g_ddraw->hwnd == hWnd && Msg == WM_MOUSEMOVE)
|
||||
{
|
||||
int x = GET_X_LPARAM(lParam);
|
||||
int y = GET_Y_LPARAM(lParam);
|
||||
|
@ -410,7 +431,7 @@ LRESULT WINAPI fake_SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPar
|
|||
lParam = MAKELPARAM(x + g_ddraw->mouse.x_adjust, y + g_ddraw->mouse.y_adjust);
|
||||
}
|
||||
|
||||
if (g_ddraw && g_ddraw->hwnd == hWnd && Msg == WM_SIZE && (g_hook_method != 2 && g_hook_method != 3))
|
||||
if (g_ddraw->hwnd == hWnd && Msg == WM_SIZE && (g_hook_method != 2 && g_hook_method != 3))
|
||||
{
|
||||
Msg = WM_SIZE_DDRAW;
|
||||
}
|
||||
|
@ -471,7 +492,7 @@ BOOL WINAPI fake_EnableWindow(HWND hWnd, BOOL bEnable)
|
|||
|
||||
int WINAPI fake_MapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT cPoints)
|
||||
{
|
||||
if (g_ddraw)
|
||||
if (g_ddraw && g_ddraw->hwnd)
|
||||
{
|
||||
if (hWndTo == HWND_DESKTOP)
|
||||
{
|
||||
|
@ -570,7 +591,7 @@ BOOL WINAPI fake_PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT w
|
|||
{
|
||||
BOOL result = real_PeekMessageA(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg);
|
||||
|
||||
if (result && g_ddraw && g_ddraw->hook_peekmessage)
|
||||
if (result && g_ddraw && g_ddraw->width && g_ddraw->hook_peekmessage)
|
||||
{
|
||||
switch (lpMsg->message)
|
||||
{
|
||||
|
@ -882,6 +903,14 @@ HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName)
|
|||
{
|
||||
HMODULE hmod = real_LoadLibraryA(lpLibFileName);
|
||||
|
||||
#ifdef _DEBUG_X
|
||||
char mod_path[MAX_PATH] = { 0 };
|
||||
if (hmod && GetModuleFileNameA(hmod, mod_path, MAX_PATH))
|
||||
{
|
||||
TRACE_EXT("LoadLibraryA Module %s = %p (%s)\n", mod_path, hmod, lpLibFileName);
|
||||
}
|
||||
#endif
|
||||
|
||||
hook_init();
|
||||
|
||||
return hmod;
|
||||
|
@ -891,6 +920,14 @@ HMODULE WINAPI fake_LoadLibraryW(LPCWSTR lpLibFileName)
|
|||
{
|
||||
HMODULE hmod = real_LoadLibraryW(lpLibFileName);
|
||||
|
||||
#ifdef _DEBUG
|
||||
char mod_path[MAX_PATH] = { 0 };
|
||||
if (hmod && GetModuleFileNameA(hmod, mod_path, MAX_PATH))
|
||||
{
|
||||
TRACE("LoadLibraryW Module %s = %p\n", mod_path, hmod);
|
||||
}
|
||||
#endif
|
||||
|
||||
hook_init();
|
||||
|
||||
return hmod;
|
||||
|
@ -900,6 +937,14 @@ HMODULE WINAPI fake_LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwF
|
|||
{
|
||||
HMODULE hmod = real_LoadLibraryExA(lpLibFileName, hFile, dwFlags);
|
||||
|
||||
#ifdef _DEBUG
|
||||
char mod_path[MAX_PATH] = { 0 };
|
||||
if (hmod && GetModuleFileNameA(hmod, mod_path, MAX_PATH))
|
||||
{
|
||||
TRACE("LoadLibraryExA Module %s = %p (%s)\n", mod_path, hmod, lpLibFileName);
|
||||
}
|
||||
#endif
|
||||
|
||||
hook_init();
|
||||
|
||||
return hmod;
|
||||
|
@ -909,6 +954,14 @@ HMODULE WINAPI fake_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dw
|
|||
{
|
||||
HMODULE hmod = real_LoadLibraryExW(lpLibFileName, hFile, dwFlags);
|
||||
|
||||
#ifdef _DEBUG
|
||||
char mod_path[MAX_PATH] = { 0 };
|
||||
if (hmod && GetModuleFileNameA(hmod, mod_path, MAX_PATH))
|
||||
{
|
||||
TRACE("LoadLibraryExW Module %s = %p\n", mod_path, hmod);
|
||||
}
|
||||
#endif
|
||||
|
||||
hook_init();
|
||||
|
||||
return hmod;
|
||||
|
@ -1008,12 +1061,12 @@ HWND WINAPI fake_CreateWindowExA(
|
|||
int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam)
|
||||
{
|
||||
/* Fix for SMACKW32.DLL creating another window that steals the focus */
|
||||
if (HIWORD(lpClassName) && _strcmpi(lpClassName, "MouseTypeWind") == 0 && g_ddraw)
|
||||
if (HIWORD(lpClassName) && _strcmpi(lpClassName, "MouseTypeWind") == 0 && g_ddraw && g_ddraw->hwnd)
|
||||
{
|
||||
dwStyle &= ~WS_VISIBLE;
|
||||
}
|
||||
|
||||
if (HIWORD(lpClassName) && _strcmpi(lpClassName, "SDlgDialog") == 0 && g_ddraw)
|
||||
if (HIWORD(lpClassName) && _strcmpi(lpClassName, "SDlgDialog") == 0 && g_ddraw && g_ddraw->hwnd)
|
||||
{
|
||||
if (!g_ddraw->bnet_active)
|
||||
{
|
||||
|
@ -1080,18 +1133,23 @@ HWND WINAPI fake_CreateWindowExA(
|
|||
|
||||
HRESULT WINAPI fake_CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID* ppv)
|
||||
{
|
||||
if (rclsid && riid && (IsEqualGUID(&CLSID_DirectDraw, rclsid) || IsEqualGUID(&CLSID_DirectDraw7, rclsid)))
|
||||
if (rclsid && riid)
|
||||
{
|
||||
if (IsEqualGUID(&IID_IDirectDraw2, riid) ||
|
||||
IsEqualGUID(&IID_IDirectDraw4, riid) ||
|
||||
IsEqualGUID(&IID_IDirectDraw7, riid))
|
||||
TRACE("CoCreateInstance rclsid = %08X, riid = %08X, \n", ((GUID*)rclsid)->Data1, ((GUID*)riid)->Data1);
|
||||
|
||||
if (IsEqualGUID(&CLSID_DirectDraw, rclsid) || IsEqualGUID(&CLSID_DirectDraw7, rclsid))
|
||||
{
|
||||
return dd_CreateEx(NULL, ppv, riid, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
return dd_CreateEx(NULL, ppv, &IID_IDirectDraw, NULL);
|
||||
}
|
||||
if (IsEqualGUID(&IID_IDirectDraw2, riid) ||
|
||||
IsEqualGUID(&IID_IDirectDraw4, riid) ||
|
||||
IsEqualGUID(&IID_IDirectDraw7, riid))
|
||||
{
|
||||
return dd_CreateEx(NULL, ppv, riid, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
return dd_CreateEx(NULL, ppv, &IID_IDirectDraw, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return real_CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, ppv);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue