haha, 
Application.MessageBox(buf,'',MB_OK);这句话有问题,既然是ReadBinaryData,怎能当String用呢?

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      reg:tregistry;
      buf:array of byte;   //动态数组
    begin
      reg:=tregistry.Create;
      reg.RootKey:=HKEY_CURRENT_USER;
      setlength(buf,4);  //设置动态数组的长度
      try
       if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false) then
         if reg.ValueExists('NoDriveTypeAutoRun') then
           reg.ReadBinaryData('NoDriveTypeAutoRun',buf[0],sizeof(buf));
      finally
        setlength(buf,0);
        reg.Free;
      end;
    end;你参考一下这段代码吧,根据单步执行的效果,buf中的值是(149,0,0,0)对应的16进制的值就是(95,0,0,0)。也就是注册表中显示的值