Страница 1 из 1

Реестр: Как добавить строковой параметр?

Добавлено: 18 янв 2005, 18:38
drmist
Допустим, я обратился к ключу так:

Код: Выделить всё

var reg:hkey;
begin
RegOpenKeyEx(HKEY_LOCAL_MACHINE,'SOFTWARE\Mirabilis\ICQ\ICQLite',0,KEY_QUERY_VALUE,reg);
Как теперь добавить в него строковой параметром с именем 'megautil' и значением 'stro4ka'?

RegCloseKey(Reg); :)

Добавлено: 19 янв 2005, 11:45
Absurd
В С это так выглядит

const wchar_t string[] = L"stro4ka";
RegSetValueW(reg,L"megautil",REG_SZ,string,lstrlen(string) );

Добавлено: 19 янв 2005, 17:19
drmist
на дельфи я это перевел так:
RegSetValueW(reg,'megautil',REG_SZ,'stro4ka',7);
В результате был создан новый ключ
HKLM\SOFTWARE\Mirabilis\ICQ\ICQLite\megautil с параметром по умолчанию stro4ka, а мне хотелось бы создать новый параметр в ключе ...\ICQLite ...

Добавлено: 19 янв 2005, 18:48
Eugie
В Delphi есть спец.класс TRegistry, можно воспользоваться его методами:

Код: Выделить всё

uses Registry;
...
procedure MyReg_SetStringValue(pRoot: HKEY; pKey, pParam, pValue: String)
begin
  with TRegistry.Create do begin
    try
      RootKey := pRoot;
      Access := KEY_ALL_ACCESS;
      { открыть ключ, если есть, но не создавать, если нет }
      if OpenKey(pKey, False) then begin
        WriteString(pParam, pValue);
        CloseKey();
      end;
    finally
      Free;
  end;
end;
...

// использование
MyReg_SetStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Mirabilis\ICQ\ICQLite', 'megautil', 'stro4ka'); 
PS. Текущий юзер должен обладать достаточными привилегиями, чтобы писать в HKEY_LOCAL_MACHINE. Например, под гостевым аккаунтом не получится.

Добавлено: 19 фев 2005, 16:39
drmist
TRegistry не устраивает. нужно именно с помощью АПИ.

Добавлено: 22 фев 2005, 11:24
Hawk
Пользуйтесь RegSetValueEx
RegSetValueExW(reg,L"megautil",0, REG_SZ,'stro4ka',7);

Добавлено: 22 фев 2005, 22:25
drmist
RegSetValueExW(reg,L"megautil",0, REG_SZ,'stro4ka',7);
Ну это не совсем на дельфи, я перевел это так:

s:='stro4ka';
RegSetValueExW(reg,'megautil',0,REG_SZ,@s,7);

и не зароботало. =((

Добавлено: 23 фев 2005, 20:33
Eugie

Код: Выделить всё

function MyReg_SetString(pRoot: HKEY; pKey, pValue, pStr: String): Boolean;
var hk: HKEY;
    dispos: Dword;
begin
  Result := False;
  try
    if Win32Check(ERROR_SUCCESS = RegCreateKeyEx(pRoot, PChar(pKey), 0, nil,
      REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, nil, hk, @dispos)) then
      Win32Check(ERROR_SUCCESS = RegSetValueEx(hk, pChar(pValue), 0, REG_SZ,
        PChar(pStr), Length(pStr)+1));
    Result := True;
  finally
    RegCloseKey(hk);
  end;
end;
...
...

MyReg_SetString(HKEY_LOCAL_MACHINE, 'SOFTWARE\Mirabilis\ICQ\ICQLite', 'megautil', 'stro4ka');