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

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Ответить
drmist
Сообщения: 32
Зарегистрирован: 03 авг 2004, 22:34

18 янв 2005, 18:38

Допустим, я обратился к ключу так:

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

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

RegCloseKey(Reg); :)
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

19 янв 2005, 11:45

В С это так выглядит

const wchar_t string[] = L"stro4ka";
RegSetValueW(reg,L"megautil",REG_SZ,string,lstrlen(string) );
2B OR NOT(2B) = FF
drmist
Сообщения: 32
Зарегистрирован: 03 авг 2004, 22:34

19 янв 2005, 17:19

на дельфи я это перевел так:
RegSetValueW(reg,'megautil',REG_SZ,'stro4ka',7);
В результате был создан новый ключ
HKLM\SOFTWARE\Mirabilis\ICQ\ICQLite\megautil с параметром по умолчанию stro4ka, а мне хотелось бы создать новый параметр в ключе ...\ICQLite ...
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

19 янв 2005, 18:48

В 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. Например, под гостевым аккаунтом не получится.
drmist
Сообщения: 32
Зарегистрирован: 03 авг 2004, 22:34

19 фев 2005, 16:39

TRegistry не устраивает. нужно именно с помощью АПИ.
Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

22 фев 2005, 11:24

Пользуйтесь RegSetValueEx
RegSetValueExW(reg,L"megautil",0, REG_SZ,'stro4ka',7);
drmist
Сообщения: 32
Зарегистрирован: 03 авг 2004, 22:34

22 фев 2005, 22:25

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

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

и не зароботало. =((
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

23 фев 2005, 20:33

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

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'); 
Ответить