📄 main.pas
字号:
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 + -