有没有办法以编程方式从 Windows 7 开始菜单中清除最近启动的应用程序?
我正在寻找一些要删除的注册表项和/或文件,以便删除 Winodws 7 开始菜单中的相应项目。
SHAddToRecentDocs (SHARD_PIDL,NULL) 是清除最近文档的记录方法,而不是像 surya 建议的那样在注册表中搞乱。
由于您的问题包括“应用程序”一词,我假设您实际上是指应用程序列表,并且没有真正的方法可以以编程方式修改它,因为该列表“属于”用户。
如果您想走未记录的 hacky 路线,您可以使用获取特定 .lnk 的 IContextMenu 并调用“从此列表中删除”命令。
在 XP 上,开始菜单应用程序使用情况存储在 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist{75048700-EF1F-11D0-9888-006097DEACF9} 但资源管理器会缓存这些条目,因此您不能只删除密钥而不先杀探险家。
现在这是我的问题的解决方案:
我清理了注册表项下的值
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);
}
问候,鲍里斯
在注册表中,删除不必要的东西。关键是HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs