gpt4 book ai didi

delphi - 为什么RegSetValueEx只添加半个字符串?

转载 作者:行者123 更新时间:2023-12-03 15:42:13 28 4
gpt4 key购买 nike

注意:我使用的是 Delphi XE2

我正在尝试添加注册表项。这是我当前的代码:

function AddRegKey(Key:HKEY;Keyname,Value:String):Boolean;
var
phkResult:HKEY;
begin
if RegOpenKeyEx(Key, PWideChar('SOFTWARE\Microsoft\Windows\CurrentVersion\Run'), 0, KEY_SET_VALUE, phkResult) = ERROR_SUCCESS then
begin
Result := (RegSetValueEx(phkResult, PWideChar(KeyName), 0, REG_SZ, PWideChar(Value), Length(Value)) = ERROR_SUCCESS);
RegCloseKey(phkResult);
end
else Result:=False;
end;

begin
If AddRegKey(HKEY_CURRENT_USER,'TestTest','123456789') Then
MessageBox(0,'Success','Test',0);
end.

这会导致以下结果:

enter image description here

仅添加前四个字符

但是当我将“Value”参数更改为:

123456789123456789

然后添加:

123456789

因此,由于某种原因,它似乎只添加了给定值的一半。我该如何解决这个问题?

我是否为 RegSetValueEx 中的 *lpData 参数传递了错误的数据类型?

最佳答案

Read the documentation 。 RegSetValueEx() 的最后一个参数是字节计数,但您向其传递的是字符计数(甚至不是正确的计数 - 您必须包含 null 终止符)。 SizeOf(WideChar) 为 2,因此您告诉 RegSetValueEx() 仅写入一半的字符串数据。您需要解决这个问题,例如:

function AddRegKey(Key:HKEY; Keyname, Value: String): Boolean;
var
phkResult: HKEY;
begin
Result := False;
if RegOpenKeyEx(Key, PChar('SOFTWARE\Microsoft\Windows\CurrentVersion\Run'), 0, KEY_SET_VALUE, phkResult) = ERROR_SUCCESS then
begin
Result := RegSetValueEx(phkResult, PChar(KeyName), 0, REG_SZ, PChar(Value), (Length(Value) + 1) * SizeOf(Char)) = ERROR_SUCCESS;
RegCloseKey(phkResult);
end;
end;

话虽如此,您可能会考虑使用 TRegistry 类,它会为您处理这些详细信息:

uses
..., Registry;

function AddRegKey(Key: HKEY; Keyname, Value: String): Boolean;
var
Reg: TRegistry;
begin
Result := False;
try
Reg := TRegistry.Create(KEY_SET_VALUE);
try
Reg.RootKey := Key;
if Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True) then
try
Reg.WriteString(KeyName, Value);
Result := True;
finally
Reg.CloseKey;
end;
finally
Reg.Free;
end;
except
end;
end;

关于delphi - 为什么RegSetValueEx只添加半个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13280536/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com