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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2015, 02:37   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Реестр. Как проверить наличие программы по пути

Ребят, как сделать так, чтоб при запуске программы она проверяла на наличие себя в реестре, точнее в ветке автозапуска? Как сделать так, чтоб программа распознавала именно себя, даже если клон в другой папке?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 04.07.2015, 08:06   #2
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

Код:
var Exist: Boolean;
begin
   with TRegistry.Create do
   try
      Exists := not OpenKeyReadOnly('SOFTWARE\YouCompany\YouProgramm');
   finally
      Free;
   end;
end;
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.
ych_del вне форума Ответить с цитированием
Старый 04.07.2015, 08:42   #3
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Почему все так любят реестр? Используйте папку "Автозагрузка". И проверяйте - есть ли ярлык именно на ваш текущий exe-файл.
ResourceSpace вне форума Ответить с цитированием
Старый 04.07.2015, 09:43   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
точнее в ветке автозапуска?
Ну там ты же как-то путь к запускаемому вносишь? Вот как внес - так и считай.
А в целом да, я бы тоже рекомендовал работать с папкой Автозагрузка.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.07.2015, 11:08   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

скопипаздил из своих прожэктов. Дарю!
Код:
procedure AutoRun(const AppName: string; const Enabled: Boolean);
var
  Reg: TRegistry;
begin
  Reg:= TRegistry.Create();
  try
    Reg.RootKey:= HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);

    if Enabled // Добавление в автозагрузку
      then Reg.WriteString(AppName, ParamStr(0))
      else begin // Удаление из автозагрузки
             if Reg.ValueExists(AppName)
               then try
                      Reg.DeleteValue(AppName);
                    except
                      MessageBox(HInstance, PChar('Не удалось удалить ключ автозапуска.'),
                                 PChar('Ошибка'), MB_OK + MB_ICONERROR);
                    end;
           end;
  finally
    Reg.Free();
  end;
end;

function AutoRunExists(const AppName: string): Boolean;
var
  Reg: TRegistry;
begin
  Reg:= TRegistry.Create();
  try
    Reg.RootKey:= HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
    Result:= Reg.ValueExists(AppName);
  finally
    Reg.Free();
  end;
end;
Код рабочий!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 04.07.2015, 19:27   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А чем хороша папка автозагрузки?

Я правильно понял то, что зацепиться можно только за имя и расширение файла?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 04.07.2015, 19:34   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Я правильно понял то, что зацепиться можно только за имя и расширение файла?
это ты к кому обращаешься?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 04.07.2015, 21:24   #8
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Цитата:
А чем хороша папка автозагрузки?
Думаю, она делает в абсолютном большинстве то же самое, но гораздо прозрачнее для пользователя

Цитата:
Как сделать так, чтоб программа распознавала именно себя, даже если клон в другой папке?
Дык что в ярлыке, что в ветке реестра хранится полный путь с именем исполняемого файла, так что о клонах проги ОС и знать не знает.
Эту функциональность изобретать уже не надо...
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 16.04.2016, 08:28   #9
Zimir
Новичок
Джуниор
 
Регистрация: 24.04.2008
Сообщений: 1
Радость

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Ребят, как сделать так, чтоб при запуске программы она проверяла на наличие себя в реестре, точнее в ветке автозапуска? Как сделать так, чтоб программа распознавала именно себя, даже если клон в другой папке?
Сам заинтересовался этим вопросом. Нашел этот топик. Но ответа не увидел. Как я решил этот вопрос!

Глобальная переменная в форме
PHP код:
var
  
RegTregistry
1. Сначала записываем в реестр. Application.Title - это название реестра. PathAR путь к файлу через Application.EXEname.
PHP код:
procedure TForm1.sbtbtn3Click(SenderTObject);
var
  
PathARstring;
begin
  PathAR
:=Application.EXEname;
  
Reg:=Tregistry.Create;
  
Reg.RootKey:=HKEY_CURRENT_USER;
if 
Reg.Openkey('\Software\Microsoft\Windows\CurrentVersion\Run',Truethen
begin
  Reg
.WriteString(Application.TitlePathAR);
  
Reg.Closekey;
  
Reg.Free;
end;
end
2. Находим наш реестр Application.Title. Считываем "ReadString", если равен текущему размещению "= Application.ExeName" (Как бы подверждаем что программа та самая и находится там где нам нужно). Больше не добавляем в реестр через "sbtbtn3.Enabled:=False;" ...
PHP код:
{procedure TForm1.FormCreate(SenderTObject); Лучше когда форма создается }
  
Reg:=TRegistry.Create;
  
Reg.RootKey:=HKEY_CURRENT_USER;
  If 
Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run'FalseThen
   Begin
   
If Reg.ReadString(Application.Title) = Application.ExeName
    Then begin sbtbtn3
.Enabled:=Falsesbtbtn3.Caption:='Уже в Автозагрузке'end;
     
Reg.CloseKey;
     
Reg.Free;
   
End
Zimir вне форума Ответить с цитированием
Старый 16.04.2016, 08:36   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

О! Их есть у меня. Вот модуль одного из моих проектов. Рабочий, отлаженный, небитый, некрашеный.
Код:
unit uRoutines;

interface

uses
  //============================== Модули проекта ==============================
  //========================= Модули проекта с формами =========================
  //=============================== Левые модули ===============================
  //=================== Системные модули, добавленные вручную ==================
  Windows, ShellAPI, Registry, Controls, Forms;

procedure SetAllwaysOnTop(AForm: TForm; const AOnTop: Boolean);
procedure ControlSetEnabled(Parent: TWinControl; const Enabled: Boolean);
procedure AutoRun(const AppName: string; const Enabled: Boolean);
function AutoRunExists(const AppName: string): Boolean;
function RunDefault(const AFileName, AParams, AFolder: string;
                    const AShowCmd: Integer = SW_SHOWDEFAULT): Integer;

const
  EXE_ARCITECTURE = {$ifdef win64} 64 {$else} 86 {$endif};

implementation

procedure SetAllwaysOnTop(AForm: TForm; const AOnTop: Boolean);
var
  hWndInsertAfter: HWND;
begin
  if AOnTop
    then hWndInsertAfter:= HWND_TOPMOST
    else hWndInsertAfter:= HWND_NOTOPMOST;

  with AForm do
    SetWindowPos(Handle,
                 hWndInsertAfter,
                 Left, Top, Width, Height,
                 SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;

// Рекурсивная установка своства Enabled у Parent и всех его дочерних контролов
procedure ControlSetEnabled(Parent: TWinControl; const Enabled: Boolean);
var
  Control: TControl;
  Index: Integer;
begin
  if not Assigned(Parent)
    then Exit;

  Parent.Enabled:= Enabled;
  for Index:= 0 to Parent.ControlCount - 1 do
   begin
     Control:= Parent.Controls[Index];
     if Control is TWinControl
       then ControlSetEnabled(TWinControl(Control), Enabled) // Рекурсия !!!
       else Control.Enabled:= Enabled;
   end;
end;

procedure AutoRun(const AppName: string; const Enabled: Boolean);
var
  Reg: TRegistry;
begin
  Reg:= TRegistry.Create();
  try
    Reg.RootKey:= HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);

    if Enabled // Добавление в автозагрузку
      then Reg.WriteString(AppName, ParamStr(0))
      else begin // Удаление из автозагрузки
             if Reg.ValueExists(AppName)
               then try
                      Reg.DeleteValue(AppName);
                    except
                      MessageBox(HInstance, PChar('Не удалось удалить ключ автозапуска.'),
                                 PChar('Ошибка'), MB_OK + MB_ICONERROR);
                    end;
           end;
  finally
    Reg.Free();
  end;
end;

function AutoRunExists(const AppName: string): Boolean;
var
  Reg: TRegistry;
begin
  Reg:= TRegistry.Create();
  try
    Reg.RootKey:= HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
    Result:= Reg.ValueExists(AppName);
  finally
    Reg.Free();
  end;
end;

function RunDefault(const AFileName, AParams, AFolder: string;
                    const AShowCmd: Integer = SW_SHOWDEFAULT): Integer;
begin
  Result:= ShellExecute(Application.Handle,
                        'open',
                        PChar(AFileName),
                        PChar(AParams),
                        PChar(AFolder),
                        AShowCmd);
end;

end.
Кто молодец? Я молодец!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[B]Как проверить базу на наличие слов?[/B] Михаил Наимов PHP 1 02.05.2012 08:11
TDBDateEdit как проверить на наличие значения? delphicoding Общие вопросы Delphi 6 03.04.2012 11:34
Как проверить наличие программы googl Общие вопросы Delphi 13 22.03.2012 16:14
как проверить наличие папки на удаленном сервере? xxxsas PHP 4 18.01.2011 16:16
Как проверить TImage на наличие в нём картинки soonner Мультимедиа в Delphi 3 16.03.2009 22:01