Einzelnen Beitrag anzeigen

gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#3

AW: TObjectList problem...

  Alt 23. Dez 2010, 09: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;
  Mit Zitat antworten Zitat