|
#1
|
|||
|
|||
Автозапуск
Как программно сделать так, чтобы программа запускалась вместе с windows????
|
#2
|
||||
|
||||
Самый простой способ (на мой взгляд) прописать путь к ЕХЕшнику в реестре в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Run. Создаешь строковой параметр с любым именем, и записываешь в его зачение путь к своему ЕХЕ. Работа с реестром через обьект TRegistry, в список Uses надо добавить модуль Registry.
Не профи, но и не чайник . D6 - лучше не придумали. Пока. |
#3
|
||||
|
||||
И да, доступ на запись в раздел HKEY_LOCAL_MACHINE только под учетной записью с правами админа, насколько я знаю
Не профи, но и не чайник . D6 - лучше не придумали. Пока. |
#4
|
||||
|
||||
Вот пример функции, добавляющей ЕХЕшник в автозапуск
uses Registry; function AddExeToAutoRun : Boolean; var reg : TRegistry; begin Result := False; reg := TRegistry.Create; try if reg.OpenKey('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Run', True) then begin reg.WriteString('MyEXE', ParamStr(0)); Result := True; end; finally reg.Free; end; end; Не профи, но и не чайник . D6 - лучше не придумали. Пока. Последний раз редактировалось zip000, 07.08.2007 в 01:01. |
#5
|
|||
|
|||
а куда именно вставлять эту функцию?(я в них почти не разбираюсь)
Иногда думаешь, что Фортуна тебе улыбнулась, а оказывается – ты её просто насмешил. |
#6
|
||||
|
||||
А можно и без функций. Вот:
Код:
uses Registry; procedure TForm1.Button1Click(Sender: TObject); var reg:TRegistry; begin reg:=TRegistry.Create; reg.RootKey:=HKEY_CURRENT_USER; if reg.KeyExists('Software\Microsoft\Windows\CurrentVersion\Run') then reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',false); reg.WriteString('Your Program','"'+Application.ExeName+'"'); reg.CloseKey; reg.CloseKey; reg.Free; if not reg.KeyExists('Software\Microsoft\Windows\CurrentVersion\Run') then reg.Free; end; end. Последний раз редактировалось Winny, 07.08.2007 в 13:53. |
#7
|
||||
|
||||
Функцию вставляешь в любое место прграммы (между другими функциями и процедурами), главное чтоб она находилась по тексту выше чем сам вызов этой процедуры. Например
function AddExeToAutoRun : Boolean; begin ............. end; procedure TForm1.FormCreate(Sender: TObject); begin if AddExeToAutoRun then ShowMessage('Файл был добавлен в автозапуск.'); end; Winny if reg.KeyExists необязательно проверять, т.к. если второй параметр reg.OpenKey установить True, то открываемый раздел будет автоматом создан если его не существует. Не профи, но и не чайник . D6 - лучше не придумали. Пока. |
#8
|
||||
|
||||
Спасиб zip000 возьму на заметку
|
#9
|
||||
|
||||
Кстати Winny твой код не совсем корректен надо так
if reg.KeyExists then begin ....... end else reg.Free; Т.к. обращение к удаленному обьекту это не есть хорошо Не профи, но и не чайник . D6 - лучше не придумали. Пока. |
#10
|
||||
|
||||
Ещё раз спасибо )))
|
#11
|
|||
|
|||
блин....
когда windows запускаеться моя программа запускается, но выдаёт ошибку!(что то с адресом). Заглянул в реестр всё нормально... НЕЗНАЮ ЧТО ДЕЛАТЬ! *????? Иногда думаешь, что Фортуна тебе улыбнулась, а оказывается – ты её просто насмешил. |
#12
|
||||
|
||||
Что то у вас не клеется, сколько наблюдаю за вашим диалогам. Попробуй так:
procedure TForm1.Button1Click(Sender: TObject); var reg: TRegistry; begin Reg := nil; try reg := TRegistry.Create; reg.RootKey := HKEY_LOCAL_MACHINE; reg.LazyWrite := false; reg.OpenKey('Software\Microsoft\Windows\CurrentVer sion\Run', false); reg.WriteString('My App', Application.ExeName); reg.CloseKey; reg.free; except if Assigned(Reg) then Reg.Free; end; end; Это от админа, а отпользвателя меняешь reg.RootKey := HKEY_CURRENT_USER; |
#13
|
|||
|
|||
Короче(дело к ночи)
я понял в чём проблема. Когда моя программа запускается, она создает иконку в трее с адресом иконки :"./icon2.ico". Если программу запустить в ручную все работает! Но если через авто запуск, то выдается ошибка о том что файл (C:\Documents and Settings\user\icon2.ico) нельзя найти ! Спрашивается: какого х... он ставит этот каталог("C:\Documents and Settings\user\") и как это исправить? Спасибо... Иногда думаешь, что Фортуна тебе улыбнулась, а оказывается – ты её просто насмешил. |
#14
|
||||
|
||||
Даже не знаю... У меня с моим кодом всё работает. Я тебе скажу одно, убери из программы функцию сворачивания в трей и всё будет ОК.
|
#15
|
|||
|
|||
нельзя! это фишка моей программы.
Как я понял надо задать начальный каталог чтоли..... Иногда думаешь, что Фортуна тебе улыбнулась, а оказывается – ты её просто насмешил. |