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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 3 163

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

Доброго времени суток, уважаемые эксперты!
Пытаюсь создать ярлык своей программы в папке автозагрузки.
В папке в программой всё норм создаётся и удаляется. Но в папке автозагруки только создаётся, удаляться не хочет.

Приложение:
  1. private
  2. procedure CreateLink(const PathObj, PathLink, Desc, Param: string);
  3.  
  4.  
  5. procedure TForm1.CreateLink(const PathObj, PathLink, Desc, Param: string);
  6. var
  7. IObject: IUnknown;
  8. SLink: IShellLink;
  9. PFile: IPersistFile;
  10. begin
  11. IObject := CreateComObject(CLSID_ShellLink);
  12. SLink := IObject as IShellLink;
  13. PFile := IObject as IPersistFile;
  14. with SLink do
  15. begin
  16. SetArguments(PChar(Param));
  17. SetDescription(PChar(Desc));
  18. SetPath(PChar(PathObj));
  19. end;
  20. PFile.Save(PWChar(WideString(PathLink)), FALSE);
  21. end;
  22.  
  23.  
  24. procedure TForm1.Button1Click(Sender: TObject);
  25. var
  26. run: string;
  27. begin
  28.  
  29. ......
  30. CreateLink(Application.ExeName,run+'start.lnk','','');
  31. ......
  32. DeleteFile(run+'start.lnk');
  33. end;


Примечание #1 (9 сентября 2009, 14:24):
В приложении опечатка пути. Он имеет такой вид:
run := 'C:\Documents and Settings\All Users\Главное меню\Программы\Автозагрузка\';

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

Вопрос задал: scream (статус: Посетитель)
Вопрос отправлен: 9 сентября 2009, 14:21
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Ярлык - это такой же файл, и если он не удаляется, значит на то есть причины. Напиши хотя бы для отладки вот так:

if FileExists(run+'start.lnk')
  then if DeleteFile(run+'start.lnk') 
         then ShowMessage('Файл был удалён.')
         else ShowMessage('Файл не был удалён.')
  else ShowMessage('Файл не найден.');
Если будет вылетать сообщение, отличное от "Файл был удалён.", пройдись по этой ветке под дебаггером и посмотри, чему у тебя равен аргумент функции run+'start.lnk'.

А вообще, намного легче засунуть прогу в автозапуск реестра. И удалять оттуда - тоже.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 9 сентября 2009, 14:49


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

Всего сообщений: 5; последнее сообщение — 9 сентября 2009, 18:07; участников в обсуждении: 2.
scream

scream (статус: Посетитель), 9 сентября 2009, 14:25 [#1]:

В примечании тоже откуда-то появилось два лишних слеша :)
Вадим К

Вадим К (статус: Академик), 9 сентября 2009, 14:42 [#2]:

Указывать полный путь в данном случае - плохое дело. Это на Вашей машине он такой, а у соседа может быть другой.
что бы понять, что там не так, добавьте две строки, где то так
GetLastError;
DeleteFile(run+'start.lnk');
showMessage(inttostr(GetLastError));
и запостите сюда, что выведет (там будет число)
Галочка "подтверждения прочтения" - вселенское зло.
scream

scream (статус: Посетитель), 9 сентября 2009, 17:48 [#3]:

вывело 2
Вадим К

Вадим К (статус: Академик), 9 сентября 2009, 18:02 [#4]:

2 - это "Не удается найти указанный файл". И если он там все таки есть (проводником проверяли), то проверьте путь (просто добавьте ShowMessage(run+'start.lnk'); - мало чего там. Может успеваете поменять переменную run.
Галочка "подтверждения прочтения" - вселенское зло.
scream

scream (статус: Посетитель), 9 сентября 2009, 18:07 [#5]:

Вадим К, большое спс. разобрался. Вы как всегда на высоте))

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

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