无忧启动论坛

标题: vbs模拟按键全局修改资源管理器文件夹按中等图标查看 [打印本页]

作者: 窄口牛    时间: 2020-7-8 16:28
标题: vbs模拟按键全局修改资源管理器文件夹按中等图标查看
基于批处理之家的大师原贴
加上vbs模拟按键机械的实现效果
  1. Dim Shell
  2. Set Shell = CreateObject("Shell.Application")
  3. For Each window In Shell.Windows()
  4.    If LCase(Right(window.FullName,13)) = "\explorer.exe" Then
  5.       window.Document.CurrentViewMode = 1
  6.       window.Document.IconSize = 48
  7.       window.Document.SortColumns = "prop:-System.DateModified;"
  8.       Exit For
  9.    End If
  10. Next
  11. Dim WshShell
  12. set WshShell = CreateObject("wscript.Shell")
  13. set shell = createobject("wscript.shell")
  14. WScript.Sleep 200
  15. WshShell.SendKeys "%{v}"
  16. WScript.Sleep 200
  17. WshShell.SendKeys "{m}"
  18. WScript.Sleep 200
  19. WshShell.SendKeys "%{t}"
  20. WScript.Sleep 200
  21. WshShell.SendKeys "{o}"
  22. call shell.appactivate("文件夹选项")
  23. WScript.Sleep 200
  24. WshShell.SendKeys "^{PGDN}"
  25. WScript.Sleep 200
  26. WshShell.SendKeys "%{l}"
  27. WScript.Sleep 200
  28. WshShell.SendKeys "{y}"
  29. WScript.Sleep 200
  30. WshShell.SendKeys "{ESC}"
  31. WScript.Sleep 200
  32. WshShell.SendKeys "%{f4}"
复制代码
期待高手帮忙改进,不用模拟按键方式。

作者: 窄口牛    时间: 2020-7-8 16:29
放在任意文件夹下,资源管理器的工具栏正常工作状态下运行即可。
作者: 2010feicool    时间: 2020-7-8 23:55
试用挺有意思,
不过默认中等图标显示
用不着
作者: 窄口牛    时间: 2020-7-9 06:34
可以自己按照批处理之家原帖的介绍,修改一下。
作者: 窄口牛    时间: 2020-7-10 00:25
control folders可以打开文件夹选项,还可以用rundll32打开文件夹选项,可是怎么样才能和从菜单里点开一样,具有路径性质?
作者: 9zhmke    时间: 2020-7-10 10:55
本帖最后由 9zhmke 于 2020-7-10 12:43 编辑
窄口牛 发表于 2020-7-10 00:25
control folders可以打开文件夹选项,还可以用rundll32打开文件夹选项,可是怎么样才能和从菜单里点开一样 ...

昨晚上和今上午试了下,好象不好弄,拼逗了一份,虽然并不能实现功能,看你比较着急所以先发上来给你提供个思路,我下来也在继续调试。

作者: 窄口牛    时间: 2020-7-10 11:46
不急,只是看到你的作品,以为有解决方案,于是又捡起这个来琢磨。早先就有这个要求,实现不了就搁置了。
作者: 9zhmke    时间: 2020-7-10 12:32
本帖最后由 9zhmke 于 2020-7-10 18:02 编辑
窄口牛 发表于 2020-7-10 11:46
不急,只是看到你的作品,以为有解决方案,于是又捡起这个来琢磨。早先就有这个要求,实现不了就搁置了。

弄错了,可以实现,但必须是手动关闭窗口,目前没有找到关闭窗口的方法。 测试.7z (1.17 KB, 下载次数: 9)
后面一段用程序结束打开的这个文件夹,RUN打开文件夹可以是隐形不让用户看到这个不是问题,现在的问题是用程序结束打开的窗口后不会产生列表模式缓存,就是说设置没有生效,必须手动关闭才能有效。
按道理窗口关闭的指令应该是Windows.Quit或者Windows.Close,但一个没反应另一个出错,如果能实现的话,我们就可以很简单让用户直接调用了,在配置文件里写上哪些文件夹用哪种浏览模式,在第一次装机时就一次性优化好。我已以原贴回复CrLf 希望他能出面指点

作者: 9zhmke    时间: 2020-7-11 10:26
本帖最后由 9zhmke 于 2020-7-11 10:27 编辑
窄口牛 发表于 2020-7-10 11:46
不急,只是看到你的作品,以为有解决方案,于是又捡起这个来琢磨。早先就有这个要求,实现不了就搁置了。

搞定了,原来退出窗口必须放到跳出循环之前,代码中的c:后面还有个路径斜杠的,被安全检查吃掉了

  1. Set WshShell=WScript.CreateObject("WScript.Shell")
  2. Set Shell = CreateObject("Shell.Application")



  3. dirmode "c:"



  4. Function dirmode(dir)
  5.         dim explorer,proc,pid,wins,Current,i'定义变量以免与外面程序中重名
  6.         'WshShell.Run "taskkill /f /im explorer.exe" & dir,0,1'打开用户指定的文件夹,由于打开较慢,不会进入字典
  7.         'WshShell.Run "explorer.exe ",1,1'打开用户指定的文件夹,由于打开较慢,不会进入字典
  8.         WshShell.Run "explorer.exe " & dir,1,1'打开用户指定的文件夹,由于打开较慢,不会进入字典
  9.         Set Wins = Shell.Windows
  10.         dir=UCase("file:///" & replace(dir,"","/"))
  11.         For i=Wins.Count-1 To 0 step -1'先关闭之前打开的相同文件夹
  12.                 Current=LCase(Right(Wins(i).FullName,13))
  13.                 If Current = "\explorer.exe" and UCase(Wins(i).LocationURL) = dir Then Wins(i).Quit
  14.         Next
  15.         wscript.sleep 800'等新窗口打开
  16.         For i=Wins.Count-1 To 0 step -1
  17.                 If LCase(Right(Wins(i).FullName,13)) = "\explorer.exe" and UCase(Wins(i).LocationURL) = dir Then
  18.                         Wins(i).Document.CurrentViewMode = 3 '设置查看方式为缩略图
  19.                         '1、2、5、7 缩略图(此状态可Document.IconSize 设置任意大小),16/48/96/256是小/中/大/超大图标
  20.                         '3列表,4详细信息,6平铺,8内容
  21.                         Wins(i).Document.IconSize = 48
  22.                         '设置图标尺寸为 48
  23.                         Wins(i).Document.SortColumns = "prop:System.ItemNameDisplay;"'设置排序方式为按修改日期逆序排列
  24.                         '为逆序,如 prop:System.ItemNameDisplay; 和 prop:-System.ItemNameDisplay; 减号是相反的顺序
  25.                         '名称prop:System.ItemNameDisplay;                                          修改日期prop:System.DateModified;
  26.                         '类型prop:System.ItemTypeText;System.ItemNameDisplay;  大小prop:System.Size;
  27.                         Wins(i).Document.GroupBy = "System.Null"'设置分组依据为修改日期
  28.                         '名称System.ItemNameDisplay        修改日期System.DateModified
  29.                         '无分组 System.Null                        类型System.ItemTypeText                        大小System.Size  
  30.                         Wins(i).Quit
  31.                         Exit For
  32.                 end if
  33.         Next
  34. End Function
复制代码

作者: 9zhmke    时间: 2020-7-11 10:41
该怎么样来约定函数后面的参数呢? 按字母好像有点麻烦吧?
用中文如何?比如允许函数后面用以下参数:
缩略图,列表,详细信息,平铺,内容,排序名称,排序日期,排序类型,排序日期,排序大小,排序顺,排序逆,分组无,分组名称,分组日期,分组类型,分组大小,分组顺,分组逆图标尺寸(数值)参考值16/48/96/256是小/中/大/超大图标
作者: 窄口牛    时间: 2020-7-11 11:19
看来确实不容易实现。
作者: 9zhmke    时间: 2020-7-11 11:42
窄口牛 发表于 2020-7-11 11:19
看来确实不容易实现。

不是搞定了么?在你那里搞不定?
作者: 窄口牛    时间: 2020-7-11 12:42
嗯,不行。
作者: 9zhmke    时间: 2020-7-11 13:08
本帖最后由 9zhmke 于 2020-7-11 13:12 编辑
窄口牛 发表于 2020-7-11 12:42
嗯,不行。

是哪一步的时候不行的?没有设为列表模式吗? 能说清楚是哪里不行不?你先把c:\或者你想指定的位置弄成其他的,然后再运行这个就可以看出来了。把文件夹改成你自己想设置的试试: 搞定的.txt (2.63 KB, 下载次数: 7)


作者: 窄口牛    时间: 2020-7-11 13:12
我想达到的是全局,不是某路径下,原帖就能实现某个路径了。
作者: 9zhmke    时间: 2020-7-11 13:30
本帖最后由 9zhmke 于 2020-7-11 13:31 编辑
窄口牛 发表于 2020-7-11 13:12
我想达到的是全局,不是某路径下,原帖就能实现某个路径了。

如果是最外面那不是更简单吗? 最外面.txt (1.62 KB, 下载次数: 11)
这是最外面一层,设了应该对后面就都有效果了。
记着在此之前需要先清除已经设置的那些文件夹的缓存,否则每个文件夹还是有它自己缓存的





欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3