13,825
社区成员
发帖
与我相关
我的任务
分享
typedef BOOL (__stdcall *ISTHEMEACTIVE)(VOID);
ISTHEMEACTIVE IsThemeActive;
bool CrnIsThemeActive()
{
bool bThemeActive(false);
HMODULE hUxTheme = ::LoadLibrary("UxTheme.dll");
if(hUxTheme)
{
IsThemeActive = (ISTHEMEACTIVE)::GetProcAddress(hUxTheme, "IsThemeActive");
if(IsThemeActive)
bThemeActive = IsThemeActive();
FreeLibrary(hUxTheme);
}
return bThemeActive;
}
//---------------------------------------------------------------------------
// 测试代码
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage(String().sprintf("当前%s Windows 主题",
CrnIsThemeActive()? "启用了": "未启用"));
}
//---------------------------------------------------------------------------
typedef HANDLE HTHEME;
typedef HTHEME (__stdcall *OPENTHEMEDATA)(HWND hWnd, LPCWSTR pszClassList);
typedef HRESULT (__stdcall *CLOSETHEMEDATA)(HTHEME hTheme);
//---------------------------------------------------------------------------
// 判断当前Windows是否启用了主题
bool CrnWindowsUsedTheme()
{
if((Win32Platform != VER_PLATFORM_WIN32_NT)
|| (Win32MajorVersion <= 5 && Win32MinorVersion < 1))
return false;
bool bUsed(false);
HMODULE hUxTheme = ::LoadLibrary("UxTheme.dll");
OPENTHEMEDATA OpenThemeData;
CLOSETHEMEDATA CloseThemeData;
if(hUxTheme)
{
OpenThemeData = (OPENTHEMEDATA)::GetProcAddress(hUxTheme, "OpenThemeData");
// 63 63 72 75 6E 2E 63 6F 6D
CloseThemeData = (CLOSETHEMEDATA)::GetProcAddress(hUxTheme, "CloseThemeData");
if(OpenThemeData)
{
HTHEME hButtonTheme = OpenThemeData(0, L"EDIT");
if(hButtonTheme)
{
if(CloseThemeData)
{
CloseThemeData(hButtonTheme);
bUsed = true;
}
}
}
::FreeLibrary(hUxTheme);
}
return bUsed;
}
//---------------------------------------------------------------------------
// 测试代码
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage(String().sprintf("当前%s Windows 主题",
CrnWindowsUsedTheme()? "启用了": "未启用"));
}