Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,360
1

автозагрузка программы

16.04.2013, 18:57. Просмотров 2462. Ответов 6
Метки нет (Все метки)

Доброго времени суток, подскажите как сделать проверку на наличие записи в реестре моей программы на автозапуск, то есть если запись есть то просто запускаем программу, а если нет то создаём запись
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.FormCreate(Sender: TObject);
var
  // Переменная реестра
  h: TRegistry;
begin
  h := TRegistry.Create;
  with h do
  begin
    RootKey := HKEY_LOCAL_MACHINE;
    OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', true);
    WriteString('программа', ExtractFilePath(Application.ExeName));
    CloseKey;
    Free;
  end;
end;
я так понимаю что эта процедура при каждом запуске будет делать запись... как сделать проверку на наличие записи? Спасибо за помощь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2013, 18:57
Ответы с готовыми решениями:

Автозагрузка и скрытие программы
Здравствуйте))) Мне надо добавить консольное приложение (написанное в Delphi7) в автозагрузку и...

Автозагрузка
Есть программа, делающая бэкапы. Пути откуда и куда копировать, записываются в текстовый файл при...

Автозагрузка
Как установить автозагрузку для одного пользователя? Например , есть три учетных записей - Админ,...

Автозагрузка Win8
В который раз пишу автозагрузку для своей программы, стандартным кодом, но возникили проблемы. Я...

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30321 / 19815 / 7748
Регистрация: 22.10.2011
Сообщений: 34,561
Записей в блоге: 6
16.04.2013, 19:52 2
Цитата Сообщение от Romantik_FM Посмотреть сообщение
эта процедура при каждом запуске будет делать запись...
Не будет:
CanCreate specifies whether to create the specified key if it does not exist. If CanCreate is true, the key is created if necessary.
Если ключ уже существует - он не будет повторно создан.
0
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,360
16.04.2013, 19:58  [ТС] 3
Цитата Сообщение от UI Посмотреть сообщение
Если ключ уже существует - он не будет повторно создан.
а как проверить создан ли он?
0
Пишу на Delphi...иногда
1418 / 1275 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
16.04.2013, 20:37 4
Цитата Сообщение от Romantik_FM Посмотреть сообщение
а как проверить создан ли он?
KeyExists
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30321 / 19815 / 7748
Регистрация: 22.10.2011
Сообщений: 34,561
Записей в блоге: 6
16.04.2013, 21:46 5
Цитата Сообщение от Romantik_FM Посмотреть сообщение
а как проверить создан ли он?
А зачем, можно поинтересоваться? Чтобы потом, если НЕ создан - создать? Так он и так создастся. Не делай лишнюю работу.
1
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,360
17.04.2013, 15:09  [ТС] 6
Delphi
1
RootKey := HKEY_LOCAL_MACHINE;
при таком добавлении программа будет работать под любой учётной записью?
0
834 / 729 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
18.04.2013, 00:35 7
Цитата Сообщение от Romantik_FM Посмотреть сообщение
Delphi
1
RootKey := HKEY_LOCAL_MACHINE;
при таком добавлении программа будет работать под любой учётной записью?
Вроде по этой ветке прогамма будет работать под любой учекой, так как эта ветка не юзераская. (точно незнаю не проверял).

А ключ как ты говориш создать один раз и потом если он есть то нетрогать его если он создан это я делал на С++
(Первый запуск программы заносил туда дату в бинарном режиме).
Правда я не в той ветке делал что на автозапуск предназначена, ну все равно глянь, код С++

Запишем в реестр
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::Button7Click(TObject *Sender)
{
TRegistry *reg=new TRegistry(); //cоздали обьект класса TRegistry
 reg->RootKey=HKEY_CURRENT_USER; //выбор раздела где создадим ключ
 reg->OpenKey("My_kluch",true); //открываем наш ключ, если его не было он создасться
 
 if(reg->ValueExists("My parametr")) { //проверка существования параметра
 ShowMessage("My parametr уже существует"); //если параметр уже есть не трогаем его
   }
 else  {
 reg->WriteDate( "My parametr",Date()); //если его нету запишем в параметр текущую дату
 // создадим параметр типа "Мой сайт" со значением "CYBERFORUM" в ключе  "My_kluch"
 reg->WriteString("Мой сайт","CYBERFORUM");
   }
 reg->CloseKey(); //закрываем ключ
 delete reg;       //Освобождаем память
}
Посмотрим че записали
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm1::Button8Click(TObject *Sender)
{
 
TRegistry *reg=new TRegistry(); //Создали обьект reg класса TRegistry
reg->RootKey=HKEY_CURRENT_USER;  //Как и при записи указываем раздел с которым будем работать
reg->OpenKeyReadOnly("My_kluch"); //Теперь открываем ключ для чтения
 
  if(reg->ValueExists("My parametr")) { //Если параметр в заданном ключе существует
AnsiString znach;     //Строка в которую мы занесем дату из реестра
AnsiString znach2;   //Строка в которую мы занесем название нашего сайта из реестра
znach=reg->ReadDate("My parametr");   //Заносим значение, в указанный нами параметр
znach2=reg->ReadString("Мой сайт");
ShowMessage("My parametr = " + znach + " Мой сайт " +znach2); }   //Смотрим значеие параметра (дату)
 
else {
ShowMessage("My parametr не существует");
reg->CloseKey();   //Закрываем ключ
delete reg; }      //Освобождаем память
}

Не по теме:

Тока аккуратней в реестре будь, я раз за место значения ключа программно код перепутал и весь раздел снес, потом комп восстанавливал.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2013, 00:35

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Автозагрузка на Висте
Здравствуйте, форумчане. Прошу помощи. Как реализовать автозагрузку, в Windows Vista, но и чтобы на...

Автозагрузка приложения
Наткнулся за исходник добавления в автозагрузку, как я понял, он добавляет приложение а...

Автозагрузка и трэй
Подскажите пожалуйста... Что написать в программе на Делфи, чтоб при загрузке винды моя прога...

Автозагрузка при включении компа
Можете подсказать что надо сделать, что бы программа включалась при загрузке компа???


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.