Einzelnen Beitrag anzeigen

Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#1

SetFileTime und "letzter Zugriff"

  Alt 30. Sep 2008, 11:50
Hallo, ich hab ein kleines Problem. Ich brauche ein Prog, mit den ich Dateizeit und Zeit des PE-Headers verändern kann.
Hab mir schnell was geschrieben und es funzt auch. Mit einer Ausnahme: die Zeit des letzten Zugriffs ist alsch und ich habe keine Ahnung warum...
Delphi-Quellcode:
Procedure TForm1.TntBitBtn1Click(Sender : TObject);

  Function SetFileDateTime(FileName : String;NewDateTime : TDateTime) : Boolean;
  Var
    FileHandle : Integer;
    FileTime : TFileTime;
    LFT : TFileTime;
    LST : TSystemTime;
  Begin
    Result:=False;
    Try
      DecodeDate(NewDateTime, LST.wYear, LST.wMonth, LST.wDay);
      DecodeTime(NewDateTime, LST.wHour, LST.wMinute, LST.wSecond, LST.wMilliSeconds);
      If SystemTimeToFileTime(LST, LFT) Then
      Begin
        If LocalFileTimeToFileTime(LFT, FileTime) Then
        Begin
          FileHandle:=FileOpen(FileName, fmOpenReadWrite Or fmShareExclusive);
          Result:=SetFileTime(FileHandle, @FileTime, @FileTime, @FileTime);
        End;
      End;
    Finally
      FileClose(FileHandle);
    End;
  End;

  Procedure UpdateLinkerTimeStamp(Const FileName : String;Const Time : TDateTime);
  Var
    LI : _LOADED_IMAGE; //TLoadedImage;
  Begin
    Win32Check(MapAndLoad(PChar(FileName), Nil, @LI, False, False));
    LI.FileHeader.FileHeader.TimeDateStamp:=Round((Time - 25569 {entspr. UnixDateDelta}) * SecsPerDay);
    UnMapAndLoad(@LI);
  End;
Begin
  With tOpenDialog.Create(Application) Do
  Begin
    DefaultExt:= '*.exe';
    Filter:= 'Programmdateien|*.exe';
    FilterIndex:=0;
    If Execute Then
    Begin
      UpdateLinkerTimeStamp(Filename, DatetimePicker.Date);
      SetFileDateTime(Filename, DatetimePicker.Date);
    End
    Else
      Exit;
    Free;
  End;
  close;
End;
Wäre für Hilfe dankbar...
  Mit Zitat antworten Zitat