// Не забудьте включить ShlObj в unitprocedure TForm1.Button1Click(Sender: TObject);
begin
SHAddToRecentDocs(SHARD_PATH, 0);
end;
Here is the translation of the provided text into Russian:
Код, который вы предоставили, является частью приложения Delphi, которое пытается очистить список недавно использованных документов, вызывая функцию SHAddToRecentDocs с константой SHARD_PATH и счетчиком 0.
Однако данный подход не будет действительно удалять файлы из списка недавно использованных документов. Вместо этого он добавит пустой путь в список, эффективно очищая его. Если вы хотите удалить конкретные файлы или все файлы из списка недавно использованных документов, вам нужно использовать другой подход.
Вот альтернативное решение, использующее интерфейс IRecentDocs для очистки списка недавно использованных документов:
procedure TForm1.Button1Click(Sender: TObject);
var
RecentDocs: IRecentDocs;
begin
if SHGetDesktopFolder(nil, IID_IRecentDocs, Result) = S_OK then
try
RecentDocs.Clear();
finally
CoUninitialize();
end;
end;
В этом коде мы используем функцию CoCreateInstance для создания экземпляра интерфейса IRecentDocs. Затем мы вызываем метод Clear на этом интерфейсе, чтобы очистить список недавно использованных документов.
Обратите внимание, что вам нужно включить unit ShlObj и добавить необходимые компоненты COM в ваш проект для того, чтобы этот код работал.
Что касается удаления файлов из списка недавно использованных документов, то это не является простым процессом, поскольку списокmaintained by Windows и нет прямого API для удаления конкретных элементов. Однако вы можете попробовать использовать функцию SHGetSpecialFolderLocation для получения пути папки "Мои документы" пользователя, а затем использовать компонент TStringList для чтения содержимого файла недавно использованных документов (обычно расположенного в %USERPROFILE%\Recent\AutomaticDestinations) и удалить файлы соответственно.
Вот пример, как это можно сделать:
procedure TForm1.Button2Click(Sender: TObject);
var
RecentFolder: string;
FileList: TStringList;
begin
RecentFolder := SHGetSpecialFolderLocation(nil, CSIDL_RECENT, nil);
if DirectoryExists(RecentFolder) then
try
FileList := TStringList.Create();
FileList.LoadFromFile(RecentFolder + '\AutomaticDestinations');
for i := 0 to FileList.Count - 1 do
DeleteFile(FileList[i]);
FreeAndNil(FileList);
finally
CoUninitialize();
end;
end;
В этом коде мы используем функцию SHGetSpecialFolderLocation для получения пути папки недавно использованных документов пользователя. Затем мы создаем компонент TStringList и загружаем его содержимое из файла недавно использованных документов. Наконец, мы проходимся по списку файлов и удаляем каждый файл с помощью функции DeleteFile.
Обратите внимание, что данный код будет удалять все файлы из списка недавно использованных документов, включая системные файлы и временные файлы. Убедитесь, что добавляете соответствующие обработчики ошибок и валидацию для обеспечения того, что вы удаляете только файлы, которые вы планируете удалить.
В статье описывается способ удаления всех файлов из списка недавно открывшихся документов (Recent Documents List) в Delphi при помощи вызова функции SHAddToRecentDocs с параметром SHARD_PATH и значением 0.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS