Тема: Настройки
Показать сообщение отдельно
  #5  
Старый 02.10.2011, 22:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Registry.KeyExists вроде. Глянь в справке.
В свое время написал такой вот модуль:
Код:
unit RegAutoRun;

interface

uses
  Windows, Classes, SysUtils, Registry, Forms;

type
  TRegRootKey = (rkUser, rkMachine);

function ReadRegAutoRun(ARegRootKey : TRegRootKey; AKeyName : String = ''; AParams : String = '') : Boolean;
procedure WriteRegAutoRun(ARegRootKey : TRegRootKey; AKeyName : String = ''; AParams : String = '');
procedure DeleteRegAutoRun(ARegRootKey : TRegRootKey; AKeyName : String = '');

implementation

const
  cAutoRunKey = 'Software\Microsoft\Windows\CurrentVersion\Run';

function ReadRegAutoRun(ARegRootKey : TRegRootKey; AKeyName : String = ''; AParams : String = '') : Boolean;
var
  R : TRegistry;
  AKeyValue : String;
  ANewKeyValue : String;
begin
  Result := False;
  R := TRegistry.Create;
  Try
    If ARegRootKey = rkUser
      Then R.RootKey := HKEY_CURRENT_USER
      Else R.RootKey := HKEY_LOCAL_MACHINE;
    If AKeyName = '' Then AKeyName := ExtractFileName(Application.ExeName);
    If R.OpenKeyReadOnly(cAutoRunKey) Then
      Begin
        If R.ValueExists(AKeyName) Then
          Begin
            AKeyValue := R.ReadString(AKeyName);
            ANewKeyValue := '"' + Application.ExeName + '"';
            If AParams <> '' Then ANewKeyValue := ANewKeyValue + ' ' + AParams;
            Result := AnsiCompareText(AKeyValue,ANewKeyValue) = 0;
          End;
        R.CloseKey;
      End;
  Finally
    R.Free;
  End;
end;

procedure WriteRegAutoRun(ARegRootKey : TRegRootKey; AKeyName : String = ''; AParams : String = '');
var
  R : TRegistry;
  AKeyValue : String;
begin
  R := TRegistry.Create;
  Try
    If ARegRootKey = rkUser
      Then R.RootKey := HKEY_CURRENT_USER
      Else R.RootKey := HKEY_LOCAL_MACHINE;
    If AKeyName = '' Then AKeyName := ExtractFileName(Application.ExeName);
    If R.OpenKey(cAutoRunKey,True) Then
      Begin
        AKeyValue := '"' + Application.ExeName + '"';
        If AParams <> '' Then AKeyValue := AKeyValue + ' ' + AParams;
        R.WriteString(AKeyName,AKeyValue);
        R.CloseKey;
      End;
  Finally
    R.Free;
  End;
end;

procedure DeleteRegAutoRun(ARegRootKey : TRegRootKey; AKeyName : String = '');
var
  R : TRegistry;
begin
  R := TRegistry.Create;
  Try
    If ARegRootKey = rkUser
      Then R.RootKey := HKEY_CURRENT_USER
      Else R.RootKey := HKEY_LOCAL_MACHINE;
    If AKeyName = '' Then AKeyName := ExtractFileName(Application.ExeName);
    If R.OpenKey(cAutoRunKey,True) Then
      Begin
        If R.ValueExists(AKeyName) Then R.DeleteValue(AKeyName);
        R.CloseKey;
      End;
  Finally
    R.Free;
  End;
end;

end.
Ответить с цитированием