【问题标题】:Clearing the Windows "Run" dialog history without rebooting在不重新启动的情况下清除 Windows“运行”对话框历史记录
【发布时间】:2008-09-25 17:35:33
【问题描述】:

我目前正在开发一个程序,以立即清除 Windows 开始 -> 运行 对话框中出现的先前运行命令列表。通过删除 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU 键清除此列表的过程是well documented;但是,在这些更改生效之前,似乎有必要执行以下操作之一:

  1. 重启电脑
  2. 选择开始 -> 关闭,然后选择取消

对于我要完成的任务,这两种方法都不理想:#1 对用户极具破坏性,而#2 似乎需要额外的用户交互。

是否有人知道如何立即(并以编程方式)强制重新加载此信息而不需要任何用户交互,同时尽量减少对用户其他活动的干扰我希望在执行我的程序后立即清除用户的运行历史记录, 不需要他们采取任何进一步的操作(例如使用“关闭”->“取消”上面 #2 中的技巧)或强制重启。

或者,从不同的角度解决问题:单击开始 -> 关闭 -> 取消时,Windows 资源管理器会重新加载RunMUI 键。 有没有办法在不让用户选择关闭然后取消的情况下强制进行类似的重新加载?

我已经尝试过的事情:

  • 使用procmon 监控 explorer.exe 状态,同时选择关闭,然后选择取消。我看到 Explorer 正在写入 RunMRU 键,但无法确定是什么触发了此操作。
  • Google 进行了大量搜索,类似于“重新加载 runmru 而无需重新启动”。大多数结果仍然推荐上面的方法 #1,尽管少数结果建议 #2。
  • 有限的 MSDN API 检查。 RegFlushKey 调用看起来很有希望,但我以前从未使用过它,所以我不知道它是否适用于不同进程缓存的注册表信息。

任何建议或其他信息将不胜感激。

【问题讨论】:

    标签: windows registry windows-explorer privacy


    【解决方案1】:

    你试过 ccleaner 吗?

    http://www.ccleaner.com/

    【讨论】:

      【解决方案2】:

      不是您问题的完整答案,但我确实找到了第三种方法来触发从 PC Mag 中的 article 清除运行命令。

      杀掉explorer.exe再重启,注册表修改后也会清空运行列表。

      【讨论】:

        【解决方案3】:

        我有一个讨厌的 hack 给你。以编程方式显示窗口,立即隐藏(以编程方式)并单击取消(好吧,您猜对了,以编程方式)。

        您可以尝试寻找图标缓存刷新 API 或其他 API,如果它们具有您正在寻找的副作用,我不会太惊讶。

        【讨论】:

          【解决方案4】:

          我见过它实际工作的实例,即使 F5 键也不起作用?试试这个,ctrl>alt>delete 然后去任务管理器,进程选项卡...结束 explorer.exe。然后点击file new task并输入explorer.exe,然后检查...是否有效?

          【讨论】:

            【解决方案5】:

            Windows XP

            1. 右键单击任务栏
            2. 属性菜单选项
            3. 开始菜单标签
            4. 自定义按钮
            5. 程序窗格
            6. 清除列表
            7. 点击确定

            这会调用一个 Windows API 函数来刷新 explorere.exe 任务栏进程并清除列表(无需编辑注册表)。

            【讨论】:

            • 你错了,他试图清除 RUNMRU 条目而不是“开始”窗格上的程序快捷方式。
            【解决方案6】:

            据我所知,它依赖于托管开始菜单/任务栏/桌面的 explorer.exe 进程被关闭和重新打开。我知道没有“干净”的方法可以做到这一点。

            如果您真的需要在没有用户交互的情况下执行此操作,则需要关闭 所有 explorer.exe 进程并重新启动一个。

            这是一个用于执行此操作的基本 C# 程序;

              using System.Diagnostics;
            
              Process[] procs = Process.GetProcessesByName("explorer");
              foreach (Process proc in procs)
              {
                proc.Kill();
              }
            
              Process.Start("explorer.exe");
            

            请注意,这将关闭所有打开的“Windows 资源管理器”窗口,之后可能会或可能不会打开额外的“Windows 资源管理器”。

            我刚刚在 Windows XP 32bit 上测试过,它确实清除了运行命令缓存。

            【讨论】:

              【解决方案7】:

              HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU\

              【讨论】:

              • 你读过这个问题吗?他知道密钥在哪里,Explorer 不会刷新它。
              • 对不起,如果我让你不高兴了,伙计!以后会注意的。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-05-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多