繁体   English   中英

Windows 10 中的 SHChangeNotify 未更新快速访问项目

[英]SHChangeNotify in Windows 10 not updating Quick Access items

似乎在 Windows 中调用 SHChangeNotify 不会调用对快速访问窗格中的项目(或在资源管理器左侧找到的任何自定义命名空间文件夹)的更新。 似乎将左侧的树扩展到文件夹工作正常,以及右侧主视图中的任何内容。

我们正在从 ac# WPF 应用程序调用 SHChangeNotify,尽管 SHChangeNotify 似乎在资源管理器中调用了我们的 DLL 挂钩,对于正确视图中的任何内容都很好。 这最终将调用一个命名管道,该管道将钩回我们的 c# 代码以调用对文件或文件夹图标的更新。

这就是我们从 c# 中调用的内容:

[DllImport("shell32.dll", CharSet = CharSet.Auto)]
private static extern void SHChangeNotify(
    int wEventId,
    uint uFlags,
    IntPtr dwItem1,
    IntPtr dwItem2);

var ptr = Marshal.StringToHGlobalUni(fullPath);
SHChangeNotify((int)SHCNE.SHCNE_UPDATEITEM, (int)(SHCNF.SHCNF_PATHW | SHCNF.SHCNF_FLUSHNOWAIT), ptr, IntPtr.Zero);
Marshal.FreeHGlobal(ptr);

快速访问虚拟文件夹路径(作为字符串)为shell:::{679f85cb-0220-4080-b29b-5540cc05aab6} (此GUID名称为CLSID_HomeFolder )。

因此,您可以通过调用以下命令来强制刷新此虚拟文件夹下的所有项目:

SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATHW, L"shell:::{679f85cb-0220-4080-b29b-5540cc05aab6}", NULL);

如果只想刷新一组特定的子代,则只需获取PIDL或这些项目的路径,然后对每个子项调用SHChangeNotify(SHCNE_UPDATEITEM,...)。

是否可以在 autoit 上执行此操作?

SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATHW, L"shell:::{679f85cb-0220-4080-b29b-5540cc05aab6}", NULL);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM