Страница 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');