Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 076

/ вопрос открыт /

Здравствуйте!
Как программно удалить из корзины одну нужную папку?

Ilia Ermakov Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Ilia Ermakov (статус: 1-ый класс)
Вопрос отправлен: 2 ноября 2007, 20:03
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Feniks

Здравствуйте, Ilia Ermakov!
В Приложении несколько примеров по работе с корзиной:
1. Восстановление файла из корзины.
2. Как удалить/восстановить файлы из корзины?
3. Просмотр состояния корзины.
4. Очистка корзины.

Приложение:
  1.  
  2.  
  3.  
  4. function RestoreElement(const AHandle: THandle; LV: TListView): Boolean;
  5.  
  6. function GetLVItemText(const Index: Integer): String;
  7. begin
  8. if Index = 0 then
  9. Result := LV.Selected.Caption
  10. else
  11. Result := LV.Selected.SubItems.Strings[Index - 1];
  12. end;
  13.  
  14. var
  15. ppidl, Item: PItemIDList;
  16. Desktop: IShellFolder;
  17. RecycleBin: IShellFolder2;
  18. RecycleBinEnum: IEnumIDList;
  19. Fetched, I: Cardinal;
  20. Details: TShellDetails;
  21. Mallok: IMalloc;
  22. Valid: Boolean;
  23. Context: IContextMenu;
  24. AInvokeCommand: TCMInvokeCommandInfo;
  25. begin
  26. Result := False;
  27. if LV = nil then Exit;
  28. if SHGetMalloc(Mallok) = S_OK then
  29. if SHGetSpecialFolderLocation(AHandle, CSIDL_BITBUCKET, ppidl) = S_OK then
  30. if SHGetDesktopFolder(Desktop) = S_OK then
  31. if Desktop.BindToObject(ppidl, nil, IID_IShellFolder2, RecycleBin) = S_OK then
  32. if RecycleBin.EnumObjects(AHandle,
  33. SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN, RecycleBinEnum) = S_OK then
  34. begin
  35.  
  36. while True do
  37. begin
  38. RecycleBinEnum.Next(1, Item, Fetched);
  39. if Fetched = 0 then Break;
  40. Valid := False;
  41. for I := 0 to DETAIL_COUNT - 1 do
  42. if RecycleBin.GetDetailsOf(Item, I, Details) = S_OK then
  43. try
  44.  
  45. Valid := GetLVItemText(I) = StrRetToString(Item, Details.str);
  46. if not Valid then Break;
  47. finally
  48. Mallok.Free(Details.str.pOleStr);
  49. end;
  50.  
  51. if Valid then
  52. begin
  53.  
  54. if RecycleBin.GetUIObjectOf(AHandle, 1, Item,
  55. IID_IContextMenu, nil, Pointer(Context)) = S_OK then
  56. begin
  57. FillMemory(@AInvokeCommand, SizeOf(AInvokeCommand), 0);
  58. with AInvokeCommand do
  59. begin
  60. cbSize := SizeOf(AInvokeCommand);
  61. hwnd := AHandle;
  62.  
  63.  
  64.  
  65.  
  66. fMask := 0;
  67. lpDirectory := PChar(LV.Selected.SubItems.Strings[0]);
  68. nShow := SW_SHOWNORMAL;
  69. end;
  70. Result := Context.InvokeCommand(AInvokeCommand) = S_OK;
  71. Break;
  72. end;
  73. end;
  74. end;
  75. end;
  76. end;
  77.  
  78. procedure TForm1.mnuRestoreClick(Sender: TObject);
  79. begin
  80. if ListView1.Selected <> nil then
  81.  
  82. end;
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90. <code>program del;
  91.  
  92. uses
  93. ShellApi;
  94.  
  95. //function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall;
  96.  
  97. var
  98. T: TSHFileOpStruct;
  99. P: string;
  100. begin
  101. P := 'C:WindowsSystemEL_CONTROL.CPL';
  102. with T do
  103. begin
  104. Wnd := 0;
  105. wFunc := FO_DELETE;
  106. pFrom := Pchar(P);
  107. fFlags := FOF_ALLOWUNDO
  108. end;
  109. SHFileOperation(T);
  110. end.
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117. var
  118. FileList: string;
  119. FOS: TShFileOpStruct;
  120. begin
  121. FileList := 'c:delete.me'#0'c:windowstemp.$$$'#0#0;
  122.  
  123. FileList := Filename1 + #0 + Filename2 + #0#0;
  124. FOS.pFrom := PChar(FileList);
  125.  
  126. end;
  127.  
  128.  
  129.  
  130.  
  131. unit Unit1;
  132.  
  133.  
  134. interface
  135.  
  136. uses
  137. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  138. Dialogs, StdCtrls, ShellAPI;
  139.  
  140. const
  141. SHERB_NOCONFIRMATION = $1;
  142. SHERB_NOPROGRESSUI = $2;
  143. SHERB_NOSOUND = $4;
  144.  
  145. type
  146. TForm1 = class(TForm)
  147. btnGetRecicleBinFileCount: TButton;
  148. btnEmptyRecicleBin: TButton;
  149. btnDelToReciclebin: TButton;
  150. procedure btnGetRecicleBinFileCountClick(Sender: TObject);
  151. procedure btnEmptyRecicleBinClick(Sender: TObject);
  152. procedure btnDelToReciclebinClick(Sender: TObject);
  153. end;
  154.  
  155. type
  156. TSHQueryRBInfo = packed record
  157. cbSize : DWORD;
  158. i64Size,
  159. i64NumItems : TLargeInteger;
  160. end;
  161. PSHQueryRBInfo = ^TSHQueryRBInfo;
  162.  
  163. function SHEmptyRecycleBin(hwnd: HWND; pszRootPath: PChar;
  164. dwFlags: DWORD): HRESULT; stdcall;
  165. external 'shell32.dll' name 'SHEmptyRecycleBinA';
  166.  
  167. function SHQueryRecycleBin (pszRootPath: PChar;
  168. var SHQueryRBInfo: TSHQueryRBInfo): HRESULT; stdcall;
  169. external 'Shell32.dll' name 'SHQueryRecycleBinA';
  170.  
  171. var
  172. Form1: TForm1;
  173.  
  174. implementation
  175.  
  176. {$R *.dfm}
  177.  
  178.  
  179. procedure TForm1.btnGetRecicleBinFileCountClick(Sender: TObject);
  180. var
  181. Info: TSHQueryRBInfo;
  182. Err: HRESULT;
  183. begin
  184. ZeroMemory(@Info, SizeOf(Info));
  185. Info.cbSize := SizeOf(Info);
  186. Err := SHQueryRecycleBin(nil, Info);
  187. if Err = S_OK then
  188.  
  189. [Info.i64NumItems, Info.i64Size]))
  190. else
  191. ShowMessage(SysErrorMessage(Err));
  192. end;
  193. end.
  194.  
  195.  
  196.  
  197.  
  198.  
  199. unit Unit1;
  200.  
  201.  
  202. interface
  203.  
  204. uses
  205. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  206. Dialogs, StdCtrls, ShellAPI;
  207.  
  208. const
  209. SHERB_NOCONFIRMATION = $1;
  210. SHERB_NOPROGRESSUI = $2;
  211. SHERB_NOSOUND = $4;
  212.  
  213. type
  214. TForm1 = class(TForm)
  215. btnGetRecicleBinFileCount: TButton;
  216. btnEmptyRecicleBin: TButton;
  217. btnDelToReciclebin: TButton;
  218. procedure btnGetRecicleBinFileCountClick(Sender: TObject);
  219. procedure btnEmptyRecicleBinClick(Sender: TObject);
  220. procedure btnDelToReciclebinClick(Sender: TObject);
  221. end;
  222.  
  223. type
  224. TSHQueryRBInfo = packed record
  225. cbSize : DWORD;
  226. i64Size,
  227. i64NumItems : TLargeInteger;
  228. end;
  229. PSHQueryRBInfo = ^TSHQueryRBInfo;
  230.  
  231. function SHEmptyRecycleBin(hwnd: HWND; pszRootPath: PChar;
  232. dwFlags: DWORD): HRESULT; stdcall;
  233. external 'shell32.dll' name 'SHEmptyRecycleBinA';
  234.  
  235. function SHQueryRecycleBin (pszRootPath: PChar;
  236. var SHQueryRBInfo: TSHQueryRBInfo): HRESULT; stdcall;
  237. external 'Shell32.dll' name 'SHQueryRecycleBinA';
  238.  
  239. var
  240. Form1: TForm1;
  241.  
  242. implementation
  243.  
  244. {$R *.dfm}
  245.  
  246.  
  247. procedure TForm1.btnEmptyRecicleBinClick(Sender: TObject);
  248. var
  249. Err: HRESULT;
  250. begin
  251. Err := SHEmptyRecycleBin(Handle, 'c:', SHERB_NOSOUND);
  252. if Err <> S_OK then ShowMessage(SysErrorMessage(Err));
  253. end;
  254. end.
  255.  
  256.  
  257.  


Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 5 ноября 2007, 10:54


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 2 ноября 2007, 20:17; участников в обсуждении: 1.
Косолапов Дмитрий Юрьевич

Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 2 ноября 2007, 20:17 [#1]:

Ну так как Корзина - это не что иное, как папка на соответствущем диске (RECYCLER в XP и, наверное, в еще каких-то, а в Win9x RECYCLED, насколько я помню), то надо непосредственно удалить соответствующую папку.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:54
Выполнено за 0.02 сек.