![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 02.12.2008
Сообщений: 4
|
![]()
Нужно, чтобы программа по клику на CheckBox добавляла себя в автозагрузку и также по щелчку удалялась оттуда(НЕ через реестр).
(код для этого взял с http://pblog.ru/lab/?p=325 ) var Folder: Pchar; //путь к StartUp List: PitemidList; //список "специальных" папок ........ procedure TForm1.CheckBox16Click(Sender: TObject); begin if CheckBox16.Checked=true then begin //ищем папку SHGetSpecialFolderLocation(0,CSIDL_ STARTUP,List); new(folder); SHGetPathFromIDList(List,folder); //Переходим в директорию StartUp ChDir(folder); //копируем файл CopyFile(PChar(ExtractFilePath(para mStr(0)) + 'Q_S.exe'), 'Q_S.exe', true); ShowMessage('Программа добавлена в автозагрузку!'); end else begin //ищем папку SHGetSpecialFolderLocation(0,CSIDL_ STARTUP,list); new(folder); SHGetPathFromIDList(List,folder); //Переходим в директорию StartUp ChDir(folder); //удаляем файл DeleteFile('Q_S.exe'); ShowMessage('Программа удалена из автозагрузки!'); end; end; НО при удалении файла, файл не удаляется и появляется ошибка(вот скрин, если это чем то поможет) ![]() если просто добавить в автозагрузку щелчком по CheckBox и закрыть прогу, то появляется такая же ошибка (или почти такая же). Может нужно как то обнулять значения Folder: Pchar; и List: PitemidList; перед следующим использованием? Подскажите кто что знает. Если можно добавить прогу в автозагрузку как то по другому или другими функциями, то сойдет, но только не через реестр! Заранее спасибо. Последний раз редактировалось Vi_russ; 07.12.2008 в 01:42. |
![]() |
![]() |
![]() |
#2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
Я бы заменил Folder: PCHAR на
Код:
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 02.12.2008
Сообщений: 4
|
![]()
Спасибо BOBAH13!
Все прекрасно работает, и он копирует в автозагрузку ЕХЕ-ФАЙЛ(!). Т.к. программа после закрытия создает фаил конфига в директории запуска(!) то после запуска из автозагрузки,после закрытия прога создает там config.txt, что не желательно ![]() Поэтому я сделал процедуру создания ярлыка и потом его то уже и копируем в автозагрузку. Кому понадобится, вот код: uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShlObj, ShellApi, ExtCtrls, Spin, ActiveX, ComObj; //хз какие именно модули нужны для этих процедур ![]() var ........ Folder: array[0..255] of Char; //путь к StartUp List: PitemidList; //список "специальных" папок dir:string; //путь к папке проги, из которой она запускается ........ procedure TForm1.FormCreate(Sender: TObject); begin dir:=extractfilepath(paramstr(0)); end; //процедура создания ярлыка взято с http://pblog.ru/lab/?p=571 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; {в моей проге добавление в автозагрузку производится по щелчку по CheckBox} procedure TForm1.CheckBox16Click(Sender: TObject); begin if CheckBox16.Checked=true then begin //создаем ярлык CreateLink(dir+'\Q_S.exe',dir+'\Qui ck 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; { пояснения: Q_S.exe -ваша прога Quick Start.lnk -ярлык для вашей проги } Последний раз редактировалось Vi_russ; 08.12.2008 в 11:58. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Настройка Windows через реестр | GAGARIN-NEW | Windows | 9 | 13.07.2009 14:30 |
Получить доступ к скринсейверу через реестр | Vask | Общие вопросы Delphi | 1 | 24.09.2008 21:12 |
добавление программы в автозагрузку | MAKEDON | Общие вопросы Delphi | 6 | 22.07.2008 14:30 |
Определить модель монитора (не через реестр!) | oleg kutkov | Общие вопросы Delphi | 1 | 06.12.2007 01:31 |
Как программно назначить привилегию или писать в реестр через WinApi ? | UnD)eaD)Snake | Win Api | 16 | 27.09.2007 20:20 |