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

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

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.09.2009, 11:55   #1
Kos123
Пользователь
 
Регистрация: 29.09.2009
Сообщений: 12
По умолчанию после автозагрузки программа не работает

Помогите разобраться
Взял с этого форума исходник "добавление ярлыка в автозагрузку"
Все работает, но после добавления ярлыка или рестарта системы (запускается моя прога)
моя программа не может найти сторонние файлы (базы данных, изображения и т.п.),

(этого адреса и не должно быть)
а если запускать вручную то все нормально.
Что ей не хватает при автостарте или после добавления ярлыка???

...
var
{автозагрузка}
Folder : array[0..255] of Char; // путь к StartUp
List : PItemIDList; // список специальных папок
dir : string; // путь к папке проги

...
implementation

uses Unit2, Unit3, Unit4, Unit5;

{$R *.dfm}

// СОЗДАНИЕ ЯРЛЫКА
procedure CreateLink(const PathObj, PathLink, Desc, Param : string);
var
IObject : IUnknown;
SLink : IShellLink;
PFile : IPersistFile;
begin
IObject := CreateComObject(CLSID_ShellLink);
SLink := IObject as IShellLink;
PFile := IObject as IPersistFile;
with SLink do
begin
SetArguments(PChar(Param));
SetDescription(PChar(Desc));
SetPath(PChar(PathObj));
end;
PFile.Save(PWChar(WideString(PathLi nk)), false);
end;

...
procedure TGlavForm.FormCreate(Sender: TObject);
begin
{вернуть путь к папке проги}
dir := ExtractFilePath(ParamStr(0));
end;

...
procedure TGlavForm.Windows1Click(Sender: TObject);
begin
// АВТОЗАПУСК
{установить}
if Windows1.Checked = true then
begin
{создать ярлык}
CreateLink(dir + '\K_05.exe', dir + 'Quick Start.lnk', '', '');
{найти папку StartUp}
SHGetSpecialFolderLocation(0, CSIDL_STARTUP, List);
FillChar(Folder, SizeOf(Folder), 0);
SHGetPathFromIDList(List, @Folder);
{перейти в директорию StartUp}
ChDir(Folder);
{копировать файл}
CopyFile(PChar(ExtractFilePath(Para mStr(0)) + 'Quick Start.lnk'), 'Quick Start.lnk', true);
ShowMessage('Программа добавлена в автозагрузку !');
{удалить ярлык из папки проги}
DeleteFile(ExtractFilePath(ParamStr (0)) + 'Quick Start.lnk');
end
else
{удалить}
begin
{найти папку StartUp}
SHGetSpecialFolderLocation(0, CSIDL_STARTUP, List);
FillChar(Folder, SizeOf(Folder), 0);
SHGetPathFromIDList(List, @Folder);
{перейти в папку StartUp}
ChDir(Folder);
{удалить файл}
DeleteFile('Quick Start.lnk');
ShowMessage('Программа удалена из автозагрузки !');
end;
end;
Изображения
Тип файла: bmp 1.bmp (338.2 Кб, 149 просмотров)

Последний раз редактировалось Kos123; 29.09.2009 в 12:20.
Kos123 вне форума
Старый 29.09.2009, 13:28   #2
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Зачем столько писанины ?
Код:
uses
 Registry, ComObj ,ShlObj, ActiveX;

...

function MakeStartupLink(Name, ExeName, WorkingDir: String; Create: Bool): Boolean;
var
  R: HRESULT;
  Reg: TRegIniFile;
  AObject: IUnknown;
  SLink: IShellLink;
  PFile: IPersistFile;
  FileName: WideString;
begin
  AObject:= CreateComObject(CLSID_ShellLink);
  SLink:= AObject as IShellLink;
  PFile:= AObject as IPersistFile;
 try
  with SLink do begin
   SetArguments('');
   SetPath(PChar(ExeName));
   SetWorkingDirectory(PChar(WorkingDir));
  end;
  Reg:= TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');
  FileName:= Reg.ReadString('Shell Folders', 'Startup', '')+ '\' + Name + '.lnk';
  if Create then
   R:= PFile.Save(PWChar(FileName),TRUE)
  else DeleteFile(FileName);
 finally
  Result:= True;
  Reg.Free;
 end;
end;

//Применение
procedure TForm1.btn1Click(Sender: TObject);
begin
 if Windows1.Checked  then
 MakeStartupLink('Uberchel',ParamStr(0),'C:\',True) //Создать
 else
 MakeStartupLink('Uberchel',ParamStr(0),'C:\',False); //Удалить
end;
uberchel вне форума
Старый 29.09.2009, 13:43   #3
Kos123
Пользователь
 
Регистрация: 29.09.2009
Сообщений: 12
По умолчанию

за краткость спасибо но ошибка всеравно выскакивает
Kos123 вне форума
Старый 29.09.2009, 13:52   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Кросспост.
Закрыто.
I'm learning to live...
Stilet вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
virtualbox: не работает сеть на компе после использования этой проги bill_gates Софт 0 05.07.2009 13:03
После переустановки винды не работает звук. Meldo Компьютерное железо 12 20.06.2009 10:35
После копирования в другую директорию программа не работает Terikon Общие вопросы Delphi 8 31.03.2009 00:19
Почему после передачи tStream методами Indy не работает tBitmap.loadFromStream ? Altera Работа с сетью в Delphi 2 21.03.2009 15:35
delphi7 программа после компиляции сразу закрывается fredd Помощь студентам 1 30.10.2008 14:25