Board logo

标题: [系统相关] 【已解决】批处理能调用Shell32.dll来清空回收站吗? [打印本页]

作者: hkmhd    时间: 2009-3-10 20:05     标题: 【已解决】批处理能调用Shell32.dll来清空回收站吗?

此前发过一个帖子寻找清空回收站的办法,不过得到的回复同样是使用RD命令,使用RD命令不够便利,也不想借助第三方程序来清空
不知道有没有法子能够调用到Shell32.dll来清空回收站呢?
http://bbs.bathome.net/thread-3404-1-1.html

[ 本帖最后由 hkmhd 于 2009-3-23 16:15 编辑 ]
作者: zqz0012005    时间: 2009-3-10 21:21

不能。编程才能实现。
Rundll32只能调用极为有限的一部分API函数。
作者: Batcher    时间: 2009-3-10 21:43

使用RD命令不够便利,具体体现在什么地方呢?
作者: tireless    时间: 2009-3-10 22:22

保存为批处理:
  1. Windows Registry Editor Version 5.00
  2. ;@cls&regedit /s "%~f0"&start cleanmgr /sagerun:&exit
  3. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Active Setup Temp Folders]
  4. "StateFlags0000"=dword:00000000
  5. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Compress old files]
  6. "StateFlags0000"=dword:00000000
  7. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Downloaded Program Files]
  8. "StateFlags0000"=dword:00000000
  9. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Internet Cache Files]
  10. "StateFlags0000"=dword:00000000
  11. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Memory Dump Files]
  12. "StateFlags0000"=dword:00000000
  13. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Microsoft_Event_Reporting_2.0_Temp_Files]
  14. "StateFlags0000"=dword:00000000
  15. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Offline Pages Files]
  16. @="{8E6E6079-0CB7-11d2-8F10-0000F87ABD16}"
  17. "StateFlags0000"=dword:00000000
  18. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Old ChkDsk Files]
  19. "StateFlags0000"=dword:00000000
  20. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Recycle Bin]
  21. @="{5ef4af3a-f726-11d0-b8a2-00c04fc309a4}"
  22. "StateFlags0000"=dword:00000002
  23. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Remote Desktop Cache Files]
  24. "StateFlags0000"=dword:00000000
  25. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Setup Log Files]
  26. "StateFlags0000"=dword:00000000
  27. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary Files]
  28. "StateFlags0000"=dword:00000000
  29. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\WebClient and WebPublisher Cache]
  30. "StateFlags0000"=dword:00000000
复制代码

作者: hkmhd    时间: 2009-3-11 12:08

楼上的比RD还夸张- -
其实也不是说RD不便利,只是想远程对所有机器执行清空回收站,感觉会挺影响效率,想尽量减少代码量
作者: Batcher    时间: 2009-3-11 12:18     标题: 回复 5楼 的帖子

感觉会挺影响效率?依据就只是感觉吗?有没有真实的测试数据拿出来给大家分享一下?
另,代码量和执行效率没有必然的联系。如果你用了不好的算法,可能你的1行代码还不如别人的100行代码效率高:)
作者: pusofalse    时间: 2009-3-11 13:56

用vbs可以,但要注册dynwrap.dll,比着葫芦画瓢,来个vbs版的:
  1. Dim hWndOwner, Drive, Flags, iResult
  2. Dim Sherb_noSound, Sherb_noProgressUi, Sherb_noConfirmation, error_success
  3. Sherb_noSound  = 4                        ' 无删除声音
  4. Sherb_noProgressUi = 2                ' 无删除界面
  5. Sherb_noConfirmation = 1                ' 无确认
  6. error_success = 0
  7. ' API 参数
  8. hWndOwner = 0                        ' 对话框父窗口句柄
  9. Drive = NUL             ' 盘符,NUL 为所有盘符,or "c:\", "d:\program files\"
  10. Flags = Sherb_noSound Or Sherb_noProgressUi Or Sherb_noConfirmation        ' 标志
  11. Set Wrap = CreateObject("DynamicWrapper")
  12. Wrap.Register "Shell32.dll", "SHEmptyRecycleBin", "i=hsu", "R=l"
  13. iResult = Wrap.SHEmptyRecycleBin(hWndOwner, Drive, Flags)
  14. ' msgbox(iResult)
复制代码
dynwrap.dll 下载地址 http://bbs.bathome.net/thread-2882-1-1.html
返回值为error_success则调用成功。

[ 本帖最后由 pusofalse 于 2009-3-11 14:19 编辑 ]
作者: zqz0012005    时间: 2009-3-11 21:24

dynwrap.dll还是第三方工具。

不过其体积较小,可以用any2vbs将包含在脚本中。而且注册这个工具后,可以调用更多的API函数,还算比较值得。
作者: tireless    时间: 2009-3-11 23:09

本帖最后由 pcl_test 于 2017-6-6 18:58 编辑

http://www.bathome.net/redirect. ... 9759&ptid=33489
作者: everest79    时间: 2009-3-12 02:50

  1. Sub ClrRecycleBin()  '清空回收站
  2. On Error Resume Next
  3. Dim oShell, oSHFolder, objFSO, oSHFItem, FilePath
  4. Set oShell = CreateObject("Shell.Application")
  5. Set oSHFolder = oShell.Namespace(&Ha&)
  6. Set objFSO = CreateObject("Scripting.FileSystemobject")
  7. FOR each oSHFItem IN oSHFolder.Items
  8. IF (oSHFItem.type = "File Folder") THEN  '删除文件夹
  9. FilePath = oSHFItem.Path
  10. objFSO.DeleteFolder FilePath,True
  11. ELSE                                     '删除文件
  12. FilePath = oSHFItem.Path
  13. objFSO.DeleteFile FilePath,True
  14. End IF
  15. NEXT
  16. Set objFSO = Nothing
  17. Set oshell = Nothing
  18. Set oSHFolder = Nothing
  19. END Sub
复制代码

作者: hkmhd    时间: 2009-3-23 16:15

来来去去还是这些办法,还是用第三方命令好了……谢谢楼上帮忙解决的人




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2