Работа с реэстром!

  • Автор темы misterio
  • Дата начала
M

misterio

Гость
#1
Вообщем впредь вопросы можно задавать тут....

Пожалуй я начну:

1) Объяните мне как создать раздел в реэстре? Я пишу так :

Код:
const key_path = 'блаблабла';
var hk : HKEY;
...
RegCreateKey (HKEY_LOCAL_MACHINE,key_path,&hk);
Естественно ничего не выходит..потому что я не пойму зачем тут &hk? И что оно дает?

2) Как создать строковый параметр с именем "blablabla" с описанием(необязательно).

Пишу так :

Код:
RegSetValueEx(hk,'StringValue',0, REG_SZ, <не пойму что тут> , <и тут>);
Чем можете помочь?
 
M

misterio

Гость
#2
Не люблю использовать компоненты...вопрос остаеться в силе!
 
M

misterio

Гость
#4
В том то и фишка что не Delphi пользуюсь а CodeGear RAD Studio 2007. И в демосах я в упор не нашел слова TRegistry. А справка там конченая...ничего путевого в ней нету вообще!!
 
M

misterio

Гость
#5
Хорошо...порпобовал с TRegistry.

Все получилось, но....как создать параметр "блаблабла" типа REG_MULTI_SZ и REG_DWORD???.
Функций WriteDword & WriteMultiString нету....
 
B

brink

Гость
#6
Хорошо...порпобовал с TRegistry.

Все получилось, но....как создать параметр "блаблабла" типа REG_MULTI_SZ и REG_DWORD???.
Функций WriteDword & WriteMultiString нету....
Для REG_DWORD используй WriteInteger.
А вот с REG_MULTI_SZ мне и самому интересно, пишу на Builder С++, но там тоже лажа с записью в этот тип.
Где-то читал, что есть какой-то дополнительный TRegistry для делфи который может работать с этим типом. Но пока не нашёл.

Неужели никто не знает как это делается? :)
 
M

misterio

Гость
#7
Где-то читал, что есть какой-то дополнительный TRegistry для делфи который может работать с этим типом. Но пока не нашёл.
Нима такого компонента. Есть модуль

[codebox]unit Reg;
{$R-,T-,H+,X+}

interface

uses Registry, Classes, Windows, Consts, SysUtils;

type

TReg = class(TRegistry)
public
procedure ReadStringList(const name : string; list : TStringList);
procedure WriteStringList(const name : string; list : TStringList);
end;

implementation

//*** TReg *********************************************************************
//------------------------------------------------------------------------------
// Запись TStringList ввиде значения типа REG_MULTI_SZ в реестр
//------------------------------------------------------------------------------
procedure TReg.WriteStringList(const name : string; list : TStringList);
var
Buffer : Pointer;
BufSize : DWORD;
i, j, k : Integer;
s : string;
p : PChar;
begin
{подготовим буфер к записи}
BufSize := 0;
for i:=0 to list.Count-1 do
inc(BufSize, Length(list)+1);
inc(BufSize);
GetMem(Buffer, BufSize);
k := 0;
p := Buffer;
for i:=0 to list.Count-1 do begin
s := list;
for j:=0 to Length(s)-1 do begin
p[k] := s[j+1];
inc(k);
end;
p[k] := chr(0);
inc(k);
end;
p[k] := chr(0);

{запись в реестр}
if RegSetValueEx(CurrentKey, PChar(name), 0, REG_MULTI_SZ, Buffer, BufSize) <> ERROR_SUCCESS then
raise ERegistryException.CreateResFmt(@SRegSetDataFailed, [name]);
end;
end.[/codebox]

Кстате он тоже с байдой : @SRegSetDataFailed - вот тут не хочет компилироваться.
Можно конечно записать так :

Код:
 RegSetValueEx(CurrentKey, PChar(name), 0, REG_MULTI_SZ, Buffer, BufSize)
- без проверки.

Но все равно, потом в основной программе подключать дополнительный модуль, создавать новую переменную типа TReg...кароче ввесь смысл написать маленькое приложение пропадает.

Изначально я и справшивал как работать без TRegistry...



Вот я еще нашел такой модуль, довольно-таки интересно.

Посмотреть вложение ApiRegistry_Module.zip
 
M

misterio

Гость
#8
Все проблема решена. Всем спасибо.

@SRegSetDataFailed - где про нее можно почитать? Кроме как в справке.
 

jostya

New Member
06.02.2012
1
0
#9
для того что бы компилировался этот модуль необходимо в раздел uses добавить RTLConsts, там определенна SRegSetDataFailed и многие другие