无需重新启动即可更新Explorer配置

时间:2009-09-10 13:20:37

标签: winapi scripting

我想知道有没有办法刷新HKLM注册表项HKCU \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ Explorer - 而无需重新启动shell。

我希望能够在不重启资源管理器的情况下完成此操作。有没有任何已知的方法可以做到这一点?

到目前为止,我只发现了这件事:

RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True

这对我的情况不起作用。

对我来说,MS制作资源管理器以便在运行时无法重新读取其配置,这看起来很疯狂但是你永远都不知道。

修改 我尝试做的是禁用/启用通知区域(托盘)而不重新启动。 注册表项是

SOFTWARE \微软\的Windows \ CurrentVersion \政策\ Explorer的\

变量:NoTrayItemsDisplay

值:1/0

编辑2 这是应该工作的源代码,但在Vista上它没有,不适用于通知区域,不适用于我的测试虚拟,它是startMenu中的MyMusic(变量NoStartMenuMyMusic)

#include <stdio.h>
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
   DWORD dwRetVal;

  int  lResult = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, (WPARAM)0,
                      (LPARAM)"Policy",
                      SMTO_ABORTIFHUNG, 5000, &dwRetVal);

   printf("lResult  = %ld\n", lResult);
   printf("dwRetVal = %ld\n", dwRetVal);

   return 0;
}

我尝试了所有理智的wparam和lparam值而没有成功。我从here获取了代码 并且老兄声称它有效......

但是,

This article声称代码不起作用。

更为荒谬的是gpupdate能够胜任这项工作。

THX。

1 个答案:

答案 0 :(得分:1)

尝试将带有wparam = 0和lparam =“Policy”的WM_SETTINGCHANGE消息发送到任务栏,不确定是否可以使用脚本执行此操作