【问题标题】:Update Explorer configuration without restarting it更新资源管理器配置而不重新启动它
【发布时间】:2009-09-10 13:20:37
【问题描述】:

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

我希望能够在不重新启动资源管理器的情况下执行此操作。有什么已知的方法可以做到这一点吗?

到目前为止,我只找到了这个东西:

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

这对我的情况不起作用。

在我看来,MS 制作了 Explorer,因此它在运行时无法重新读取其配置,这看起来很疯狂)但你永远不知道。

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

软件\Microsoft\Windows\CurrentVersion\Policies\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 应该做这个工作。

谢谢。

【问题讨论】:

  • 这不是疯了。大多数应用程序不检查配置文件/注册表项自加载以来是否已被修改,甚至 Windows 本身也不检查。让我猜猜,您正在尝试编辑网络设置?我也找不到解决此问题的方法:S +1
  • 不,我想在运行时禁用图标通知。这太疯狂了,因为 Explorer 不是“大多数应用程序”,它是一个怪异的 Shell:D

标签: winapi scripting


【解决方案1】:

尝试将带有 wparam=0 和 lparam="Policy" 的 WM_SETTINGCHANGE 消息发送到任务栏,不确定这是否可以通过脚本来完成

【讨论】:

  • 它不起作用。我使用 SendMessageTimeout 发送消息,它返回 1 作为结果,这意味着它通过了。但是,什么也没有发生。
  • 你也可以试试 wparam=1,检查链接,它应该是这样工作的
  • 不,不是。应用程序必须发送NULL,系统发送1。无论如何,我编辑了帖子并给出了C代码。也许你可以自己试试。
  • 嗯,你想模拟系统,所以你不能使用NULL。如果它不起作用,则可能意味着资源管理器仅在启动时更新该值
  • 你需要将WM_SETTINGCHANGE广播到所有窗口(@98​​7654323@),而不仅仅是任务栏,wParam=0lParam="Policy"..
猜你喜欢
  • 2013-03-12
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多