我有一个应用程序,有时会通过将快捷方式(用WshShellClass
创建)放置在开始菜单文件夹(Environment.SpecialFolder.StartMenu
)中来动态地添加和删除开始菜单(和桌面)中的条目。如果发生任何此类更改,我已经使用SHChangeNotify
通知外壳了更改,如here所述。具体来说:
private static void _RefreshWindowsDesktop()
{
// http://stackoverflow.com/a/647286/1600
NativeMethods.SHChangeNotify(NativeMethods.HChangeNotifyEventID.SHCNE_ASSOCCHANGED,
NativeMethods.HChangeNotifyFlags.SHCNF_FLUSH,
IntPtr.Zero, IntPtr.Zero);
}
但是,在Windows 10上,“开始”菜单搜索经常会中断(我在Windows Vista或7中从未见过这种现象),其中新的快捷方式通常不会显示几天,并且反过来,几天前已删除的旧快捷方式仍显示为“搜索结果”。据推测,这是由于使现代应用程序与经典桌面应用程序同时出现在“开始”菜单中的更改而引起的,但是我不确定。对此的在线指南坦率地将我称为伏都教徒。
更糟糕的是,在调用该快捷方式时,Windows 10只会执行什么 -没有错误指示该快捷方式没有指向任何位置(因为它不存在),Windows也不会随后对其进行学习和删除。
因此,我希望有一种类似于SHChangeNotify
的方法可以明确地告诉Windows 10使其无效或重建其“开始菜单”缓存,例如要求它为该特定文件夹重新编制索引,或告诉它手动添加/删除一个文件夹。索引中的项目。
我的应用程序是WPF,但是如果存在本机方法,则可以检测到操作系统版本,然后有条件地调用它。 (如果需要,甚至编写外部Windows 10特定的UWP后台应用程序来启动。)