Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Dateien / Laufwerke (https://www.delphipraxis.net/41-library-dateien-laufwerke/)
-   -   Delphi Größe der eigenen laufenden Anwendung ermitteln (https://www.delphipraxis.net/85971-groesse-der-eigenen-laufenden-anwendung-ermitteln.html)

Matze 7. Feb 2007 10:03


Größe der eigenen laufenden Anwendung ermitteln
 
ErazerZ zeigt in diesem Beitrag, wie es möglich ist, die Größe der laufenden Anwendung zu ermitteln. Dies ist vor allem dann geeignet, wenn Dateien an die eigene Anwendung angehängt sind und somit Delphi-Referenz durchsuchenFileSize nicht das gewünschte Ergebnis liefert.

Delphi-Quellcode:
function GetApplicationSize(var AppWinSize, AppDwSize: Int64): Boolean;
var
  { Datei Öffnen }
  hFile: THandle;
  lpNumberOfBytesRead: DWORD;
  { Zwischenspeicherung }
  lpBuffer: Pointer;
  x: Word;
  dwTmp, dwSize, dwWinSize: Cardinal;
  { PE-Stuff }
  NtHeaders: PImageNtHeaders;
  Section: PImageSectionHeader;
  TmpResult: Boolean;
begin
  dwSize := 0;
  dwWinSize := 0;
  TmpResult := false;
  hFile := CreateFile(PChar(ParamStr(0)), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
  if (hFile <> INVALID_HANDLE_VALUE) then
  begin
    dwWinSize := GetFileSize(hFile, nil);
    GetMem(lpBuffer, $800); // nur 2048 Bytes einlesen, mehr sollte nicht benötigt werden.
    ReadFile(hFile, lpBuffer^, $800, lpNumberOfBytesRead, nil);
    if (lpBuffer <> nil) then
    begin
      NtHeaders := PImageNtHeaders(Cardinal(lpBuffer) + Cardinal(PImageDosHeader(lpBuffer)._lfanew));
      if (NtHeaders^.Signature = IMAGE_NT_SIGNATURE) then
      begin
        for x := 0 to NtHeaders^.FileHeader.NumberOfSections -1 do
        begin
          Section := PImageSectionHeader(Cardinal(NtHeaders) + SizeOf(TImageNtHeaders) + (SizeOf(TImageSectionHeader) * x));
          dwTmp := Section.PointerToRawData + Section.SizeOfRawData;
          if (dwTmp > dwSize) then
            dwSize := dwTmp;
        end;
        TmpResult := true;
        FreeMem(lpBuffer);
      end;
    end;
  end;
  CloseHandle(hFile);

  AppWinSize := dwWinSize;
  AppDwSize := dwSize;
  result := TmpResult;
end;
[edit=CalganX]Mfg, CalganX[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz