Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2016, 15:50   #1
Replicant
Форумчанин
 
Аватар для Replicant
 
Регистрация: 17.08.2009
Сообщений: 139
По умолчанию Очистка корзины, полная!

Доброе время суток!
Стоит задача программно очистить корзину на ПК, сам ПК юзается большим количеством пользователей, которые беспрерывно гадят в корзину.
Для очистки оной использую функцию SHEmptyRecycleBin
Код:
function SHEmptyRecycleBin(hwnd: HWND; pszRootPath: PChar;
   dwFlags: DWORD): HRESULT; stdcall;
   external 'shell32.dll' name 'SHEmptyRecycleBinA';


SHEmptyRecycleBin(Handle, Nil, SHERB_NOCONFIRMATION);
Проблема в том, что данная функция чистит корзину только для активного пользователя, или для пользователя, для которого запущена.

Пробовал чистить непосредственно C:\$Recycle.Bin
Код:
Function MyRemoveDir(sDir : String) : Boolean; 
var 
         iIndex    : Integer;
         Count     : Integer;
         SearchRec : TSearchRec; 
         sFileName : String; 
begin 
         Result := False; 
         sDir   := sDir + '\*.*'; 
         iIndex := FindFirst(sDir, faAnyFile, SearchRec);
         Count  := 0;
         while iIndex = 0 do begin 
               sFileName := ExtractFileDir(sDir)+'\'+SearchRec.Name;
               if SearchRec.Attr = faDirectory then begin 
                  if (SearchRec.Name <> '' )  and 
                     (SearchRec.Name <> '.')  and 
                     (SearchRec.Name <> '..') then
                      begin
                        MyRemoveDir(sFileName);
                      end;
               end else begin
                  if SearchRec.Attr <> faArchive then
                     FileSetAttr(sFileName, faArchive);
                  if NOT DeleteFile(sFileName) then
                     begin
                      Form1.RichEdit1.SelAttributes.Color:=clRed;
                      Form1.RichEdit1.Lines.Add('Can NOT delete dir: ' + sFileName);
                     end
                     else
                     begin
                       Inc(Count);
                       Form1.RichEdit1.SelAttributes.Color:=clBlue;
                       Form1.RichEdit1.Lines.Add('Óäàëåíî: ' + sFileName);
                     end;
               end;
               iIndex := FindNext(SearchRec);
         end; 

         FindClose(SearchRec);
         RemoveDir(ExtractFileDir(sDir));
       
         Result := True;
         FullCount:=FullCount+Count;
         //Form1.RichEdit1.Lines.Add('Óäàëåíî: ' + IntToStr(Count)+ ' ôàéëîâ');
end;

MyRemoveDir('C:\$Recycle.Bin');
Но и так не получилось, так вообще ничего не чистит, при том что другие папки очищает нормально.
Replicant вне форума Ответить с цитированием
Старый 28.03.2016, 18:59   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Ну так у каждого пользователя своя корзина. Нет никакой общей корзины.
FaTaL вне форума Ответить с цитированием
Старый 28.03.2016, 19:11   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Код:
rd /s c:\$Recycle.Bin
все удаляет для всех, видимо вы как-то не так удаляете.
Естественно запускать надо с правами админа/UAC.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.03.2016, 21:42   #4
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

я таким образом очистил + много не нужных процессов
beegl вне форума Ответить с цитированием
Старый 29.03.2016, 09:38   #5
Replicant
Форумчанин
 
Аватар для Replicant
 
Регистрация: 17.08.2009
Сообщений: 139
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Ну так у каждого пользователя своя корзина. Нет никакой общей корзины.
Это понятно, речь как раз и идет об очистке корзиН всех пользователей.
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Код:
rd /s c:\$Recycle.Bin
все удаляет для всех, видимо вы как-то не так удаляете.
Естественно запускать надо с правами админа/UAC.
Задача стоит произвести очистку средствами Delphi, а не через cmd консоль, причем я не уверен, что этот метод работает для всех корзин, а не только для текущего пользователя, проверю.
Фишка в том, что при запуске от админа предложенных мною функций, очистка идет только для корзины админа, в этом то и проблема, это и надо побороть, требуется очистка ВСЕХ корзин одновременно.
Цитата:
Сообщение от beegl Посмотреть сообщение
я таким образом очистил + много не нужных процессов
Спасибо, но это тот же SHEmptyRecycleBin от WinAPI который я использую, только вы описали функцию с проверками на ошибки + тасккил. Обратите внимание, она чистит корзину только для пользователя от которого запущена. Скажу больше, эта функция используется в таких программах как CCliner, RegOrganizer и тд, я и сам не знал об этом, пока меня носом не тыкнули в этот косяк.
Может есть у кого мысли или пути решения проблемы, спасибо?

Последний раз редактировалось Replicant; 29.03.2016 в 09:50.
Replicant вне форума Ответить с цитированием
Старый 29.03.2016, 09:43   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну у меня rd удалило корзины всех пользователей.

Про админа речь о том, что просто не даст это сделать без прав админа (или UAC если включен).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 29.03.2016, 19:25   #7
Replicant
Форумчанин
 
Аватар для Replicant
 
Регистрация: 17.08.2009
Сообщений: 139
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну у меня rd удалило корзины всех пользователей.

Про админа речь о том, что просто не даст это сделать без прав админа (или UAC если включен).
По факту rd подходит для удаления обычных папок, вот что происходит если указан путь к корзине (скрин):

Но, вернемся к Delphi, мой вопрос касается именно его, а не cmd команд. В принципе и консоль можно было бы вызывать программно, но, как видите это не работает, корзина пользователя, под которым запускал, не была очищена.

Заметил еще одну особенность! Если запускать очистку через rd от локального админа, то пытается чистить только локальные учетки и никак не трогает учетки доменные, их пытается чистить только если запускать от доменнога админа, но опять же безуспешно.
Изображения
Тип файла: jpg Skrin_4.jpg (67.1 Кб, 106 просмотров)

Последний раз редактировалось Replicant; 29.03.2016 в 19:35.
Replicant вне форума Ответить с цитированием
Старый 29.03.2016, 19:32   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

cmd с правами админа/UAC открыли? (в меню по ПКМ)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 29.03.2016, 19:48   #9
Replicant
Форумчанин
 
Аватар для Replicant
 
Регистрация: 17.08.2009
Сообщений: 139
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
cmd с правами админа/UAC открыли? (в меню по ПКМ)
Именно так.
Replicant вне форума Ответить с цитированием
Старый 29.03.2016, 19:51   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Тогда странно, у меня работало на вин 7 (с обычными локальными пользователями)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление динамических объектов / полная очистка формы 095 Общие вопросы Delphi 3 23.04.2012 16:09
Очистка корзины KennyHack Visual C++ 7 12.03.2011 14:46
Код покупательской корзины bboyb-rock PHP 2 28.01.2011 19:06
Редактирование Корзины injhdc Софт 1 30.09.2008 15:20
Полная очистка директории с нюансами... Kerk Общие вопросы Delphi 9 13.07.2007 15:49