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 只是我不知道参数该怎么带  
哪位大大知道的 麻烦来讨论下  在线等... 

解决方案 »

  1.   

    这个讲的挺全的SystemParametersInfo 的使用
      

  2.   

    to:
    tiger9991
    (Reborn)是讲的挺全的, 不过我找不到跟我现在要用的相关的啊, 我的编译环境是 VC2005 
    貌似没有改变了 主题风格 后可以调用的值
      

  3.   

    以前研究过,StyleXP,WindowBlinds,XP变脸王之类的
    一直没找到接口
    记得是用重启Themes服务实现的有实力的话,可以起逆向一下上述软件
    或者调试一下“桌面右键属性 - 显示 属性”那个控制面板
      

  4.   

    http://topic.csdn.net/u/20110105/11/4352146f-3f3a-40ee-91d6-76eb53d3da0a.html?25016
      

  5.   


      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);
      }
      

  6.   

    已经解决,  结贴给分 ... 方法是综合了大家的办法 ... 重启theme服务是关键 ...
    Over...