You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
245 lines
9.7 KiB
C
245 lines
9.7 KiB
C
2 years ago
|
// XTPSkinManagerApiHook.h: interface for the CXTPSkinManagerApiHook class.
|
||
|
//
|
||
|
// This file is a part of the XTREME SKINFRAMEWORK MFC class library.
|
||
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
||
|
//
|
||
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
||
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
||
|
// CONSENT OF CODEJOCK SOFTWARE.
|
||
|
//
|
||
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
||
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
||
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
||
|
// SINGLE COMPUTER.
|
||
|
//
|
||
|
// CONTACT INFORMATION:
|
||
|
// support@codejock.com
|
||
|
// http://www.codejock.com
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
#if !defined(__XTPSKINMANAGERAPIHOOK_H__)
|
||
|
#define __XTPSKINMANAGERAPIHOOK_H__
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif // _MSC_VER > 1000
|
||
|
|
||
|
|
||
|
class CXTPWinThemeWrapper;
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
enum XTPSkinFrameworkApiFunctionIndex
|
||
|
{
|
||
|
xtpSkinApiLoadLibraryA,
|
||
|
xtpSkinApiLoadLibraryW,
|
||
|
xtpSkinApiLoadLibraryExA,
|
||
|
xtpSkinApiLoadLibraryExW,
|
||
|
xtpSkinApiGetProcAddress,
|
||
|
xtpSkinApiGetModuleHandleA,
|
||
|
xtpSkinApiRegisterClassA,
|
||
|
xtpSkinApiRegisterClassW,
|
||
|
xtpSkinApiGetSysColor,
|
||
|
xtpSkinApiGetSysColorBrush,
|
||
|
xtpSkinApiDrawEdge,
|
||
|
xtpSkinApiDrawFrameControl,
|
||
|
xtpSkinApiSetScrollInfo,
|
||
|
xtpSkinApiSetScrollPos,
|
||
|
xtpSkinApiGetScrollInfo,
|
||
|
xtpSkinApiEnableScrollBar,
|
||
|
xtpSkinApiOpenThemeData,
|
||
|
xtpSkinApiDrawThemeBackground,
|
||
|
xtpSkinApiCloseThemeData,
|
||
|
xtpSkinApiGetThemeColor,
|
||
|
xtpSkinApiGetThemeInt,
|
||
|
xtpSkinApiIsAppThemed,
|
||
|
xtpSkinApiIsThemeActive,
|
||
|
xtpSkinApiGetCurrentThemeName,
|
||
|
xtpSkinApiGetThemeSysBool,
|
||
|
xtpSkinApiGetThemeSysColor,
|
||
|
xtpSkinApiGetThemePartSize,
|
||
|
xtpSkinApiSystemParametersInfo,
|
||
|
xtpSkinApiDefWindowProcA,
|
||
|
xtpSkinApiDefWindowProcW,
|
||
|
xtpSkinApiDefMDIChildProcA,
|
||
|
xtpSkinApiDefMDIChildProcW,
|
||
|
xtpSkinApiDefFrameProcA,
|
||
|
xtpSkinApiDefFrameProcW,
|
||
|
xtpSkinApiDefDlgProcA,
|
||
|
xtpSkinApiDefDlgProcW,
|
||
|
xtpSkinApiCallWindowProcA,
|
||
|
xtpSkinApiCallWindowProcW,
|
||
|
xtpSkinApiCreateThread,
|
||
|
xtpSkinApiFillRect,
|
||
|
xtpSkinApiDeleteObject,
|
||
|
xtpSkinApiAdjustWindowRectEx,
|
||
|
xtpSkinApiAdjustWindowRect,
|
||
|
xtpSkinApiGetSystemMetrics,
|
||
|
xtpSkinApiTrackPopupMenu,
|
||
|
xtpSkinApiTrackPopupMenuEx,
|
||
|
xtpSkinApiDrawMenuBar,
|
||
|
xtpSkinApiLoadLibraryEx2W,
|
||
|
XTP_SKIN_APIHOOKCOUNT
|
||
|
};
|
||
|
|
||
|
|
||
|
class CXTPSkinManagerApiHook;
|
||
|
|
||
|
class CXTPSkinManagerApiFunction
|
||
|
{
|
||
|
public:
|
||
|
CXTPSkinManagerApiFunction(CXTPSkinManagerApiHook* pApiHook,
|
||
|
LPCSTR pszCalleeModName, LPCSTR pszFuncName, PROC pfnOrig, PROC pfnHook);
|
||
|
|
||
|
virtual ~CXTPSkinManagerApiFunction();
|
||
|
|
||
|
public:
|
||
|
BOOL HookImport();
|
||
|
BOOL UnhookImport();
|
||
|
|
||
|
private:
|
||
|
BOOL ReplaceInOneModule(LPCSTR pszCalleeModName, PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller);
|
||
|
BOOL ReplaceInAllModules(LPCSTR pszCalleeModName, PROC pfnCurrent, PROC pfnNew);
|
||
|
|
||
|
private:
|
||
|
CXTPSkinManagerApiHook* m_pApiHook;
|
||
|
BOOL m_bHooked;
|
||
|
char m_szCalleeModName[50];
|
||
|
char m_szFuncName[30];
|
||
|
PROC m_pfnOrig;
|
||
|
PROC m_pfnHook;
|
||
|
|
||
|
static PVOID sm_pvMaxAppAddr;
|
||
|
static PVOID sm_pfnAfxWndProc;
|
||
|
|
||
|
friend class CXTPSkinManagerApiHook;
|
||
|
friend class CXTPSkinObject;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class _XTP_EXT_CLASS CXTPSkinManagerApiHook
|
||
|
{
|
||
|
struct EXCLUDEDMODULE
|
||
|
{
|
||
|
HMODULE hModule;
|
||
|
CString strModule;
|
||
|
BOOL bWin9x;
|
||
|
};
|
||
|
|
||
|
private:
|
||
|
CXTPSkinManagerApiHook();
|
||
|
|
||
|
public:
|
||
|
static CXTPSkinManagerApiHook* AFX_CDECL GetInstance();
|
||
|
virtual ~CXTPSkinManagerApiHook();
|
||
|
|
||
|
public:
|
||
|
void ExcludeModule(LPCTSTR lpszModule, BOOL bWin9x);
|
||
|
BOOL IsModuleExcluded(HMODULE hModule) const;
|
||
|
|
||
|
public:
|
||
|
void InitializeHookManagement();
|
||
|
void FinalizeHookManagement();
|
||
|
|
||
|
public:
|
||
|
CXTPSkinManagerApiFunction* GetHookedFunction(LPCSTR pszCalleeModName, LPCSTR pszFuncName);
|
||
|
CXTPSkinManagerApiFunction* GetHookedFunction(XTPSkinFrameworkApiFunctionIndex nIndex);
|
||
|
static PROC AFX_CDECL GetOriginalProc(XTPSkinFrameworkApiFunctionIndex nIndex);
|
||
|
|
||
|
public:
|
||
|
static FARPROC WINAPI GetProcAddressWindows(HMODULE hmod, LPCSTR pszProcName);
|
||
|
|
||
|
static BOOL WINAPI AdjustWindowRectExOrig(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle);
|
||
|
|
||
|
static LRESULT WINAPI CallWindowProcOrig(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
static BOOL AFX_CDECL IsSystemWindowModule(WNDPROC lpWndProc);
|
||
|
|
||
|
void ConnectWrapper(CXTPWinThemeWrapper* pThemeWrapper);
|
||
|
|
||
|
protected:
|
||
|
void UnhookAllFunctions();
|
||
|
CXTPSkinManagerApiFunction* HookImport(XTPSkinFrameworkApiFunctionIndex nIndex, LPCSTR pszCalleeModName, LPCSTR pszFuncName, PROC pfnHook);
|
||
|
|
||
|
|
||
|
private:
|
||
|
static HMODULE WINAPI OnHookGetModuleHandleA(LPCSTR lpModuleName);
|
||
|
|
||
|
CXTPSkinManagerApiFunction* AddHook(XTPSkinFrameworkApiFunctionIndex nIndex, LPCSTR pszCalleeModName, LPCSTR pszFuncName, PROC pfnOrig, PROC pfnHook);
|
||
|
|
||
|
BOOL RemoveHook(LPCSTR pszCalleeModName, LPCSTR pszFuncName);
|
||
|
|
||
|
void HackModuleOnLoad(HMODULE hmod, DWORD dwFlags);
|
||
|
|
||
|
static HMODULE WINAPI OnHookLoadLibraryW(PCWSTR pszModuleName);
|
||
|
static HMODULE WINAPI OnHookLoadLibraryExA(LPCSTR pszModuleName, HANDLE hFile, DWORD dwFlags);
|
||
|
static HMODULE WINAPI OnHookLoadLibraryExW(PCWSTR pszModuleName, HANDLE hFile, DWORD dwFlags);
|
||
|
static HMODULE WINAPI OnHookLoadLibraryEx2W(PCWSTR pszModuleName, HANDLE hFile, DWORD dwFlags);
|
||
|
static FARPROC WINAPI OnHookGetProcAddress(HMODULE hmod, PCSTR pszProcName);
|
||
|
static HMODULE WINAPI OnHookLoadLibraryA(LPCSTR pszModuleName);
|
||
|
|
||
|
static ATOM WINAPI OnHookRegisterClassA( const WNDCLASSA *lpWndClass);
|
||
|
static ATOM WINAPI OnHookRegisterClassW( const WNDCLASSW *lpWndClass);
|
||
|
static int WINAPI OnHookSetScrollInfo(HWND hwnd, int fnBar, LPCSCROLLINFO lpsi, BOOL fRedraw);
|
||
|
static int WINAPI OnHookSetScrollPos(HWND hwnd, int nBar, int nPos, BOOL redraw);
|
||
|
static BOOL WINAPI OnHookAdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle);
|
||
|
static BOOL WINAPI OnHookAdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu);
|
||
|
static int WINAPI OnHookGetSystemMetrics(int nIndex);
|
||
|
static BOOL WINAPI OnHookEnableScrollBar(HWND hWnd, UINT wSBflags, UINT wArrows);
|
||
|
static BOOL WINAPI OnHookGetScrollInfo(HWND hwnd, int nBar, LPSCROLLINFO lpsi);
|
||
|
static DWORD WINAPI OnHookGetSysColor(int nIndex);
|
||
|
static BOOL WINAPI OnHookDeleteObject(HGDIOBJ hObject);
|
||
|
static BOOL WINAPI OnHookDrawEdge (HDC hdc, LPRECT qrc, UINT edge, UINT grfFlags);
|
||
|
static BOOL WINAPI OnHookDrawFrameControl(HDC hDC, LPRECT rect, UINT, UINT);
|
||
|
static HBRUSH WINAPI OnHookGetSysColorBrush(int nIndex);
|
||
|
static BOOL WINAPI OnHookSystemParametersInfo (UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni);
|
||
|
static LRESULT WINAPI OnHookDefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||
|
static LRESULT WINAPI OnHookDefWindowProcW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||
|
static LRESULT WINAPI OnHookDefFrameProcA(HWND hWnd, HWND hWndMDIClient, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||
|
static LRESULT WINAPI OnHookDefFrameProcW(HWND hWnd, HWND hWndMDIClient, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||
|
static LRESULT WINAPI OnHookDefDlgProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||
|
static LRESULT WINAPI OnHookDefDlgProcW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||
|
static LRESULT WINAPI OnHookDefMDIChildProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||
|
static LRESULT WINAPI OnHookDefMDIChildProcW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||
|
static LRESULT WINAPI OnHookCallWindowProcA(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||
|
static LRESULT WINAPI OnHookCallWindowProcW(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||
|
static int WINAPI OnHookFillRect( HDC hDC, CONST RECT *lprc, HBRUSH hbr);
|
||
|
static BOOL WINAPI OnHookTrackPopupMenu(HMENU hMenu, UINT uFlags, int x, int y, int nReserved, HWND hWnd, CONST RECT *prcRect);
|
||
|
static BOOL WINAPI OnHookTrackPopupMenuEx(HMENU hMenu, UINT uFlags, int x, int y, HWND hWnd, LPTPMPARAMS);
|
||
|
static BOOL WINAPI OnHookDrawMenuBar(HWND hWnd);
|
||
|
static HRESULT STDAPICALLTYPE OnHookGetCurrentThemeName(LPWSTR pszThemeFileName, int dwMaxNameChars, LPWSTR pszColorBuff, int cchMaxColorChars, LPWSTR /*pszSizeBuff*/, int /*cchMaxSizeChars*/);
|
||
|
static BOOL STDAPICALLTYPE OnHookGetThemeSysBool(HTHEME /*hTheme*/, int iBoolId);
|
||
|
static COLORREF STDAPICALLTYPE OnHookGetThemeSysColor(HTHEME /*hTheme*/, int iColorId);
|
||
|
static HRESULT STDAPICALLTYPE OnHookGetThemePartSize(HTHEME hTheme, HDC, int iPartId, int iStateId, RECT *pRect, THEMESIZE eSize, SIZE* pSize);
|
||
|
static BOOL STDAPICALLTYPE OnHookIsAppThemed();
|
||
|
static BOOL STDAPICALLTYPE OnHookIsThemeActive();
|
||
|
static HRESULT STDAPICALLTYPE OnHookGetThemeColor(HTHEME hTheme, int iPartId, int iStateId, int iPropID, COLORREF *pColor);
|
||
|
static HRESULT STDAPICALLTYPE OnHookGetThemeInt(HTHEME hTheme, int iPartId, int iStateId, int iPropID, int *piVal);
|
||
|
static HRESULT STDAPICALLTYPE OnHookCloseThemeData(HTHEME);
|
||
|
static HRESULT STDAPICALLTYPE OnHookDrawThemeBackground(HTHEME hTheme, HDC hDC, int iPartId, int iStateId, const RECT* pRect, const RECT*);
|
||
|
static HTHEME STDAPICALLTYPE OnHookOpenThemeData(HWND /*hWnd*/, LPCWSTR pszClassList);
|
||
|
static HANDLE STDAPICALLTYPE OnHookCreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,
|
||
|
UINT_PTR dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter,
|
||
|
DWORD dwCreationFlags, LPDWORD lpThreadId);
|
||
|
static DWORD WINAPI ThreadProcHook(LPVOID lpParameter);
|
||
|
|
||
|
BOOL CallHookDefWindowProc(HWND hWnd, PROC pfnOrig, XTPSkinDefaultProc defProc, LPVOID lpPrev, UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult);
|
||
|
|
||
|
protected:
|
||
|
CXTPSkinManagerApiFunction* m_arrFunctions[XTP_SKIN_APIHOOKCOUNT];
|
||
|
BOOL m_bInitialized;
|
||
|
CArray<EXCLUDEDMODULE, EXCLUDEDMODULE&> m_arrExcludedModules;
|
||
|
CRITICAL_SECTION m_cs;
|
||
|
|
||
|
friend class CXTPSkinManagerApiFunction;
|
||
|
};
|
||
|
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
#endif // !defined(__XTPSKINMANAGERAPIHOOK_H__)
|