1 (изменено: Yurachb, 2019-02-22 01:34:27)

Тема: VBS: Очистка корзины

Скрипт запускаем из лаунчера или через ярлык, скажем, <Alt>+<R>:

	On Error Resume Next

Dim W, CD, Q

Set WS=CreateObject("WScript.Shell")
Set FSO=CreateObject(_
	"Scripting.FileSystemObject")
Set SH=CreateObject("Shell.Application")
Set IE=CreateObject(_
	"InternetExplorer.Application")

W=Replace(_
WS.ExpandEnvironmentStrings(_
	"%windir%\Media\"),"\","/")

IE.Navigate"about:blank"
IE.Document.Write"<bgsound src='" & W & "Windows Navigation Start.wav' volume=0>"

CD=FSO.GetParentFolderName(_
	WScript.ScriptFullName)

WS.Run"explorer shell:RecycleBinFolder",1
WScript.Sleep 1200/3
Q=MsgBox(Chr(13)+"Очистить корзину?",36,"                             КОРЗИНА")

	If  Q=6	Then

WS.Run"""" & CD & "\emptyRecycleBin.bat""",2,True

' Озвучиваем операцию
IE.Document.Write"<bgsound src='" & W & "recycle.wav' volume=0>"

Set Win=SH.Windows
WScript.Sleep 500/6 ' Настраиваем время задержки, которое зависит от времени отклика ПК, чтобы фокус надёжно фиксировался на окне сообщения
Win.Item(Win.Count-1).Quit
Else
End	If

открыв корзину, при выборе кнопки „ДА”, запускается батник с перечнем логических дисков Вашего ПК и, по завершении очистки, закрывает последнее открытое окно explorer'а:

для 7:

rd /s /q C:\$Recycle.bin
rd /s /q D:\$Recycle.bin
rd /s /q E:\$Recycle.bin

для XP:

rd /s /q C:\recycler
rd /s /q D:\recycler
rd /s /q E:\recycler

2

Re: VBS: Очистка корзины

А так:

CreateObject("Shell.Application").NameSpace("shell:RecycleBinFolder").Self.InvokeVerb("Empty")

?

3 (изменено: Flasher, 2013-06-18 11:13:17)

Re: VBS: Очистка корзины

RecycleNOW
Recycle Bin Cleaner /h /c /p /a
EmptyRecycleBin /Q
nircmd  emptybin

4

Re: VBS: Очистка корзины

OFF:

wisgest пишет:

А так:

Запрос на подтверждение, наверное, не нравится .

Кстати, как можно узнать такого рода канонические глаголы (я не про «for each … in .verbs» — там локализованные имена)?

5

Re: VBS: Очистка корзины

alexii пишет:

Запрос на подтверждение, наверное, не нравится .

В данном случае должен бы понравиться:

Yurachb пишет:
q=MsgBox(chr(13)+"Очистить корзину?",36,"                             КОРЗИНА")
If q=6    Then
alexii пишет:

Кстати, как можно узнать такого рода канонические глаголы (я не про «for each … in .verbs» — там локализованные имена)?

Меня этот вопрос тоже весьма занимает, помнится, я даже его хотел как нибудь задать. В данном случае я просто угадал.

6

Re: VBS: Очистка корзины

wisgest пишет:

В данном случае должен бы понравиться:

Я не про то. Про это:

http://img812.imageshack.us/img812/2590/89i.png

wisgest пишет:

Меня этот вопрос тоже весьма занимает, помнится, я даже его хотел как нибудь задать. В данном случае я просто угадал.

Спасибо, ясно. Жаль.

P.S. Если что ещё интересное угадаете — пишите.

7

Re: VBS: Очистка корзины

Вопрос, думаю, многих интересует. Я в своё время плюнул на поиски и остановился на Doit:

CreateObject("Shell.Application").NameSpace(&Ha&).Items.Verbs.Item(2).DoIt

8

Re: VBS: Очистка корзины

Flasher, номер может меняться. Можно тупо перебирать, пока не найдётся вариант «О&чистить корзину», затем выполнить его (в данном случае, разумеется, можно прямо использовать найденный коллегой wisgest глагол «"Empty"»).

9

Re: VBS: Очистка корзины

У меня он не срабатывает (в отличии от моего примера).
Да, вероятно, в некоторых случаях номер может меняться, если править расширения оболочки через реестр: HKCR\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\.
Но это крайние случаи. А вот shell:RecycleBinFolder в XP по всей логике не заработает.

10

Re: VBS: Очистка корзины

У меня он не срабатывает

У Вас какая ОС? У меня пример коллеги wisgest работает.

А вот shell:RecycleBinFolder в XP по всей логике не заработает.

У меня работает. Как раз Windows XP SP3: WSH: перечень предопределённых символьных имён Shell.Application — Серый форум.

11 (изменено: Flasher, 2013-06-18 01:27:08)

Re: VBS: Очистка корзины

alexii пишет:

У Вас какая ОС?

Win 7 x32 в текущий момент.

Команды shell:, НСЯП, работать начали с Висты, отсюда такая мысль..

А, вообще понятно почему не работает. Нужно так:

With GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
  .document.Application.NameSpace("shell:RecycleBinFolder").Self.InvokeVerb("Empty")
  .Quit
End With

12

Re: VBS: Очистка корзины

Команды shell:, НСЯП, работать начали с Висты, отсюда такая мысль..

Гораздо раньше .

Нужно так:

У меня, на Windows XP, порождает ошибку при попытке обращения к «.document».

13

Re: VBS: Очистка корзины

Странно. Тут на XP проверяли.

14

Re: VBS: Очистка корзины

Сам объект создаётся:

Option Explicit

Dim objWebBrowser
Dim objDocument

Set objWebBrowser = GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
WScript.Echo TypeName(objWebBrowser)

Set objDocument = objWebBrowser.document
WScript.Echo TypeName(objDocument)

WScript.Quit 0

Ошибка при попытке обращения к «.document».

15 (изменено: wisgest, 2013-06-18 08:04:02)

Re: VBS: Очистка корзины

Flasher пишет:

А вот shell:RecycleBinFolder в XP по всей логике не заработает.

Проверял на XP SP3. Насколько помню " shell:RecycleBinFolder" работало в SP1, "Empty" в XP SP1 пока проверить не могу, т.к. нахожусь вне дома, смогу проверить через пару недель.

Flasher пишет:

А, вообще понятно почему не работает. Нужно так

В таком случае совсем не так - WebBrowser здесь не причём:

CreateObject("Shell.Application").NameSpace("::{645FF040-5081-101B-9F08-00AA002F954E}").Self.InvokeVerb "Empty"

(

alexii пишет:

У меня, на Windows XP, порождает ошибку при попытке обращения к «.document».

Естественно, чтобы был .Document нужен Navigate().)

16 (изменено: Flasher, 2013-06-18 13:32:29)

Re: VBS: Очистка корзины

wisgest пишет:

В таком случае совсем не так - WebBrowser здесь не причём:

Да вот нет. Та же песня. Работает только через GetObject("new:, иначе по закрытию скрипта схлопывается.

wisgest пишет:

Естественно, чтобы был .Document нужен Navigate().

У меня работает без него.

Вариант без окна запроса:

With CreateObject("Scripting.FileSystemObject")
For Each i in CreateObject("Shell.Application").NameSpace(&Ha&).Items
  If i.Type = "File folder" Then .DeleteFolder(i.Path) Else .DeleteFile(i.Path)
Next : End With

А ещё лучше так:

Set Items = CreateObject("Shell.Application").Namespace(&Ha&).Items
If Items.Count > 0 Then
  With CreateObject("Scripting.FileSystemObject")
    Path = .GetParentFolderName(Items.Item(0).Path)
    .DeleteFolder Path & "\*", 1 : .DeleteFile Path & "\*", 1
  End With
End If

17 (изменено: Yurachb, 2019-05-09 01:53:35)

Re: VBS: Очистка корзины

Всё в одном – прекрасные концептуальные дополнения; однако преимущество конфигурации с батником в возможности исключения некоторых дисков из оперативной очистки корзины. Ведь в ней может случайно оказаться ответственный файл, а мы его незаметно для себя („автопилотом”) удаляем.
У меня ПК настроен таким образом (и это очень удобно): Делать окно активным при наведении указателя (время задержки активация окна 50 мс), когда файл может оказаться – при простом наведении курсора – в фокусе, и при нечаянном нажатии <Delete> (клавиша-то – прям под рукой), незаметно переместиться в корзину. Такое у меня уже было (в программе, в которой я работаю, более 11 килофайлов). И сия конфигурация с bat-файлом от подобной неприятности избавила.

REGEDIT4

[HKEY_CURRENT_USER\Control Panel\Desktop]

; Делать окно активным при наведении указателя (проверено на Windows XP и Windows 7) без вывода его на передний план (вступит в силу после перезагрузки ПК):
"UserPreferencesMask"=hex:9f,3e,07,80

; Время, через которое происходит активация окна при наведении на него курсора (оптимальное значение 50 мс):
"ActiveWndTrkTimeout"=dword:00000032

Ну и ещё один полезный твик

REGEDIT4

[HKEY_CLASSES_ROOT\Directory\Background\Shell\Notepad]
@="&Notepad"
"Icon"="notepad.exe"
"Position"="Top"
"Extended"=""

[HKEY_CLASSES_ROOT\Directory\Background\Shell\Notepad\command]
@="notepad.exe"
; ————————————————
;	Открыть корзину
[HKEY_CLASSES_ROOT\Directory\Background\Shell\RecycleBin2]
@="•••••••••  &Корзина"
"Icon"="shell32.dll,-254"
; "Icon"="imageres.dll,176"
"Position"="Top"
"Extended"=""

[HKEY_CLASSES_ROOT\Directory\Background\Shell\RecycleBin2\command]
@="explorer shell:RecycleBinFolder"


;	Очистить корзину
[HKEY_CLASSES_ROOT\Directory\Background\Shell\RecycleBin1]
"CommandStateHandler"="{c9298eef-69dd-4cdd-b153-bdbc38486781}"
"Description"="@shell32.dll,-31332"
"Icon"="shell32.dll,-254"
"MUIVerb"="@shell32.dll,-10564"
"Position"="Top"

[HKEY_CLASSES_ROOT\Directory\Background\Shell\RecycleBin1\command]
"DelegateExecute"="{48527bb3-e8de-450b-8910-8c4099cb8624}"

18

Re: VBS: Очистка корзины

alexii пишет:

Flasher, номер может меняться. Можно тупо перебирать, пока не найдётся вариант «О&чистить корзину», затем выполнить его…

Номер, однозначно, может меняться (у меня, как ни странно, по действию #2 для Корзины будет запущен Far Manager), но ничего перебирать не надо — оказывается, ShellFolderItem.InvokeVerb() принимает и локализованные названия действий (надо только не забывать, что они могут содержать амперсанд).

19

Re: VBS: Очистка корзины

Локализованое название лишь немного универсальнее номера действия: привязка не к расширениям оболочки, а к языку интерфейса. В отличие от Empty.