How to refresh/reload Desktop

前端 未结 2 873
时光说笑
时光说笑 2021-01-04 19:00

I have a WPF C# project in which I\'m implementing settings for Windows folder options. One of them is \"Single-click to open an item\" (instead of double-click). When I cha

2条回答
  •  时光说笑
    2021-01-04 19:01

    If you would have posted the code to change that setting, I would have tested it against the following suggestions before replying.

    Have you tried:

    1) Removing the statement if (itemName == "Windows Explorer") from the above code, so it refreshes every window (including the desktop)?

    2) Broadcasting a WM_SETTINGCHANGE via SendMessage WIN32 API?

    private const int HWND_BROADCAST = 0xffff;
    private const int WM_WININICHANGE = 0x001a, WM_SETTINGCHANGE = 0x001a, INI_INTL = 1;
    [DllImport("user32.dll")]
    private static extern int SendMessage(int hWnd, uint wMsg, uint wParam, uint lParam);
    
    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, INI_INTL);
    

    [Credit]

    3) IActiveDesktop.ApplyChanges

    [ComImport]
    [Guid("F490EB00-1240-11D1-9888-006097DEACF9")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IActiveDesktop
    {
         [PreserveSig]
         int ApplyChanges(AD_Apply dwFlags);
         // [...]
         // Note: There is a lot more to this interface,
         //        please see PInvoke.net link below.
    }
    private const int AD_APPLY_REFRESH = 4;
    
    IActiveDesktop.ApplyChanges(AD_APPLY_REFRESH);
    

    [PInvoke.net - IActiveDesktop]

    If these do not work, let me know. If it comes down to it, it is possible to save all the open explorer windows & their positions, terminate explorer, wait for explorer to restart, re-open each explorer window and re-position them... if that would acceptable.

    Hope this helps.

提交回复
热议问题