【问题标题】:C# Refresh ExplorerC# 刷新资源管理器
【发布时间】:2009-10-29 00:13:36
【问题描述】:

在我的程序中,我切换隐藏文件的注册表值来告诉资源管理器是隐藏还是显示它们。但是,由于资源管理器不会自行刷新,所以我发送事件

 SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);

刷新一切。然而,不幸的是,它似乎并没有让人耳目一新。我看到桌面上的屏幕有点闪烁,但为了看到更改,我必须手动刷新文件夹。 SHChangeNotify 似乎对我不起作用。任何帮助将不胜感激。

【问题讨论】:

    标签: c# winapi refresh explorer


    【解决方案1】:

    尝试使用 SHGetSetSettings 更改 fShowAllObjects

    但是,使用 SHGetSetSettings 进行简单的 Get 和 Set 操作将不起作用。

    它很聪明,可以将其当前设置与您发送的设置进行比较,并且只有在两者不同时才会通知其他窗口更改。

    要刷新桌面,请使用 IShellWindows 枚举 shell 窗口,检查 IWebBrowser2.FullName 属性以跳过 IE 窗口,然后调用 IWebBrowser2::Refresh。

    【讨论】:

    • 可以给我一个代码 sn-p 吗?我尝试使用 SHGetSetSettings 并没有解决我的问题。
    • var shellState = new SHELLSTATE(); shellState.fShowExtensions = 1; SHGetSetSettings(ref shellState, SSF.SSF_SHOWEXTENSIONS, true); ^^^ 这就是我在我的代码中所做的。仍然没有帮助。 :\
    • 嗯,先尝试更改 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced,然后使用“ShellState”和 SMTO_ABORTIFHUNGm 广播 WM_SETTINGCHANGE。如果这不起作用,请尝试使用 SHCNE_ASSOCCHANGED 和 SHCNF_IDLIST 进行 SHChangeNotify
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多