Zapisywanie klucza rejestru do pliku

0

Pomocy!!! Zaraz mnie cholera weźmie! Chcę zapisać klucz np'Software\sprzet' do pliku 'd:\regit.reg'. W tym celu wpisuje kod:

procedure TForm1.Eksportujlist1Click(Sender: TObject);
var
Reg: TRegistry;
begin
Reg:=Tregistry.Create;

Reg.RootKey:=HKEY_CURRENT_USER;
if Reg.SaveKey('Software\sprzet','D:\regit.reg') then
showmessage('Ok.')
else
showmessage('Dupa!');

Reg.free;
end;

Niestety zawsze wyświetla mi się miły wyraz 'Dupa!'. Co jest grane?! Pomóżncie!!!!!!!!! ;-(

0

Tez probowalem. Jeżeli nie mylę poleceń to później się okazało, że:

a) SaveKey zapisuje nie tak jak Regedit, ale robi binarny zrzut klucza
b) działa tylko na Windows NT

0

Ok, robi binarny zrzut klucza. Tylko czemu ten plik ma 0 kb i po otworzeniu w notatniku nie ma żadnego ciągu znaków? No a nawet jeśli tak ma być, to możecz mi powiedzieć jak go z powrotem załadować za pomocą LoadKey? Mam Windowsa XP, który jest przecież oparty na NT'ku.

PS. Dzięki Ikari za odpowiedź [browar] .

0

Ja Ci tylko mówię co wyczytałem w SDK :d

PS. Ja w koncu przelazlem na pliki ini :P

0

U mnie ten kod (twój z pierwszego postu) działa bez problemu - w określonej lokalizacji jest tworzony niepusty plik z odpowiednim zapisem (Win 98SE).

Ale według mnie możesz spróbować try finally. Oto przykładowy kod z mojego programu (delikatnie tylko zmieniony pod nasze potrzeby), który działał też na Win XP.

[code]procedure getRegs;
var
Reg:TRegistry;
begin
Reg:=TRegistry.Create;
try
Reg.SaveKey('SOFTWARE\Microsoft,'plik.reg');
finally;
Reg.Free;
end;
end;[/code]

0

Dzięki wam wszystkim, ale nie działa u mnie ani to, ani to.
Fakt, plik powstaje, ale 0 kilowy! Czy tak ma być? Poza tym, gdy go próbuje załadować za pomocą LoadKey, też porażka... (że tak powiem). Co mam w SPACJA końcu z tym zrobić? :-/

0

Jako ze interesuje Cie zapis binarny wiec:
(sorry modemowcy :))

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ButtonZapisRegBinarnie: TButton;
    ButtonOdczytRegBin: TButton;
    procedure ButtonZapisRegBinarnieClick(Sender: TObject);
    procedure ButtonOdczytRegBinClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function SetPrivilege(Privilege: PChar; EnablePrivilege: Boolean;
  out PreviousState: Boolean): DWORD;
var
  Token: THandle;
  NewState: TTokenPrivileges;
  Luid: TLargeInteger;
  PrevState: TTokenPrivileges;
  Return: DWORD;
begin
  PreviousState := True;
  if (GetVersion() > $80000000) then
    // Win9x
    Result := ERROR_SUCCESS
  else
  begin
    // WinNT
    if not OpenProcessToken(GetCurrentProcess(), MAXIMUM_ALLOWED, Token) then
      Result := GetLastError()
    else
    try
      if not LookupPrivilegeValue(nil, Privilege, Luid) then
        Result := GetLastError()
      else
      begin
        NewState.PrivilegeCount := 1;
        NewState.Privileges[0].Luid := Luid;
        if EnablePrivilege then
          NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
        else
          NewState.Privileges[0].Attributes := 0;
        if not AdjustTokenPrivileges(Token, False, NewState,
          SizeOf(TTokenPrivileges), PrevState, Return) then
          Result := GetLastError()
        else
        begin
          Result := ERROR_SUCCESS;
          PreviousState :=
            (PrevState.Privileges[0].Attributes and SE_PRIVILEGE_ENABLED <> 0);
        end;
      end;
    finally
      CloseHandle(Token);
    end;
  end;
end;
 {---------------------------------}
function RegSaveKeyToFile(Key: HKEY; const SubKey, FileName: string): DWORD;
const
  SE_BACKUP_NAME = 'SeBackupPrivilege';
var
  Return: DWORD;
  PreviousState: Boolean;
  KeyHandle: HKEY;
begin
  Return := SetPrivilege(SE_BACKUP_NAME, True, PreviousState);
  if (Return <> ERROR_SUCCESS) then
    Result := Return
  else
  try
    KeyHandle := 0;
    Result := RegOpenKeyEx(Key, PChar(SubKey), 0, MAXIMUM_ALLOWED, KeyHandle);
    if (Result = ERROR_SUCCESS) then
    try
      Result := RegSaveKey(KeyHandle, PChar(FileName), nil);
    finally
      RegCloseKey(KeyHandle);
    end;
  finally
    if (not PreviousState) then
      SetPrivilege(SE_BACKUP_NAME, PreviousState, PreviousState);
  end;
end; 
  {---------------------------------}
function RegLoadKeyFromFile(Key: HKEY; const SubKey, FileName: string): DWORD;
const
  SE_RESTORE_NAME = 'SeRestorePrivilege';
var
  Return: DWORD;
  PreviousState: Boolean;
  KeyHandle: HKEY;
begin
  Return := SetPrivilege(SE_RESTORE_NAME, True, PreviousState);
  if (Return <> ERROR_SUCCESS) then
    Result := Return
  else
  try
    KeyHandle := 0;
    Result := RegOpenKeyEx(Key, PChar(SubKey), 0, MAXIMUM_ALLOWED, KeyHandle);
    if (Result = ERROR_SUCCESS) then
    try
      Result := RegLoadKey(Key,PChar(Subkey), PChar(FileName));
    finally
      RegCloseKey(KeyHandle);
    end;
  finally
    if (not PreviousState) then
      SetPrivilege(SE_RESTORE_NAME, PreviousState, PreviousState);
  end;
end;
   {---------------------------------}
{zapis do pliku (binarnie!!) }
procedure TForm1.ButtonZapisRegBinarnieClick(Sender: TObject);
begin
RegSaveKeyToFile(HKEY_CURRENT_USER,
  'Software\Borland',
  'c:\test.reg');
end;

{analogicznie}
procedure TForm1.ButtonOdczytRegBinClick(Sender: TObject);
begin
RegLoadKeyFromFile(HKEY_CURRENT_USER, 'Software\Borland','c:\test.reg');
end;

end.

Co do funkcji RegSaveKeyToFile i RegLoadKeyFromFile zalecam ostroznosc !!

[cya]

1 użytkowników online, w tym zalogowanych: 0, gości: 1