PDA

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



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


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

RegCloseKey(Reg); :)

Absurd
19.01.2005, 11:45
В С это так выглядит

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

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

Eugie
19.01.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
19.02.2005, 16:39
TRegistry не устраивает. нужно именно с помощью АПИ.

Hawk
22.02.2005, 11:24
Пользуйтесь RegSetValueEx
RegSetValueExW(reg,L"megautil",0, REG_SZ,'stro4ka',7);

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

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

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

Eugie
23.02.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');