我有一個WPF C#項目,我正在實現Windows文件夾選項的設置。其中之一是「單擊打開一個項目」(而不是雙擊)。當我爲這個問題更改註冊表項時,我需要刷新我找到解決方案的Windows資源管理器。但是桌面不會刷新,甚至手動刷新也不會應用更改。 我已經使用IActiveDesktop :: ApplyChanges方法,但沒有工作(或者我犯了一個錯誤)。我也用這個代碼片斷,但它仍然不適,我所做的更改:如何刷新/重新加載桌面
SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);
這裏是我用來刷新贏資源管理器(巫完整的代碼片段是從本網站):
[System.Runtime.InteropServices.DllImport("Shell32.dll")]
private static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2);
public static void RefreshWindowsExplorer()
{
// Refresh the desktop
SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);
// Refresh any open explorer windows
// based on http://stackoverflow.com/questions/2488727/refresh-windows-explorer-in-win7
Guid CLSID_ShellApplication = new Guid("13709620-C279-11CE-A49E-444553540000");
Type shellApplicationType = Type.GetTypeFromCLSID(CLSID_ShellApplication, true);
object shellApplication = Activator.CreateInstance(shellApplicationType);
object windows = shellApplicationType.InvokeMember("Windows", System.Reflection.BindingFlags.InvokeMethod, null, shellApplication, new object[] { });
Type windowsType = windows.GetType();
object count = windowsType.InvokeMember("Count", System.Reflection.BindingFlags.GetProperty, null, windows, null);
for (int i = 0; i < (int)count; i++)
{
object item = windowsType.InvokeMember("Item", System.Reflection.BindingFlags.InvokeMethod, null, windows, new object[] { i });
Type itemType = item.GetType();
// Only refresh Windows Explorer, without checking for the name this could refresh open IE windows
string itemName = (string)itemType.InvokeMember("Name", System.Reflection.BindingFlags.GetProperty, null, item, null);
if (itemName == "Windows Explorer")
{
itemType.InvokeMember("Refresh", System.Reflection.BindingFlags.InvokeMethod, null, item, null);
}
}
}
,對於Windows資源管理器的工作原理,但不是桌面(這是奇怪,因爲桌面取決於探險太)。 那麼我應該如何重新加載桌面,以便我的更改生效?
如果您嘗試終止所有資源管理器實例並創建一個新實例,該怎麼辦? – master131
@ master131,這是行得通的,但這不是一個選項,因爲用戶將失去所有的資源管理器窗口。 – SepehrM
可能的重複[如何使「顯示/隱藏桌面圖標」設置生效?](http://stackoverflow.com/questions/3326062/how-do-i-make-the-show-hide-desktop -icons-setting-take-effect) –