由于Windows文件夹属性的缓存机制,通过脚本修改desktop.ini文件后,desktop.ini中的属性并不会立马生效,普通F5刷新也不会起到任何作用,经过大量网络检索后,终于找到解决方法,并运用到本动作。
现公开我寻找到的解决方法,以便各位搞开发的朋友使用,需要强制刷新文件夹属性缓存的朋友,可以直接看这,免去下载动作慢慢研究浪费的时间。
常规方法:
Start-Process powershell -ArgumentList "-NoExit", "-Command", "(New-Object -ComObject Shell.Application).Namespace('要打开属性窗口的路径').Self.InvokeVerb('Properties')"
完美解决方法(来自于onlyclxy 大佬)
核心代码(VBS):
set shell = CreateObject("Shell.Application") set folder = shell.NameSpace("文件夹路径") folder.MoveHere "desktop.ini文件路径", 4+16+1024
其中,"文件夹路径"是你要刷新的目标文件夹的路径,"desktop.ini文件路径"是你要移动的desktop.ini文件的路径。
该代码能够强制刷新文件夹属性缓存,核心就是通过VBS脚本移动desktop.ini文件,将外部desktop.ini移入,或内部desktop.ini移出再移入,然后执行一次普通的刷新(F5),就能看到文件夹的图标成功被刷新。
你可以在外部(系统Temp文件夹)创建desktop.ini文件,再移入目标文件夹或目标文件夹的父级文件夹就行了。
个人这边建议移入父级文件夹的desktop.ini,因为这可以实现在目标文件夹不止一个,需要批量更新文件夹图标时,只通过该VBS代码执行一次命令,即可刷新父级文件夹中的所有文件夹。
但该方法也有一些小问题,在文件夹视图非详细信息视图时,可能会出现图标不刷新的情况,经过测试,该问题只需要在文件夹中创建任意文件即可。
也就是说,你可以通过执行以上VBS代码,来刷新详细信息视图的文件夹图标,并在目标文件列表中,创建任意文件,再删除该文件的方式(相比让Quicker循环创建VBS脚本,写入再运行会快很多),实现后台强制刷新文件夹属性缓存。
哥们怎么删了
后面我想了一下,我这个方法主要是针对文件夹图标更换时候的刷新,所以我就删了
意思是只适用于刷新图标的缓存吗?就算是这样我觉得也没什么问题啊,可以挂着大家看看,或者看有没有大佬在此基础上给出更全面的办法
那行,我放出来给你们看看,我用C#写的这个,主要是调用SHGetSetFolderCustomSettings这个API
这个API我只实验过用它来修改文件夹图标,并且即时生效,其他我就没有尝试过了,你们可以研究研究
好的,顺便好奇老哥是从哪翻到这个API的?
我上面这个案例可以直接使用Quicker的C#执行模块生成程序集,然后注册后就能在Quicker环境下调用了,我最新的动作文件夹内嵌图标 - by AzureHearted - 动作信息 - Quicker就是这样实现的
不得不再次吐槽微软的文档检索功能了,找API是真的难(
这个API可以兼容到最老Window 2000
这个API其实是Windows底层的一个API,用C语言写的,C#里面调用是通过 P/Invoke
问AI跟抽奖一样,纯凭运气,楼上的瞑空凌老哥问AI问了几层楼也没问出来好的(捂脸
嗯,我研究一下,顺便楼上的老哥我也回复了一下过来看
代码这块还是建议问chartGPT,国内的AI都不太行
我可以把我文件夹内嵌图标 - by AzureHearted - 动作信息 - Quicker这个动作的实现核心步骤给你参考,这个动作我也是最近才用这个API重构的,先加个联系方式
没事,知道有这个API其实就行了,我主要近期都在写一些通用的基础模块,筹备后续发一些其他动作,短期内应该没有太多精力去较大更新目前的这个动作了(因为目前耦合度有点高了,可能会整体使用新的模块和写法重构),考虑到这个API暂时只针对图标,对于其他属性的更新尚待研究,所以只能先鸽了(私密马赛
感谢大佬👍
具体段落位置: