HKEY hkey = NULL; char *pSubkey = "Software\\Microsoft\\Windows\\CurrentVersion\\ThemeManager";
char *pValueName = "DllName";
char *pKeyValue = "%SystemRoot%\\Resources\\Theme\\白色法拉利\\白色法拉利.msstyles"; //char *pKeyValue = "%SystemRoot%\\Resources\\Themes\\我们的浪漫\\cursor\\AppStarting.ani";
//char *pSubkey = "Control Panel\\Cursors";
//char *pValueName = "AppStarting"; int nIndex = strlen(pKeyValue) + 1;
BYTE szValue[MAX_PATH] = {0};
memcpy(szValue, pKeyValue, nIndex); ::RegOpenKeyEx(HKEY_CURRENT_USER, pSubkey, 0, KEY_WRITE, &hkey);
if (hkey)
{
::RegSetValueEx(hkey, pValueName, NULL, REG_EXPAND_SZ, szValue, nIndex);
} ::RegCloseKey(hkey);
SystemParametersInfo(SPI_SETCURSORS, 0, NULL, SPIF_SENDCHANGE);
}我想实现用代码更改XP主题, 修改注册表后重启/注销电脑,主题可以更改,
现在我要的效果是不用重启就可以直接更改, 那些重启资源管理器的方法都没用, 发消息也不好使(也许是我方法有误)
应该是要使用 SystemParametersInfo API 只是我不知道参数该怎么带
哪位大大知道的 麻烦来讨论下 在线等...
char *pValueName = "DllName";
char *pKeyValue = "%SystemRoot%\\Resources\\Theme\\白色法拉利\\白色法拉利.msstyles"; //char *pKeyValue = "%SystemRoot%\\Resources\\Themes\\我们的浪漫\\cursor\\AppStarting.ani";
//char *pSubkey = "Control Panel\\Cursors";
//char *pValueName = "AppStarting"; int nIndex = strlen(pKeyValue) + 1;
BYTE szValue[MAX_PATH] = {0};
memcpy(szValue, pKeyValue, nIndex); ::RegOpenKeyEx(HKEY_CURRENT_USER, pSubkey, 0, KEY_WRITE, &hkey);
if (hkey)
{
::RegSetValueEx(hkey, pValueName, NULL, REG_EXPAND_SZ, szValue, nIndex);
} ::RegCloseKey(hkey);
SystemParametersInfo(SPI_SETCURSORS, 0, NULL, SPIF_SENDCHANGE);
}我想实现用代码更改XP主题, 修改注册表后重启/注销电脑,主题可以更改,
现在我要的效果是不用重启就可以直接更改, 那些重启资源管理器的方法都没用, 发消息也不好使(也许是我方法有误)
应该是要使用 SystemParametersInfo API 只是我不知道参数该怎么带
哪位大大知道的 麻烦来讨论下 在线等...
tiger9991
(Reborn)是讲的挺全的, 不过我找不到跟我现在要用的相关的啊, 我的编译环境是 VC2005
貌似没有改变了 主题风格 后可以调用的值
一直没找到接口
记得是用重启Themes服务实现的有实力的话,可以起逆向一下上述软件
或者调试一下“桌面右键属性 - 显示 属性”那个控制面板
typedef int (__stdcall *SetSystemVisualStyle)(LPCWSTR, LPCWSTR, LPCWSTR, int); HMODULE hmUxtheme = LoadLibrary("uxtheme.dll");
if(hmUxtheme)
{
SetSystemVisualStyle SetSystemVisualStylePtr = (SetSystemVisualStyle)GetProcAddress(hmUxtheme, MAKEINTRESOURCE(65));
if(SetSystemVisualStylePtr)
SetSystemVisualStylePtr(L"C:\\WINDOWS\\Resources\\Themes\\Luna\\luna.msstyles", L"NormalColor", L"NormalSize", 33);
//FreeLibrary(hmUxtheme);
}
Over...