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...