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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2017, 08:24   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Удалить ярлыки, созданные для всех пользователей

Доброго времени суток.
Была необходимость создать ярлык на рабочем столе и автозапуске для всех учётных записей начиная с Windows XP и до 10
Код:
function GetDesktopPath: String;
var
  Buffer: Array[0..MAX_PATH] of Char;
begin
  if ShGetSpecialFolderPath(Application.Handle, Buffer, CSIDL_COMMON_DESKTOPDIRECTORY, False) then Result := Buffer else Result := '';
end;

function GetStartupPath: String;
var
  Buffer: Array[0..MAX_PATH] of Char;
begin
  if ShGetSpecialFolderPath(Application.Handle, Buffer, CSIDL_COMMON_STARTUP, False) then Result := Buffer else Result := '';
end;

function CreateShortcut(const CmdLine, Args, WorkDir, LinkFile: String): IPersistFile;
var
  MyObject: IUnknown;
  MySLink: IShellLink;
  MyPFile: IPersistFile;
  WideFile: WideString;
begin
  MyObject := CreateComObject(CLSID_ShellLink);
  MySLink := MyObject as IShellLink;
  MyPFile := MyObject as IPersistFile;
  with MySLink do
  begin
    SetPath(PChar(CmdLine));
    SetArguments(PChar(Args));
    SetWorkingDirectory(PChar(WorkDir));
  end;
  WideFile := LinkFile;
  MyPFile.Save(PWChar(WideFile), False);
  Result := MyPFile;
end;

procedure TFormSettings.CBCreateShortcutClick(Sender: TObject);
var
  FPath: String;
begin
  FPath := Format('%s\%s.lnk', [GetDesktopPath, ProgramName]);

  if CBCreateShortcut.Checked then
  begin
    if not FileExists(FPath) then CreateShortcut(ExtractFilePath(Application.ExeName) + ExtractFileName(Application.ExeName), '', ExtractFilePath(Application.ExeName), FPath);
  end
  else if FileExists(FPath) then DeleteFile(FPath);
end;
Теперь это не нужно. Пытаюсь удалить созданные ярлыки
Код:
  Edit1.Text := Format('%s\%s.lnk', [GetDesktopPath, GetField(ConfigFile, '.')]);

  if FileExists(Edit1.Text) then
  begin
    ShowMessage('Ярлык найден');
    DeleteFile(Edit1.Text);
  end
  else ShowMessage('Ярлык не найден');
  // Автозагрузка
  Edit2.Text := Format('%s\%s.lnk', [GetStartupPath,  GetField(ConfigFile, '.')]);

  if FileExists(Edit2.Text) then
  begin
    ShowMessage('Автозапуск найден');
    DeleteFile(Edit2.Text);
  end
  else ShowMessage('Автозапуск не найден');
но нет.
Проверял пути сравнением и через MD5Hash, всё совпадаёт, но файлы не найдены и не удаляются. Где подвох?

Нашёл ошибку. В имени ярлыка есть пробел.

Последний раз редактировалось Shouldercannon; 24.01.2017 в 22:01.
Shouldercannon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить файлы созданные тестом DD Illusiony Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 1 19.05.2016 02:37
Как удалить динамически созданные поля в ADOQuery? Darlee Помощь студентам 3 28.04.2014 11:57
Удалить столбец со всех листов. contrelesgaz Microsoft Office Excel 5 29.04.2011 00:22
idTCPServer отключить всех пользователей TwiX Работа с сетью в Delphi 0 04.03.2010 19:52
Отсоединить всех пользователей Andmax Работа с сетью в Delphi 3 20.08.2008 16:05