簡體   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