Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
Delphi 2006 Architect
|
AW: TObjectList problem...
23. Dez 2010, 10:41
Das ist folgender record
Code:
TResultIntRecord = Packed Record
Unknown : Array[0..5] of SmallInt;//unbekanntes Tag
NumTemps : SmallInt; //Anzahl der Temperaturen
NumFans : SmallInt; //Anzahl der Lüfter
NumVolts : SmallInt; //Anzahl der Spannungen
Temps : Array[0..63] of smallint; //Werte der Temperaturen
Fans : Array[0..63] of smallint; //Drehzahl der Lüfter
Volts : Array[0..63] of smallint; //Werte der Spannungen
end;
er beinhaltet die Daten die ich auslese das auslesen passiert hier:
Code:
var
hSFMemory: HWND;
SfAreaPtr: Pointer ;
MyResultRecord: TResultIntRecord;
begin
result:= False;
hSFMemory := 0;
SfAreaPtr := nil;
try
hSFMemory := OpenFileMapping(FILE_MAP_READ, False, 'SFSharedMemory_ALM');
if HSFMemory <> 0 then begin
SfAreaPtr := MapViewOfFile(hSFMemory, FILE_MAP_READ, 0, 0, 0);
//CopyMemory nicht machen wenn im debug modus
CopyMemory(Addr(FintData),SfAreaPtr,sizeof(MyResultRecord));
if (FIntData.NumFans=0) and (FIntData.NumTemps=0) and (FIntData.NumVolts=0) then begin
if FTryesToStartSpeedfan <= 240 then begin
inc(FTryesToStartSpeedfan);
application.ProcessMessages;
Sleep(1000);
ReadSFData ;
end else begin
MessageBox(application.Handle,'No Fan Sensores from Speedfan Found. Shuting down the application ','Failure',MB_OK);
Application.Terminate;
end;
end;
Result:= True;
end;
finally
If not result then begin
if Fileexists(GPConfiguration.GetValue('SpeedFanExePath','asd')) then begin
if not processExists(ExtractFileName(GPConfiguration.GetValue('SpeedFanExePath','asd'))) then
ShellExecute(Application.Handle,'open',PChar(ExtractFileName(GPConfiguration.GetValue('SpeedFanExePath',''))),'',PChar(ExtractFilePath(GPConfiguration.GetValue('SpeedFanExePath',''))),SW_SHOW);
while FTryesToStartSpeedfan <= 120 do begin
if OpenFileMapping(FILE_MAP_READ, False, 'SFSharedMemory_ALM')<> 0 then
FTryesToStartSpeedfan:=120 ;
Sleep(1000);
Application.ProcessMessages;
inc(FTryesToStartSpeedfan);
end;
hSFMemory := OpenFileMapping(FILE_MAP_READ, False, 'SFSharedMemory_ALM');
if HsfMemory = 0 then begin
MessageBox(application.Handle,'Failed to Start and Read SpeedFan Data. Make shure that SpeedfanExePath is right in the configuration.','Failure',MB_OK);
Application.Terminate;
end else begin
ReadSFData;
FTryesToStartSpeedfan:=0;
end;
end;
end;
UnmapViewOfFile(SfAreaPtr);
CloseHandle(hSFMemory);
end;
Der wird vor den 2 loops aufgerufen.
Code:
Result:= GPReadSpeedFan.ReadSFData;
ResultRecord:= GPReadSpeedFan.GetResultRecord;
|
|
Zitat
|