Code: |
{******************************************} {3. by Michael Winter }
procedure RaiseWin32Error(Code: Cardinal); var Error: EWin32Error; begin Error := EWin32Error.CreateResFmt(@SWin32Error, [Code, SysErrorMessage(Code)]); Error.ErrorCode := Code; raise Error; end;
// Write REG_MULTI_SZ procedure TForm1.Button1Click(Sender: TObject); const Str = 'multiple'#0'strings'#0'in one'#0'registry'#0'value'#0; var Reg: TRegistry; Res: Integer; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; if not Reg.OpenKey('\Software\Test\RegMultiSzTest', true) then raise Exception.Create('Can''t open key'); Res := RegSetValueEx( Reg.CurrentKey, // handle of key to set value for 'TestValue', // address of value to set 0, // reserved REG_MULTI_SZ, // flag for value type PChar(Str), // address of value data Length(Str) + 1); // size of value data if Res <> ERROR_SUCCESS then RaiseWin32Error(Res); finally Reg.Free; end; end;
// Read REG_MULTI_SZ procedure TForm1.Button2Click(Sender: TObject); var Reg: TRegistry; DataType: Cardinal; DataSize: Cardinal; Res: Integer; Str: String; i: Integer; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; if not Reg.OpenKeyReadOnly('\Software\Test\RegMultiSzTest') then raise Exception.Create('Can''t open key'); DataSize := 0; Res := RegQueryValueEx( Reg.CurrentKey, // handle of key to query 'TestValue', // address of name of value to query nil, // reserved @DataType, // address of buffer for value type nil, // address of data buffer @DataSize); // address of data buffer size if Res <> ERROR_SUCCESS then RaiseWin32Error(Res); if DataType <> REG_MULTI_SZ then raise Exception.Create('Wrong data type'); SetLength(Str, DataSize - 1); if DataSize > 1 then begin Res := RegQueryValueEx( Reg.CurrentKey, // handle of key to query 'TestValue', // address of name of value to query nil, // reserved @DataType, // address of buffer for value type PByte(Str), // address of data buffer @DataSize); // address of data buffer size if Res <> ERROR_SUCCESS then RaiseWin32Error(Res); end;
for i := Length(Str) downto 1 do if Str[i] = #0 then Str[i] := #13; ShowMessage(Str); finally Reg.Free; end; end; |
Взято с сайта https://www.swissdelphicenter.ch/en/tipsindex.php
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!