操作注册表 类型为REG_MULTI_SZ如何读写??(100分)

  • 主题发起人 主题发起人 heming
  • 开始时间 开始时间
H

heming

Unregistered / Unconfirmed
GUEST, unregistred user!
操作注册表,发现类型为REG_MULTI_SZ,这是什么类型,如何读写?(操作系统WIN2000)
使用二进制写入方法 WriteBinaryData()不能成功
 
二进制需要转换成串的形式吧!?
 
请举例说明。
 
WriteBinaryData()是正确的方法,因为有些不可显示的字符,有这个才能保证写入的内容正确
var
buff: array [0..15] of char;

......
// 给buff赋值
WriteBinaryData('KeyName', buff, 16);

这样完全可以写入注册表

 
类型为:REG_MULTI_SZ
不是:REG_Binary类型
用WriteBinaryData('KeyName', buff, 16);写入的是REG_Binary
我试过,不成功!
 
自己改成Delphi的吧,肯定成功!

AnsiString TfrmMain::GetMainBoardInfo()
{
const MY_BUFSIZE = 256;
HKEY hKey;
TCHAR szProductType[MY_BUFSIZE];
DWORD dwBufLen = MY_BUFSIZE;

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("Hardware//Description//System"),
0,
KEY_QUERY_VALUE,
&hKey) != ERROR_SUCCESS) return "";

RegQueryValueEx(hKey,
TEXT("SystemBiosVersion"),
NULL,
NULL,
(LPBYTE)szProductType,
&dwBufLen);

RegCloseKey(hKey);
return AnsiString(szProductType);
}
 

uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
fReg: TRegistry;
fBuffer:array[0..1024] of char;
aBuffer:array[0..1024] of char;
begin
fReg := TRegistry.Create;
StrLCopy(fBuffer,pchar('大富翁的小伙计!'),Sizeof(fBuffer));
try
fReg.RootKey := HKEY_CURRENT_USER;
if fReg.OpenKey('/Software/BinaryData', True) then
begin
fReg.WriteBinaryData('MyApp',fBuffer,Sizeof(fBuffer));
fReg.ReadBinaryData('MyApp',aBuffer,Sizeof(aBuffer));
ShowMessage(String(aBuffer));
end;
finally
fReg.CloseKey;
fReg.Free;
end;
end;
 
传抄!验证可以!ok!

RegInfo := tRegistry.Create;
try
RegInfo.RootKey := HKEY_LOCAL_MACHINE;

if RegInfo.OpenKey('SYSTEM/CurrentControlSet/Services/Tcpip/Parameters/Interfaces/', False) then
begin
WriteString := 'abc' + #0#0;
WriteError := RegSetValueEx(RegInfo.CurrentKey, PChar('HEX1500'), 0, REG_MULTI_SZ, @WriteString[1], Length(WriteString));
if WriteError <> ERROR_SUCCESS then
begin
ErrorString := ErrorString + '信息修改出错1!';
end;
end;
finally
reginfo.Free;
end;
 
谢谢wql,高手就是高手
 
后退
顶部