⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classxp.c

📁 minica2的第2个版本
💻 C
字号:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 预处理
#include "CXPBase.h"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 钩子句柄
#ifdef CXP_MULTITHREAD
__declspec(thread)
#endif
HHOOK g_hCXPHook = NULL;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 动态连接库主函数
#ifdef CXP_DLLMODE
//#pragma comment(linker, "/EXPORT:_ClassXP@8")
#pragma comment(linker, "/EXPORT:ClassXP=_ClassXP@8")
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID pvReserved)
{
	if (dwReason == DLL_PROCESS_ATTACH)
	{
		DisableThreadLibraryCalls(hModule);

#ifdef CXP_DLLAUTO
		ClassXP(NULL, TRUE);
#endif
	}

#ifdef CXP_DLLAUTO
	else if (dwReason == DLL_PROCESS_DETACH)
	{
		ClassXP(NULL, FALSE);
	}
#endif

	return TRUE;
}
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 设置或取消 ClassXP
BOOL WINAPI ClassXP(HWND hWnd, BOOL bClassXP)
{
#ifdef CXP_DETECTTHEME
	// 检测主题
	if (bClassXP)
	{
		FARPROC pIsAppThemed = GetProcAddress(GetModuleHandle(TEXT("UXTHEME")), "IsAppThemed");
		if (pIsAppThemed && pIsAppThemed())
		{
			return FALSE;
		}
	}
#endif

	// 是否指定了窗口
	_ReturnValIf(hWnd, CXPSet(hWnd, bClassXP));

	// 如果是设置 ClassXP,并且没有安装钩子
	if (bClassXP && (g_hCXPHook == NULL))
	{
		// 枚举当前线程中已存在的窗口,并设置为 ClassXP
		EnumThreadWindows(GetCurrentThreadId(), CXPEnumProc, TRUE);

		// 安装钩子,设置新创建的窗口为 ClassXP
		g_hCXPHook = SetWindowsHookEx(WH_CALLWNDPROC, CXPHookProc, 0, GetCurrentThreadId());

		return (g_hCXPHook != NULL);
	}
	// 如果是取消 ClassXP,并且已经安装过钩子
	else if ((bClassXP == FALSE) && g_hCXPHook)
	{
		// 枚举当前线程的窗口,并取消 ClassXP
		EnumThreadWindows(GetCurrentThreadId(), CXPEnumProc, FALSE);

		// 取消窗口钩子
		UnhookWindowsHookEx(g_hCXPHook);
		g_hCXPHook = NULL;

		return TRUE;
	}

	return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -