⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 一个很不错的系统信息控件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
procedure TappRBE.About1Click(Sender: TObject);
begin
  ShellAbout(Handle,PChar(Application.Title+' '+EXEVersionInfo.Version),PChar(EXEVersionInfo.Copyright),Application.Icon.Handle);
end;

procedure TappRBE.mmFindTextClick(Sender: TObject);
begin
  fd.Execute;
end;

procedure TappRBE.fdFind(Sender: TObject);
var
  b,i: DWORD;
  p: integer;
  s,f: string;
  c: Char;
begin
  LastSearchmethod:=smText;
  b:=CurrentAddress+1;
  f:=fd.FindText;
  if not(frMatchCase in fd.Options) then
    f:=Uppercase(f);
  p:=-1;
  for i:=b to StartAddress+Size do begin
    c:=Chr(SMBIOS.SMBIOS_DMA.ByteValue[i]);
    if not(frMatchCase in fd.Options) and (c in ['a'..'z']) then
      c:=UpCase(c);
    if (c=f[1]) then begin
      s:=SMBIOS.SMBIOS_DMA.ArrayValue[i,Length(f)];
      if not(frMatchCase in fd.Options) then
        s:=UpperCase(s);
      p:=Pos(f,s);
      if p>0 then begin
        p:=p+i-1;
        Break;
      end;
    end;
  end;
  if p>=StartAddress then
    GotoAddress(p)
  else
    MessageDlg('Text not found.',mtInformation,[mbOK],0);
end;

procedure TappRBE.Findnext1Click(Sender: TObject);
begin
  if LastSearchMethod=smSequence then
    FindSeq
  else begin
    if fd.FindText<>'' then
      fdFind(nil)
    else
      fd.Execute;
  end;
end;

procedure TappRBE.fdShow(Sender: TObject);
begin
  fd.FindText:='';
end;

procedure TappRBE.sghexTopLeftChanged(Sender: TObject);
begin
  if sgHex.Focused then
    sgChar.TopRow:=sgHex.TopRow;
end;

procedure TappRBE.sgcharTopLeftChanged(Sender: TObject);
begin
  if sgChar.Focused then
    sgHex.TopRow:=sgChar.TopRow;
end;

procedure TappRBE.sghexKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_RIGHT:
      if (sgHex.Col=sgHex.ColCount-1) and (sgHex.Row<sgHex.RowCount-1) then begin
        sgHex.Row:=sgHex.Row+1;
        sgHex.Col:=1;
        Key:=0;
      end;
    VK_LEFT:
      if (sgHex.Col=1) and (sgHex.Row>1) then begin
        sgHex.Row:=sgHex.Row-1;
        sgHex.Col:=sgHex.ColCount-1;
        Key:=0;
      end;
  end;
end ;

procedure TappRBE.sgcharKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_RIGHT:
      if (sgChar.Col=sgChar.ColCount-1) and (sgChar.Row<sgChar.RowCount-1) then begin
        sgChar.Row:=sgChar.Row+1;
        sgChar.Col:=0;
        Key:=0;
      end;
    VK_LEFT:
      if (sgChar.Col=0) and (sgChar.Row>1) then begin
        sgChar.Row:=sgChar.Row-1;
        sgChar.Col:=sgChar.ColCount-1;
        Key:=0;
      end;
  end;
end;

procedure TappRBE.Details1Click(Sender: TObject);
var
  i: Integer;
begin
  with TwndDetails.Create(Self) do begin
    with SMBIOS do begin
      eSMVer.Text:=Version;
      eSMTables.Text:=Format('%d',[Length(StructTables)]);

      eBIOSVendor.Text:=BIOSVendor;
      eBIOSVer.Text:=BIOSVersion;
      eBIOSDate.Text:=BIOSDate;
      eBIOSSize.Text:=Format('%d',[BIOSSize]);

      eSysMod.Text:=SystemModel;
      eSysMan.Text:=SystemManufacturer;
      eSysVer.Text:=SystemVersion;
      eSysSer.Text:=SystemSerial;
      eSysID.Text:=SystemUUID;

      eMBMod.Text:=MainBoardModel;
      eMBMan.Text:=MainBoardManufacturer;
      eMBVer.Text:=MainBoardVersion;
      eMBSer.Text:=MainBoardSerial;
      eMBAT.Text:=MainBoardAssetTag;
      eMBLIC.Text:=MainBoardLocationInChassis;

      eCHMod.Text:=ChassisTypes[ChassisModel];
      eCHMan.Text:=ChassisManufacturer;
      eCHVer.Text:=ChassisVersion;
      eCHSer.Text:=ChassisSerial;
      eCHAT.Text:=ChassisAssetTag;

      eMCI.Text:=Format('%s / %s',[InterleaveSupports[MemCtrlCurrentInterleave],
                                   InterleaveSupports[MemCtrlSupportedInterleave]]);
      eMCSS.Text:=GetMemorySpeedStr(MemCtrlSupportedSpeeds);
      eMCST.Text:=GetMemoryTypeStr(MemCtrlSupportedTypes);
      eMCSV.Text:=GetMemoryVoltageStr(MemCtrlSupportedVoltages);
      eMCMS.Text:=Format('%d',[MemCtrlMaxSize]);
      eMCSC.Text:=Format('%d',[MemCtrlSlotCount]);

      lvProcs.Items.Clear;
      for i:=0 to ProcessorCount-1 do
        with lvProcs.Items.Add do begin
          Caption:=Processor[i].Manufacturer;
          SubItems.Add(Processor[i].Version);
          SubItems.Add(Processor[i].Socket);
          SubItems.Add(Upgrades[Processor[i].Upgrade]);
          SubItems.Add(Format('%1.1f V',[Processor[i].Voltage]));
          SubItems.Add(Format('%d MHz',[Processor[i].Frequency]));
          SubItems.Add(Format('%d MHz',[Processor[i].ExternalClock]));
          SubItems.Add(Processor[i].SerialNumber);
          SubItems.Add(Processor[i].AssetTag);
          SubItems.Add(Processor[i].PartNumber);
          ImageIndex:=-1;
        end;

      lvCache.Items.Clear;
      for i:=0 to CacheCount-1 do
        with lvCache.Items.Add do begin
          Caption:=Cache[i].Designation;
          SubItems.Add(CacheTypes[Cache[i].Typ]);
          SubItems.Add(CacheAssociativities[Cache[i].Associativity]);
          SubItems.Add(SRAMTypes[Cache[i].SRAMType]);
          SubItems.Add(Format('%d KB',[Cache[i].InstalledSize]));
          SubItems.Add(Format('%d KB',[Cache[i].MaxSize]));
          SubItems.Add(Format('%d ns',[Cache[i].Speed]));
          ImageIndex:=-1;
        end;

      lvMem.Items.Clear;
      for i:=0 to MemoryModuleCount-1 do
        with lvMem.Items.Add do begin
          Caption:=MemoryModule[i].Socket;
          SubItems.Add(GetMemoryTypeStr(MemoryModule[i].Types));
          SubItems.Add(Format('%d MB',[MemoryModule[i].Size]));
          SubItems.Add(Format('%d ns',[MemoryModule[i].Speed]));
          ImageIndex:=-1;
        end;

      lvMemDev.Items.Clear;
      for i:=0 to MemoryDeviceCount-1 do
        with lvMemDev.Items.Add do begin
          Caption:=MemoryDevice[i].DeviceLocator;
          SubItems.Add(MemoryDevice[i].BankLocator);
          SubItems.Add(MemoryDeviceTypes[MemoryDevice[i].Device]);
          SubItems.Add(GetMemoryTypeDetailsStr(MemoryDevice[i].TypeDetails));
          SubItems.Add(MemoryFormFactors[MemoryDevice[i].FormFactor]);
          SubItems.Add(Format('%d MB',[MemoryDevice[i].Size]));
          SubItems.Add(Format('%d MHz',[MemoryDevice[i].Speed]));
          SubItems.Add(Format('%d b',[MemoryDevice[i].TotalWidth]));
          SubItems.Add(Format('%d b',[MemoryDevice[i].DataWidth]));
          SubItems.Add(MemoryDevice[i].Manufacturer);
          SubItems.Add(MemoryDevice[i].SerialNumber);
          SubItems.Add(MemoryDevice[i].AssetTag);
          SubItems.Add(MemoryDevice[i].PartNumber);
          ImageIndex:=-1;
        end;

      lvPort.Items.Clear;
      for i:=0 to PortCount-1 do
        with lvPort.Items.Add do begin
          Caption:=PortTypes[Port[i].Typ];
          SubItems.Add(Port[i].InternalDesignator);
          SubItems.Add(ConnectorTypes[Port[i].InternalConnector]);
          SubItems.Add(Port[i].ExternalDesignator);
          SubItems.Add(ConnectorTypes[Port[i].ExternalConnector]);
          ImageIndex:=-1;
        end;

      lvSlot.Items.Clear;
      for i:=0 to SystemSlotCount-1 do
        with lvSlot.Items.Add do begin
          Caption:=SlotTypes[SystemSlot[i].Typ];
          SubItems.Add(DataBusTypes[SystemSlot[i].DataBus]);
          SubItems.Add(SlotUsages[SystemSlot[i].Usage]);
          SubItems.Add(SlotLengths[SystemSlot[i].Length]);
          ImageIndex:=-1;
        end;

      lvOBD.Items.Clear;
      for i:=0 to OnBoardDeviceCount-1 do
        with lvOBD.Items.Add do begin
          Caption:=OnBoardDevice[i].DeviceName;
          SubItems.Add(OnBoardDeviceTypes[OnBoardDevice[i].Typ]);
          if OnBoardDevice[i].Status then
            SubItems.Add('Enabled')
          else
            SubItems.Add('Disabled');
          ImageIndex:=-1;
        end;

      lvTP.Items.Clear;
      for i:=0 to TemperatureProbeCount-1 do
        with lvTP.Items.Add do begin
          Caption:=TemperatureProbe[i].Description;
          SubItems.Add(LocationTypes[TemperatureProbe[i].Location]);
          SubItems.Add(StatusTypes[TemperatureProbe[i].Status]);
          SubItems.Add(Format('%1.1f',[TemperatureProbe[i].Value/10]));
          SubItems.Add(Format('%1.1f - %1.1f',[TemperatureProbe[i].Min/10,TemperatureProbe[i].Max/10]));
          SubItems.Add(Format('%1.3f',[TemperatureProbe[i].Resolution/1000]));
          SubItems.Add(Format(#177'%1.1f',[TemperatureProbe[i].Tolerance/10]));
          SubItems.Add(Format(#177'%1.2f',[TemperatureProbe[i].Accuracy/100]));
          ImageIndex:=-1;
        end;

      lvTables.Items.Clear;
      for i:=0 to High(StructTables) do
        with lvTables.Items.Add do begin
          Caption:=Format('Type %d: %s',[StructTables[i].Indicator,StructTables[i].Name]);
          SubItems.Add(Format('%d',[StructTables[i].Length]));
          SubItems.Add(Format('%4.4x',[StructTables[i].Handle]));
          ImageIndex:=-1;
        end;
    end;
    ShowModal;
    Free;
  end;
end;

procedure TappRBE.mmFindSeqClick(Sender: TObject);
begin
  if InputQuery('Find Sequence...','Sequence as hex string',Sequence) then
    FindSeq;
end;

procedure TappRBE.FindSeq;
var
  a: DWORD;
begin
  LastSearchmethod:=smSequence;
  a:=SMBIOS.SMBIOS_DMA.FindSequence(CurrentAddress+1,Sequence);
  if a>0 then
    Gotoaddress(a)
  else
    MessageDlg('Sequence not found.',mtInformation,[mbOK],0);
end;

procedure TappRBE.mmXMLClick(Sender: TObject);
begin
  ed.Filename:=Format('%s %s %s %s',[Trim(SMBIOS.SystemModel),Trim(SMBIOS.BIOSVendor),Trim(SMBIOS.BIOSVersion),Trim(SMBIOS.BIOSDate)]);
  ed.Filename:=StringReplace(ed.Filename,',',' ',[rfReplaceAll]);
  ed.Filename:=StringReplace(ed.Filename,'/','-',[rfReplaceAll]);
  if Trim(ed.Filename)='' then
    ed.Filename:='unknown';
  ed.Filename:=ed.Filename+'.sis';
  if ed.Execute then
    SMBIOS.SaveToStorage(ed.Filename);
end;

procedure TappRBE.cmSaveDump(Sender: TObject);
{var
  s: string;}
begin
  {if not SelectDirectory('Select folder','',s) then
    Exit;}
  sd.Filename:={IncludeTrailingPathDelimiter(s)+}Format('%s %s %s %s',[Trim(SMBIOS.SystemModel),Trim(SMBIOS.BIOSVendor),Trim(SMBIOS.BIOSVersion),Trim(SMBIOS.BIOSDate)]);
  sd.Filename:=StringReplace(sd.Filename,',',' ',[rfReplaceAll]);
  sd.Filename:=StringReplace(sd.Filename,'/','-',[rfReplaceAll]);
  if Trim(sd.Filename)='' then
    sd.Filename:='unknown';
  sd.Filename:=sd.FileName+extSMBIOS;
  if not sd.Execute then
    Exit;
  SMBIOS.SMBIOS_DMA.SaveToFile(sd.FileName);
  if StartAddress<>0 then
    SMBIOS.BIOS_DMA.SaveToFile(ChangeFileExt(sd.FileName,extBIOS));
end;

procedure TappRBE.mmOpenClick(Sender: TObject);
begin
  if od.Execute then begin
    SMBIOS.ReadLocalMemory:=False;
    SMBIOS.LoadSMBIOSFromFile(od.Filename);
    StartAddress:=SMBIOS.SMBIOS_DMA.StartAddress;
    Size:=SMBIOS.SMBIOS_DMA.MemorySize;
    ReadData;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -