-2

我有一个 Delphi XE2 项目来检查注册表项 MyCompanyName\1中的一个十六进制值。如果十六进制值13,那么会有一些消息,否则会有一些其他消息。 我的项目

所以我定义了以下代码:

procedure TMainForm.BitBtn01Click(Sender: TObject);
var
  RegistryEntry : TRegistry;
begin
  RegistryEntry := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
  RegistryEntry.RootKey := HKEY_LOCAL_MACHINE;
  if (RegistryEntry.KeyExists('SOFTWARE\MyCompanyName\1\')) then
    begin
      if (RegistryEntry.OpenKey('SOFTWARE\MyCompanyName\1\',true)) then
        begin
          if (RegistryEntry.ReadString('SettingValue') = '0x00000013')  then
            begin
              Memo01.Lines.Add('SettingHexadeciamlValue exist properly')
            end
          else
            begin
              Memo01.Lines.Add('SettingHexadeciamlValue does not exist properly')
            end;
        end
      else
        begin
          if (RegistryEntry.OpenKey('SOFTWARE\MyCompanyName\1\',false)) then
            begin
              Memo01.Lines.Add('Unable to read RegistryKey ''MyCompanyName''Exiting.......')
            end;
        end;

    end
  else
    begin
      Memo01.Lines.Add('RegistryKey ''MyCompanyName'' does not exist')
    end;
end;  

编译后,当我运行应用程序AsAdministrator时,我收到错误提示Invalid data type for 'SettingValue'

4

1 回答 1

8

这些值是整数,而不是字符串,因此您应该使用ReadInteger,而不是ReadString

现在,十六进制只是向用户呈现整数的一种方式,即创建整数的“文本表示”的方法。例如,整数 62 有许多不同的文本表示:

62 (decimal)
LXII (Roman numerals)
3E (hexadecimal)
111110 (binary)
Sextiotvå (Swedish words)

等等

如果您想以十六进制显示此数字,就像注册表编辑器 ( regedit.exe) 所做的那样,您可以使用该IntToHex函数创建参数整数的十六进制文本表示。例子:

var
  myvalue: integer;

...

myvalue := ReadInteger('SettingValue');
ShowMessage(IntToHex(myvalue, 8));
于 2013-04-25T17:19:32.653 回答