2010-02-10 131 views
2

我需要轉換字符串以將其寫入registry.reg_binary項。Delphi - 將字符串寫入Reg_Binary註冊表項

我有基本碼寫入到密鑰如下:

try 
    rootkey := HKEY_CURRENT_USER; 
    if OpenKey(Key, False) then 
    begin 
     reg.WriteBinaryData('SomeKey', SomeValue, Length(SomeVale)); 
     CloseKey; 
    end; 
finally 
    reg.Free; 
end; 

在上文中,someValue中需要是TEDIT文本字段的十六進制值;

我現在正在使用IntToHex在每個字符的Ord值上轉換TEdit.text。這給了我授予此假定您的字符串只包含ANSI數據, 但如果你想看起來像什麼,我想寫一個字符串...

在這一點上我很爲難......

回答

2

寫一個字符串到註冊表值作爲二進制值,那麼你的邏輯如下更改將工作:

var 
    EdStr : AnsiString; 
: 
    EdStr := AnsiString(Edit1.Text); // de-unicode 
    reg.WriteBinaryData('SomeKey', EdStr[1], Length(EdStr)); 
+0

感謝您的支持 - 我仍然需要使用#00填充字符串以獲取接收應用程序所需的格式,但是這樣做很厲害! – 2010-02-11 10:19:05

6

如果你想要寫一個字符串,那麼你應該叫WriteString

reg.WriteString('SomeKey', SomeValue); 

如果您有整數,請致電WriteInteger

IntValue := StrToInt(SomeValue); 
reg.WriteInteger('SomeKey', IntValue); 

如果你有真正的二進制數據,那麼它不應該的問題是什麼樣子 - 十六進制或什麼的。致電WriteBinaryData並完成它。數據的實際外觀並不重要,因爲您不必以此格式閱讀它。稍後您將使用ReadBinaryData來閱讀它,並且它將填充您的緩衝區,其中包含您在寫入時所用的任何格式的字節。

IntValue := StrToInt(SomeValue); 
reg.WriteBinaryValue('SomeKey', IntValue, SizeOf(IntValue)); 

這會將整數的所有四個字節寫入註冊表中作爲二進制值。

當Windows註冊表編輯器向您顯示密鑰的值時,它可能會以十六進制顯示每個字節,但這只是顯示格式。這並不意味着您必須在將數據添加到註冊表之前將其數據格式化。

+0

不幸的是並非如此。更改我的代碼以使用WriteString將註冊表中的項更改爲接收應用程序無法寫入的REG_SZ項。 RegEdit將REG_SZ鍵顯示爲純文本,而不是查看其他程序輸入的詳細信息時看到的十六進制值。 真正文本值的StrToInt當然會炸掉 – 2010-02-11 10:08:44