2

有没有办法以编程方式从 Windows 7 开始菜单中清除最近启动的应用程序?

我正在寻找一些要删除的注册表项和/或文件,以便删除 Winodws 7 开始菜单中的相应项目。

4

3 回答 3

2

SHAddToRecentDocs (SHARD_PIDL,NULL) 是清除最近文档的记录方法,而不是像 surya 建议的那样在注册表中搞乱。

由于您的问题包括“应用程序”一词,我假设您实际上是指应用程序列表,并且没有真正的方法可以以编程方式修改它,因为该列表“属于”用户

如果您想走未记录的 hacky 路线,您可以使用获取特定 .lnk 的 IContextMenu 并调用“从此列表中删除”命令。

在 XP 上,开始菜单应用程序使用情况存储在 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist{75048700-EF1F-11D0-9888-006097DEACF9} 但资源管理器会缓存这些条目,因此您不能只删除密钥而不先杀探险家。

于 2011-01-13T22:20:37.203 回答
0

现在这是我的问题的解决方案:

我清理了注册表项下的值

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}\Count
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{F4E57C4B-2036-45F0-A9AB-443BCFE33D9F}\Count

然后我执行了以下 PInvoke 来刷新 Explorer.exe 的缓存:

C#:

using System.Runtime.InteropServices;
[DllImport("shell32.dll")]
static extern void SHChangeNotify(int wEventId, int uFlags, IntPtr dwItem1, IntPtr wItem2);

private const int SHCNE_ASSOCCHANGED = 0x08000000;
private const int SHCNF_IDLIST = 0x0000;

private void ClearCache()
{
 SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero);
}

问候,鲍里斯

于 2011-01-14T15:21:48.013 回答
-1

在注册表中,删除不必要的东西。关键是HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs

于 2011-01-13T09:28:19.670 回答