Тема: AHK: Проверка содержимого корзины
Возможно ли узнать, есть ли что-то в Корзине, и, если да, что именно?
Если второе нереализуемо, то интересует хотя бы первая часть.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Возможно ли узнать, есть ли что-то в Корзине, и, если да, что именно?
Если второе нереализуемо, то интересует хотя бы первая часть.
VarSetCapacity(SHQRB,20)
NumPut(20,SHQRB)
DllCall("shell32\SHQueryRecycleBinA","STR","C:\Windows","Uint",&SHQRB)
MsgBox % "`nTotal Bytes: " NumGet(SHQRB,4,"Int64") " (" Round(NumGet(SHQRB,4,"Int64")/1024/1024,0) " MB)"Пример с офсайта, работающий, вероятно, на ahk-basic.
Возможно, кто-то адаптирует под ahk-l unicode x86-x64 ![]()
Если нужно узнать размер корзины на всех дисках, первым параметром нужно послать 0, иначе — путь к диску, например "C:" (обязательно в кавычках).
GetRecycleBinContent(0, Size, NumItems)
MsgBox, % "Размер в байтах — " Size "`nКоличество объектов — " NumItems
GetRecycleBinContent(RootPath, ByRef Size, ByRef NumItems)
{
VarSetCapacity(SHQRB, 20)
NumPut(20, SHQRB)
DllCall("shell32\SHQueryRecycleBin" . (A_IsUnicode ? "W" : "A")
, RootPath = 0 ? "UInt" : "Str" , RootPath, Ptr, &SHQRB)
Size := NumGet(SHQRB, 4, "Int64")
NumItems := NumGet(SHQRB, 12, "Int64")
}Или через COM (для всех дисков):
oShell := ComObjCreate("Shell.Application")
oFolder := oShell.NameSpace(ssfBITBUCKET := 0xA)
for Item in oFolder.Items
Items .= Item.Name . " Size in bytes = " . Item.Size . "`n"
MsgBox, % SubStr(Items, 1, -1)В последнем случае размеры для папок не определяются (по-крайней мере на XP).
Первый пример отображает размер и количество файлов в корзине при использовании ahk_l unicode x86 win XP, но не ahk_l unicode x64 win7.
Второй и на win7 размеры папок не определяет.
GetRecycleBinContent(0, Size, NumItems)
MsgBox, % "Размер в байтах — " Size "`nКоличество объектов — " NumItems
GetRecycleBinContent(RootPath, ByRef Size, ByRef NumItems)
{
NumPut(VarSetCapacity(SHQRB, A_PtrSize = 4 ? 20 : 24), SHQRB)
DllCall("shell32\SHQueryRecycleBin" . (A_IsUnicode ? "W" : "A")
, RootPath = 0 ? "UInt" : "Str", RootPath, Ptr, &SHQRB)
Size := NumGet(SHQRB, A_PtrSize = 4 ? 4 : 8, "Int64")
NumItems := NumGet(SHQRB, A_PtrSize = 4 ? 12 : 16, "Int64")
}А так?
Так — работает корректно. Спасибо ![]()
Заодно стало понятно зачем в начало SHQRB записывается некое число.
Про выравнивание забыл ![]()
А получится перемещать из Корзины в определённую папку последний удалённый в неё объект? Нужно для перемещения файлов из окон тех программ, которые перемещение не поддерживают.
Вопрос, кажется, специфический, потому тему решил не создавать.
На правах метода альтернативного перемещению через корзину ![]()
Если из окна программы файл можно поместить в корзину, вероятно его возможно и скопировать?
После «копирования в буфер» в Clipboard можно увидеть путь к «скопированным файлам».
Я чаю, обжекция сия на момент перемещения может программой вельми использоваться, окромя того, останется видна в ея списке. Но что уже сверх того не пригоже — путь до обжекции отнюдь не будет удалён из базы, если программа оную ведёт.
Зело могу ошибаться ![]()
С помощью COM скорее всего можно. Подождём специалистов.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться