下面这段代码可以试试! type TBus = (ISA, SMBus, VIA686ABus, DirectIO); TSMB = (SMBIntel, SMBAMD, SMBALi); type TSharedData = Record STemperature : array [1..10] of Integer; SVoltage : array [1..10] of Real; SFan : array [1..10] of Integer; SMHZ : Integer; SNrCPU : Byte; SCPUUsage : array [1..4] of Real; end; TSharedInfo = Record SMBM_Version : array [0..10] of Char; SSMB_Base : Word; SSMB_Type : TBus; SSMB_Code : TSMB; SSMB_Addr : Byte; SSMB_Name : array [0..40] of Char; SISA_Base : Word; SChipType : Integer; SVoltageSubType : Byte; end; TSharedHL = Record STempC : array [1..10] of LongInt; STempA : array [1..10] of Extended; STempL : array [1..10] of Real; STempH : array [1..10] of Real; SVoltC : array [1..10] of LongInt; SVoltA : array [1..10] of Extended; SVoltL : array [1..10] of Real; SVoltH : array [1..10] of Real; SFanC : array [1..10] of LongInt; SFanA : array [1..10] of Extended; SFanL : array [1..10] of Real; SFanH : array [1..10] of Real; SStart : array [0..40] of Char; SCurrent : array [0..40] of Char; SCPUC : array [1..4] of LongInt; SCPUA : array [1..4] of Extended; SCPUL : array [1..4] of Real; SCPUH : array [1..4] of Real; end; TSharedName = Record STempName : array [1..10] of array [0..10] of Char; SVoltName : array [1..10] of array [0..10] of Char; SFanName : array [1..10] of array [0..10] of Char; SCPUName : array [0..10] of Char; SCPUUSageName : array [0..10] of Char; end; PSharedData = ^TSharedData; PSharedInfo = ^TSharedInfo; PSharedHL = ^TSharedHL; PSharedName = ^TSharedName; var CPUMhz : Integer; CPUNr : Byte; Temperature : array [1..10] of Integer Voltage : array [1..10] of Real; Fan : array [1..10] of Integer; CPU : array [1..4] of Real; UsedBus : TBus; IsaBase : Word; SMB_BASE : Word; SMBusType : TSMB; SMB_NAME : String; SMBChipAddress : Byte; ChipType : Integer; TempL : array[1..10] of Real; TempH : array[1..10] of Real; TempA : array[1..10] of Extended; TempC : array[1..10] of LongInt; VoltL : array[1..10] of Real; VoltH : array[1..10] of Real; VoltA : array[1..10] of Extended; VoltC : array[1..10] of LongInt; FanL : array[1..10] of Real; FanH : array[1..10] of Real; FanA : array[1..10] of Extended; FanC : array[1..10] of LongInt; StartingTimeLog : String; CurrentTimeLog : String; CPUL : array[1..4] of Real; CPUH : array[1..4] of Real; CPUA : array[1..4] of Extended; CPUC : array[1..4] of LongInt; TempName : array[1..10] of String; VoltName : array[1..10] of String; FanName : array[1..10] of String; CPUName : String; CPUUsageName : String; function ReadSharedData : Boolean; function ReadSharedInfo : Boolean; function ReadSharedHL : Boolean; function ReadSharedName : Boolean; implementation function ReadSharedData : Boolean; var PSH : PSharedData; hSData : Integer; X : Integer; begin Result:=False; hSData:=OpenFileMapping(FILE_MAP_READ, False, '$M$B$M$5$D$'); if hSData=0 then Exit; PSH:=MapViewOfFile(hSData, FILE_MAP_READ, 0, 0, 0); if PSH=Nil then begin CloseHandle(hSData); Exit; end; with PSH^ do begin for X:=1 to 10 do Temperature[X]:=STemperature[X]; for X:=1 to 10 do Voltage[X]:=SVoltage[X]; for X:=1 to 10 do Fan[X]:=SFan[X]; CPUMHZ:=SMHZ; CPUNr:=SNrCPU; for X:=1 to 4 do CPU[X]:=SCPU[X]; end; UnMapViewOfFile(PSH); CloseHandle(hSData); Result:=True; end; function ReadSharedInfo : Boolean; var PSH : PSharedInfo; hSInfo : Integer; begin Result:=False; hSInfo:=OpenFileMapping(FILE_MAP_READ, False, '$M$B$M$5$I$'); if hSInfo=0 then Exit; PSH:=MapViewOfFile(hSInfo, FILE_MAP_READ, 0, 0, 0); if PSH=Nil then begin CloseHandle(hSInfo); Exit; end; with PSH^ do begin SMB_Base:=SSMB_Base; UsedBus:=SSMB_Type; SmbusType:=SSMB_Code; SMBChipAddress:=SSMB_Addr; SMB_Name:=StrPas(SSMB_Name); ISABase:=SISA_Base; ChipType:=SChipType; VoltageSubType:=SVoltageSubType; end; UnMapViewOfFile(PSH); CloseHandle(hSInfo); Result:=True; end; function ReadSharedHL : Boolean; var PSH : PSharedHL; hSHL : Integer; X : Integer; begin Result:=False; hSHL:=OpenFileMapping(FILE_MAP_READ, False, '$M$B$M$5$H$'); if hSHL =0 then Exit; PSH:=MapViewOfFile(hSHL, FILE_MAP_READ, 0, 0, 0); if PSH=Nil then begin CloseHandle(hSHL); Exit; end; with PSH^ do begin for X:=1 to 10 do begin TempL[X]:=STempL[X]; TempH[X]:=STempH[X]; TempA[X]:=STempA[X]; TempC[X]:=STempC[X]; end; for X:=1 to 10 do begin VoltL[X]:=SVoltL[X]; VoltH[X]:=SVoltH[X]; VoltA[X]:=SVoltA[X]; VoltC[X]:=SVoltC[X]; end; for X:=1 to 10 do begin FanL[X]:=SFanL[X]; FanH[X]:=SFanH[X]; FanA[X]:=SFanA[X]; FanC[X]:=SFanC[X]; end; StartingTimeLog:=StrPas(SStart); CurrentTimeLog:=StrPas(SCurrent); for X:=1 to 4 do begin CPUL[X]:=SCPUL[X]; CPUH[X]:=SCPUH[X]; CPUA[X]:=SCPUA[X]; CPUC[X]:=SCPUC[X]; end; end; UnMapViewOfFile(PSH); CloseHandle(hSHL); Result:=True; end; function ReadSharedName : Boolean; var PSH : PSharedName; hSData : Integer; X : Integer; begin Result:=False; hSData:=OpenFileMapping(FILE_MAP_READ, False, '$M$B$M$5$N$'); if hSData=0 then Exit; PSH:=MapViewOfFile(hSData, FILE_MAP_READ, 0, 0, 0); if PSH=Nil then begin CloseHandle(hSData); Exit; end; with PSH^ do begin for X:=1 to 10 do TempName[X]:=StrPas(STempName[X]) for X:=1 to 10 do VoltName[X]:=StrPas(VoltName[X]) for X:=1 to 10 do FanName[X]:=StrPas(FanName[X]) CPUName:=StrPas(SCPUName); CPUUsageName:=StrPas(SCPUName); end; UnMapViewOfFile(PSH); CloseHandle(hSData); Result:=True; end;
我不会,帮你顶一下子:)
type
TBus = (ISA, SMBus, VIA686ABus, DirectIO);
TSMB = (SMBIntel, SMBAMD, SMBALi);
type
TSharedData = Record
STemperature : array [1..10] of Integer;
SVoltage : array [1..10] of Real;
SFan : array [1..10] of Integer;
SMHZ : Integer;
SNrCPU : Byte;
SCPUUsage : array [1..4] of Real;
end;
TSharedInfo = Record
SMBM_Version : array [0..10] of Char;
SSMB_Base : Word;
SSMB_Type : TBus;
SSMB_Code : TSMB;
SSMB_Addr : Byte;
SSMB_Name : array [0..40] of Char;
SISA_Base : Word;
SChipType : Integer;
SVoltageSubType : Byte;
end;
TSharedHL = Record
STempC : array [1..10] of LongInt;
STempA : array [1..10] of Extended;
STempL : array [1..10] of Real;
STempH : array [1..10] of Real;
SVoltC : array [1..10] of LongInt;
SVoltA : array [1..10] of Extended;
SVoltL : array [1..10] of Real;
SVoltH : array [1..10] of Real;
SFanC : array [1..10] of LongInt;
SFanA : array [1..10] of Extended;
SFanL : array [1..10] of Real;
SFanH : array [1..10] of Real;
SStart : array [0..40] of Char;
SCurrent : array [0..40] of Char;
SCPUC : array [1..4] of LongInt;
SCPUA : array [1..4] of Extended;
SCPUL : array [1..4] of Real;
SCPUH : array [1..4] of Real;
end;
TSharedName = Record
STempName : array [1..10] of array [0..10] of Char;
SVoltName : array [1..10] of array [0..10] of Char;
SFanName : array [1..10] of array [0..10] of Char;
SCPUName : array [0..10] of Char;
SCPUUSageName : array [0..10] of Char;
end;
PSharedData = ^TSharedData;
PSharedInfo = ^TSharedInfo;
PSharedHL = ^TSharedHL;
PSharedName = ^TSharedName;
var
CPUMhz : Integer;
CPUNr : Byte;
Temperature : array [1..10] of Integer
Voltage : array [1..10] of Real;
Fan : array [1..10] of Integer;
CPU : array [1..4] of Real;
UsedBus : TBus;
IsaBase : Word;
SMB_BASE : Word;
SMBusType : TSMB;
SMB_NAME : String;
SMBChipAddress : Byte;
ChipType : Integer;
TempL : array[1..10] of Real;
TempH : array[1..10] of Real;
TempA : array[1..10] of Extended;
TempC : array[1..10] of LongInt;
VoltL : array[1..10] of Real;
VoltH : array[1..10] of Real;
VoltA : array[1..10] of Extended;
VoltC : array[1..10] of LongInt;
FanL : array[1..10] of Real;
FanH : array[1..10] of Real;
FanA : array[1..10] of Extended;
FanC : array[1..10] of LongInt;
StartingTimeLog : String;
CurrentTimeLog : String;
CPUL : array[1..4] of Real;
CPUH : array[1..4] of Real;
CPUA : array[1..4] of Extended;
CPUC : array[1..4] of LongInt;
TempName : array[1..10] of String;
VoltName : array[1..10] of String;
FanName : array[1..10] of String;
CPUName : String;
CPUUsageName : String;
function ReadSharedData : Boolean;
function ReadSharedInfo : Boolean;
function ReadSharedHL : Boolean;
function ReadSharedName : Boolean;
implementation
function ReadSharedData : Boolean;
var
PSH : PSharedData;
hSData : Integer;
X : Integer;
begin
Result:=False;
hSData:=OpenFileMapping(FILE_MAP_READ, False, '$M$B$M$5$D$');
if hSData=0 then Exit;
PSH:=MapViewOfFile(hSData, FILE_MAP_READ, 0, 0, 0);
if PSH=Nil then
begin
CloseHandle(hSData);
Exit;
end;
with PSH^ do
begin
for X:=1 to 10 do Temperature[X]:=STemperature[X];
for X:=1 to 10 do Voltage[X]:=SVoltage[X];
for X:=1 to 10 do Fan[X]:=SFan[X];
CPUMHZ:=SMHZ;
CPUNr:=SNrCPU;
for X:=1 to 4 do CPU[X]:=SCPU[X];
end;
UnMapViewOfFile(PSH);
CloseHandle(hSData);
Result:=True;
end;
function ReadSharedInfo : Boolean;
var
PSH : PSharedInfo;
hSInfo : Integer;
begin
Result:=False;
hSInfo:=OpenFileMapping(FILE_MAP_READ, False, '$M$B$M$5$I$');
if hSInfo=0 then Exit;
PSH:=MapViewOfFile(hSInfo, FILE_MAP_READ, 0, 0, 0);
if PSH=Nil then
begin
CloseHandle(hSInfo);
Exit;
end;
with PSH^ do
begin
SMB_Base:=SSMB_Base;
UsedBus:=SSMB_Type;
SmbusType:=SSMB_Code;
SMBChipAddress:=SSMB_Addr;
SMB_Name:=StrPas(SSMB_Name);
ISABase:=SISA_Base;
ChipType:=SChipType;
VoltageSubType:=SVoltageSubType;
end;
UnMapViewOfFile(PSH);
CloseHandle(hSInfo);
Result:=True;
end;
function ReadSharedHL : Boolean;
var
PSH : PSharedHL;
hSHL : Integer;
X : Integer;
begin
Result:=False;
hSHL:=OpenFileMapping(FILE_MAP_READ, False, '$M$B$M$5$H$');
if hSHL =0 then Exit;
PSH:=MapViewOfFile(hSHL, FILE_MAP_READ, 0, 0, 0);
if PSH=Nil then
begin
CloseHandle(hSHL);
Exit;
end;
with PSH^ do
begin
for X:=1 to 10 do
begin
TempL[X]:=STempL[X];
TempH[X]:=STempH[X];
TempA[X]:=STempA[X];
TempC[X]:=STempC[X];
end;
for X:=1 to 10 do
begin
VoltL[X]:=SVoltL[X];
VoltH[X]:=SVoltH[X];
VoltA[X]:=SVoltA[X];
VoltC[X]:=SVoltC[X];
end;
for X:=1 to 10 do
begin
FanL[X]:=SFanL[X];
FanH[X]:=SFanH[X];
FanA[X]:=SFanA[X];
FanC[X]:=SFanC[X];
end;
StartingTimeLog:=StrPas(SStart);
CurrentTimeLog:=StrPas(SCurrent);
for X:=1 to 4 do
begin
CPUL[X]:=SCPUL[X];
CPUH[X]:=SCPUH[X];
CPUA[X]:=SCPUA[X];
CPUC[X]:=SCPUC[X];
end;
end;
UnMapViewOfFile(PSH);
CloseHandle(hSHL);
Result:=True;
end;
function ReadSharedName : Boolean;
var
PSH : PSharedName;
hSData : Integer;
X : Integer;
begin
Result:=False;
hSData:=OpenFileMapping(FILE_MAP_READ, False, '$M$B$M$5$N$');
if hSData=0 then Exit;
PSH:=MapViewOfFile(hSData, FILE_MAP_READ, 0, 0, 0);
if PSH=Nil then
begin
CloseHandle(hSData);
Exit;
end;
with PSH^ do
begin
for X:=1 to 10 do TempName[X]:=StrPas(STempName[X])
for X:=1 to 10 do VoltName[X]:=StrPas(VoltName[X])
for X:=1 to 10 do FanName[X]:=StrPas(FanName[X])
CPUName:=StrPas(SCPUName);
CPUUsageName:=StrPas(SCPUName);
end;
UnMapViewOfFile(PSH);
CloseHandle(hSData);
Result:=True;
end;