没有效果

使用问题 · 175 次浏览
waikrfaio 创建于 2023-12-28 17:59

是不是win11不支持


Anlv 2023-12-28 18:01 :

不确定,没有win11环境测试,

有没有报错信息?

Anlv 最后更新于 2023-12-28 18:01
waikrfaio 回复 Anlv 2023-12-28 18:08 :


Anlv 回复 waikrfaio 2023-12-28 18:12 :

看样子是正常执行,可能这个C#不适用于win11。
这个子程序的功能是有些时候新建或者打包到文件夹的时候,刷新不及时。如果使用powershell或者脚本的形式,会有黑框闪烁或刷新比较明显,所以才弄了一个C#版本的刷新。

瞑空凌 回复 Anlv 1天8小时前 :

大佬有没有研究过用这个刷新图标?我测试几个小时没有反应😂
// 定义 SHChangeNotify 函数原型
[DllImport("shell32.dll")]
public static extern void SHChangeNotify(long wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);
// 定义常量
private const long SHCNE_ATTRIBUTES = 0x00000800L; // 文件或文件夹属性已更改
private const uint SHCNF_PATHW = 0x0005;           // 指定 dwItem1 使用路径
private const uint SHCNF_FLUSHNOWAIT = 0x2000;     // 清空系统事件缓冲区,立即返回

// 刷新文件或文件夹属性更改的方法
public static void RefreshAttributes(string path)
{
    string result = "";
    IntPtr pPath = Marshal.StringToHGlobalUni(path);//将 Unicode 字符串(即 C# 中的 string 类型)转换为一个指向全局分配的内存的指针,该内存包含与字符串内容对应的 Unicode 字符。
    try
    {
        SHChangeNotify(SHCNE_ATTRIBUTES, SHCNF_PATHW | SHCNF_FLUSHNOWAIT, pPath, IntPtr.Zero); // 调用 SHChangeNotify 来通知系统属性已更改
    }
    catch (Exception ex)
    {
        throw; //重新抛出当前捕获的异常
    }
    finally
    {
        // 释放内存
        if (pPath != IntPtr.Zero)
        {
            Marshal.FreeHGlobal(pPath);
        }
    }
}

Anlv 回复 瞑空凌 1天1小时前 :
之前玩过类似的,其实不是没反应,而是修改文件夹属性后需要重启资源管理器才能刷新。
瞑空凌 回复 Anlv 1天0小时前 :

不需要重启,目前已知两种方式可以刷新图标,并且对其他都没有影响,文件夹也不会被关闭。
1:vbs方式 目前效果最好的,都不会闪一下,直接刷新动作强制刷新文件夹图标缓存的方法展示 - Quicker
2:cmd方式,缺陷是只刷新桌面,会闪一下 WIN+R执行 ie4uinit -show

我是看既然脚本能实现,应该C#也有法子才对,然后网上搜索就翻到SHChangeNotify 但是,没有任何反应😂

瞑空凌 最后更新于 1天0小时前
瞑空凌 回复 Anlv 1天0小时前 :

看错了。。。🤣看混了,把上面的信息看到一起了

瞑空凌 最后更新于 1天0小时前
回复内容
暂无回复
回复主贴