Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Delphi Registry

-=[3 травня 2004 р.]=-
Дрова!

Почему ключик в файл не пишется???

Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.SaveKey('Software','d:\1') then ShowMessage('OK!');
finally
Reg.Free;
inherited;
end;

--
-=[ -B0rM@N- ]=- ICQ: 239-535-374
~Вечер (0.00) [*********-Утро (8.00)-########### ] Вечер (0.00)~
mailto:BormanSubscri***@u*****.net - т0льк0 для р@((ь|лkи ,)
mailto:Boris_Kolupa***@u*****.net - личнь|й [Redirect to Mobile Phone]
Номер выпуска : 3005
Возраст листа : 229 (дней)
Количество подписчиков : 394
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/140674
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   "-=[-B0rMaN-]=-" Mon, 3 May 2004 18:56:28 +0300 (#140674)

 

Ответы:

Тема: Delphi Registry

Нужно открыть его
OpenKey(RegPath,true);

Ответить   Sat, 8 May 2004 09:09:02 +0400 (#140731)

 

Здоровеньки булы, Surin_bp!

8 мая 2004 г., суббота, 10:09:02 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Delphi Registry",
в котором сообщалось следующее:

Ничего открывать не надо - SaveKey просто не работает в NT-хах (Delphi 5)
Кстати, проверил - в Win98 - работает.

Ответить   Томилов Александр Sat, 8 May 2004 16:49:53 +0500 (#140871)

 

Тема: Delphi Registry

Есть хорошая статья Федорова:
http://www.proglib.ru/articles/art0000040.asp

Ответить   Sat, 8 May 2004 09:10:40 +0400 (#140732)

 

Здоровеньки булы, -=[-B0rMaN-]=-!

3 мая 2004 г., понедельник, 20:56:28 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Delphi Registry",
в котором сообщалось следующее:

SaveKey - лажа полная, IMHO будет работать только в win9x/Me (и то я
не уверен, а проверять лень) в NT-хах работать не будет по определению.
Сразу определюсь:
а) файл в который будет сохраняться ключ - это не тот
который получается сохранением в regedit;
б) Если ключ открыт - сохранит, но загрузить не сможет (а открытым
держать ключ может кто угодно)
в) В NT-хах (NT 4.0, Win2000, WinXP) нужно сидеть либо под админом,
либо под системой, либо под оператором архива. В Win9x/Me - не
пробовал.

Если пункт а) тебя не устраивает юзай следующее:
Save.bat:
regedit /e Save.reg HKEY_CURRENT_USER\SoftWare\Borland

Если пункты а) и в) не проблема, то держи код:

function GetErrorMessage(ErrorCode: integer): string;
const BUFFER_SIZE = 1024;
var lpMsgBuf: Pchar;
LangID: DWORD;
begin
lpMsgBuf := AllocMem(BUFFER_SIZE);
LangID := GetUserDefaultLangID;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS,
nil, ErrorCode, LangID, lpMsgBuf, BUFFER_SIZE, nil);
Result := StrPas(lpMsgBuf);
FreeMem(lpMsgBuf);
end;

function GetBackupPrivileges: DWORD; stdcall;
var hToken: THandle;
tp: _TOKEN_PRIVILEGES;
returnLength: Cardinal;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken)
then
if LookupPrivilegeValue(nil, 'SeBackupPrivilege', tp.Privileges[0].Luid)
then
begin
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, false, tp, 0, nil, returnLength)
end;
Result := GetLastError;
end;

function SaveKey(RootKey: HKEY; Key: String; FileName: string): DWORD;
var regKey: HKEY;
begin
if FileExists(FileName) then DeleteFile(FileName);
Result := RegOpenKeyEx(RootKey, PChar(Key), 0, KEY_ALL_ACCESS, regKey);
if Result = ERROR_SUCCESS then
try
Result := GetBackupPrivileges;
if Result = ERROR_SUCCESS
then Result := RegSaveKey(regKey, PChar(FileName), nil);
finally
RegCloseKey(regKey);
end;
end;

function GetRestorePrivileges: DWORD; stdcall;
var hToken: THandle;
tp: _TOKEN_PRIVILEGES;
returnLength: Cardinal;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken)
then
if LookupPrivilegeValue(nil, 'SeRestorePrivilege', tp.Privileges[0].Luid)
then
begin
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, false, tp, 0, nil, returnLength)
end;
Result := GetLastError;
end;

function LoadKey(RootKey: HKEY; Key: String; FileName: string): DWORD;
var regKey: HKEY;
begin
Result := RegOpenKeyEx(RootKey, PChar(Key), 0, KEY_ALL_ACCESS, regKey);
if Result = ERROR_FILE_NOT_FOUND then
Result := RegCreateKey(RootKey, PChar(Key), regKey);
if Result = ERROR_SUCCESS then
try
Result := GetRestorePrivileges;
if Result = ERROR_SUCCESS
then Result := RegRestoreKey(regKey, PChar(FileName), 0);
finally
RegCloseKey(regKey);
end;
end;

procedure TForm1.SaveButtonClick(Sender: TObject);
begin
// ShowMessage(GetErrorMessage(SaveKey(HKEY_CURRENT_USER, 'Software\1', 'd:\reg')));
ShowMessage(
GetErrorMessage(
SaveKey(
HKEY_CURRENT_USER,
'Software\Borland\Delphi',
ExtractFilePath(Paramstr(0))+'reg'
)
)
);
end;

procedure TForm1.LoadButtonClick(Sender: TObject);
begin
// ShowMessage(GetErrorMessage(LoadKey(HKEY_CURRENT_USER, 'Software\1', 'd:\reg')));
ShowMessage(
GetErrorMessage(
LoadKey(
HKEY_CURRENT_USER,
'Software\Borland\Delphi',
ExtractFilePath(Paramstr(0))+'reg'
)
)
);
end;

Ответить   Томилов Александр Sat, 8 May 2004 15:13:48 +0500 (#140839)