请问如何判断系统目前使用了主题theme (xp,2k3)

fbmsyu 2008-03-20 12:51:37
希望能给个函数之类的。谢谢。
...全文
170 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
clever101 2009-04-12
  • 打赏
  • 举报
回复
很好,学习了。
fbmsyu 2008-04-04
  • 打赏
  • 举报
回复
测试成功,结贴
fbmsyu 2008-04-04
  • 打赏
  • 举报
回复
老妖,你太厉害了.我先测试测试!
ccrun.com 2008-04-03
  • 打赏
  • 举报
回复
刚刚看MSDN,发现有更简单的函数来实现:
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()? "启用了": "未启用"));
}
ccrun.com 2008-04-03
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------
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()? "启用了": "未启用"));
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧