6

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

  1. 重新启动计算机
  2. 选择开始->关闭,然后选择取消

这些都不是我想要完成的任务的理想选择:#1 对用户极具破坏性,而#2 似乎需要额外的用户交互。

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

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

我已经尝试过的事情:

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

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

4

7 回答 7

1

你试过ccleaner吗?

http://www.ccleaner.com/

于 2009-05-09T05:47:16.503 回答
0

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

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

于 2008-10-01T06:23:28.550 回答
0

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

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

于 2008-10-01T10:32:51.913 回答
0

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

于 2008-10-02T02:51:49.657 回答
0

据我所知,它依赖于托管开始菜单/任务栏/桌面的 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 上测试过,它确实清除了运行命令缓存。

于 2010-10-01T20:55:57.590 回答
0

视窗

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

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

于 2009-01-26T15:25:00.487 回答
-4

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

于 2008-10-01T06:38:16.173 回答