2009-09-10 164 views
2

我想知道是否有一种方法来刷新HKLM注册表项HKCU \ SOFTWARE \微软\的Windows \ CurrentVersion \政策\资源管理器 - 无需重新启动壳。更新资源管理器配置,而不重新启动它

我希望能够在不重新启动浏览器的情况下执行此操作。有没有已知的方法可以做到这一点?

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

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

它不适合我的情况下工作。

MS看起来很疯狂,因为MS让Explorer无法在运行时重新读取它的配置),但你永远不知道。

编辑: 我试图做的是禁用/启用通知区域(托盘),而无需重新启动。 该注册表项是

软件\微软\的Windows \ CurrentVersion \政策\ Explorer中\

变量:NoTrayItemsDisplay

值:1/0

EDIT 2 这是源代码应该工作,但在Vista上它不,不是为通知区域,不是为我的测试假人,这是在启动菜单中的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。

+0

它不是* *是疯狂的。大多数应用程序不检查配置文件/注册表项是否自加载以来已被修改,甚至没有Windows本身。让我猜,你正在尝试编辑网络设置?我无法找到解决此问题的解决方法:S * + 1 * – voyager 2009-09-10 13:49:09

+0

不,我想在运行时禁用图标通知。 它是疯了,因为资源管理器不是“大多数应用程序”,它是一个怪胎壳牌:D – majkinetor 2009-09-10 15:01:47

回答

1

尝试其中wParam = 0和lParam =“政策”送WM_SETTINGCHANGE消息到任务栏,不知道这是否可以使用脚本完成

+0

它不起作用。我使用SendMessageTimeout来发送消息,结果返回1,这意味着它传递了OK。然而,没有任何反应。 – majkinetor 2009-09-10 17:58:14

+0

你也可以尝试wparam = 1,检查链接,这是它应该如何工作 – Anders 2009-09-10 19:06:09

+0

没有它没有。应用程序必须发送NULL,系统发送1.无论如何,我编辑了这篇文章并给出了C代码。也许你可以自己尝试一下。 – majkinetor 2009-09-11 12:41:33

相关问题