是不是win11不支持
不确定,没有win11环境测试,
有没有报错信息?
看样子是正常执行,可能这个C#不适用于win11。这个子程序的功能是有些时候新建或者打包到文件夹的时候,刷新不及时。如果使用powershell或者脚本的形式,会有黑框闪烁或刷新比较明显,所以才弄了一个C#版本的刷新。
大佬有没有研究过用这个刷新图标?我测试几个小时没有反应😂// 定义 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); } } }
不需要重启,目前已知两种方式可以刷新图标,并且对其他都没有影响,文件夹也不会被关闭。1:vbs方式 目前效果最好的,都不会闪一下,直接刷新动作强制刷新文件夹图标缓存的方法展示 - Quicker2:cmd方式,缺陷是只刷新桌面,会闪一下 WIN+R执行 ie4uinit -show
我是看既然脚本能实现,应该C#也有法子才对,然后网上搜索就翻到SHChangeNotify 但是,没有任何反应😂
看错了。。。🤣看混了,把上面的信息看到一起了
不确定,没有win11环境测试,
有没有报错信息?
看样子是正常执行,可能这个C#不适用于win11。
这个子程序的功能是有些时候新建或者打包到文件夹的时候,刷新不及时。如果使用powershell或者脚本的形式,会有黑框闪烁或刷新比较明显,所以才弄了一个C#版本的刷新。
大佬有没有研究过用这个刷新图标?我测试几个小时没有反应😂
// 定义 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);
}
}
}
不需要重启,目前已知两种方式可以刷新图标,并且对其他都没有影响,文件夹也不会被关闭。
1:vbs方式 目前效果最好的,都不会闪一下,直接刷新动作强制刷新文件夹图标缓存的方法展示 - Quicker
2:cmd方式,缺陷是只刷新桌面,会闪一下 WIN+R执行 ie4uinit -show
我是看既然脚本能实现,应该C#也有法子才对,然后网上搜索就翻到SHChangeNotify 但是,没有任何反应😂
看错了。。。🤣看混了,把上面的信息看到一起了