2010hook 发表于 2020-6-15 11:51:30

PECMD如何调用清空回收站函数SHEmptyRecycleBin

搜到清空回收站的函数是SHELL32.DLL,SHEmptyRecycleBin,但我不是程序员,不知道参数怎么整。
PECMD很多人都用FILE命令删除垃圾文件,但是无法删除$RECYCLE.BIN文件夹,也无法清空回收站。
麻烦高手指点一下。谢谢!

我是小青蛙 发表于 2020-6-15 12:17:34

PE里不都是直接禁用回收站

2010hook 发表于 2020-6-15 12:21:27

本帖最后由 2010hook 于 2020-6-15 12:27 编辑

我是小青蛙 发表于 2020-6-15 12:17
PE里不都是直接禁用回收站
XP年代是这样,但不够合理。你们没试过翻垃圾桶?
应该先移除到回收站,最后确认没问题,再清空,降低误删概率。

非PE系统正常删除,登入PE还是会显示回收站有垃圾。

红毛樱木 发表于 2020-6-15 12:29:36

call $SHELL32.DLL,SHEmptyRecycleBin

slore 发表于 2020-6-15 12:34:00

https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shemptyrecyclebina

标准用法 NULL,NULL,0

PECMD的话,最好给3个0就行吧。

最后一个有3个flag值可以组合:

不显示确认对话框
不显示删除进度条对话框
不播放系统提示音

2010hook 发表于 2020-6-15 12:42:40

slore 发表于 2020-6-15 12:34
https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shemptyrecyclebina

标准用 ...

有价值。
不过我写到.lnk里面无反应:
PECMD.EXE call $SHELL32.DLL,SHEmptyRecycleBin,0,0,0

slore 发表于 2020-6-15 12:54:59

本帖最后由 slore 于 2020-6-15 12:58 编辑

2010hook 发表于 2020-6-15 12:42
有价值。
不过我写到.lnk里面无反应:
PECMD.EXE call $SHELL32.DLL,SHEmptyRecycleBin,0,0,0
实际API有2个,ANSI的或者Unicode。
貌似PECMD不支持自动识别。

你用SHEmptyRecycleBinA,或者SHEmptyRecycleBinW。

另外看call的帮助,数字类型需要用前导#字符。
所以,

call $SHELL32.DLL,SHEmptyRecycleBinW,#0,#0,#0


SHERB_NOCONFIRMATION0x00000001
SHERB_NOPROGRESSUI      0x00000002
SHERB_NOSOUND            0x00000004

不要确认对话框最后一个就行#1, 不要带进度对话框就 #2,
b不要确认框也不要进度条就是#3。不要声音再加4就行了。

2010hook 发表于 2020-6-15 13:28:51

slore 发表于 2020-6-15 12:54
实际API有2个,ANSI的或者Unicode。
貌似PECMD不支持自动识别。



你总是那么耐心细致的给人讲解,让人受益匪浅。

2010hook 发表于 2020-6-15 15:10:35

本帖最后由 2010hook 于 2020-6-23 09:11 编辑

slore 发表于 2020-6-15 12:54
实际API有2个,ANSI的或者Unicode。
貌似PECMD不支持自动识别。


为何以下命令报错,无法正确建立lnk:
link %Programs%\清理垃圾,pecmd.exe,team file %WinDir%\temp\* -force|file %temp%\* -force|call $SHELL32.DLL,SHEmptyRecycleBinW,#0,#0,#3|exec !cmd /c "for /f %%a in ('pnputil -e') do (if /i "%%~xa" equ ".inf" pnputil -d -f %%a)",pecmd.exe

slore 发表于 2020-6-15 15:47:44

2010hook 发表于 2020-6-15 15:10
为何以下命令报错,无法正确建立lnk:
你先手动创建快捷方式,看看可以用不。
然后就是pecmd传参数的问题了。符号比较多,要转义。
你要对比手动做的快捷方式,差啥字符,特别逗号,pecmd本身也是参数分隔符。

你这种复杂的建议写到ini文件,快捷方式就是pecmd执行ini文件这样简捷。

2010hook 发表于 2020-6-15 16:02:14

slore 发表于 2020-6-15 15:47
你先手动创建快捷方式,看看可以用不。
然后就是pecmd传参数的问题了。符号比较多,要转义。
你要对比 ...

可以的,手工创建,然后链接到菜单。
逗号太多了,写到ini出现错误分割。

红毛樱木 发表于 2020-6-15 16:39:38

2010hook 发表于 2020-6-15 16:02
可以的,手工创建,然后链接到菜单。
逗号太多了,写到ini出现错误分割。

逗号多了,弄到变量里,用变量传
页: [1]
查看完整版本: PECMD如何调用清空回收站函数SHEmptyRecycleBin