Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


Реализация WinAPI функции GlobalMemoryStatusEx http://msdn.microsoft.com/ru-ru/libr...=vs.85%29.aspx
Предоставляет информацию об использовании физической и виртуальной памяти. Просьба к знатокам: указать на возможные ошибки.
Скрипт
Код: Выделить весь код
[Code]
type
    Int64 = record
        Intlow: Integer;
        IntHigh: Integer;
    end;

    _MEMORYSTATUSEX = record
        dwLength: DWORD;
        dwMemoryLoad: DWORD;
        ullTotalPhys: Int64;
        ullAvailPhys: Int64;
        ullTotalPageFile: Int64;
        ullAvailPageFile: Int64;
        ullTotalVirtual: Int64;
        ullAvailVirtual: Int64;
        ullAvailExtendedVirtual: Int64;
    end;


function GlobalMemoryStatusEx( var lpBuffer: _MEMORYSTATUSEX ): BOOL; external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
function StrFormatByteSize64( qdw: Currency; var pszBuf: Char; cchBuf: UINT ): PAnsiChar; external 'StrFormatByteSize64A@shlwapi.dll stdcall';


function BytesToSize( const Bytes: Extended ): String;
var
    pszBuf: array [0..15] of Char;
begin
    try
        Result := StrFormatByteSize64( Abs ( Bytes div 1E4 ), pszBuf[0], sizeof( pszBuf ) );
    except
    end;
end;


function Size64( const IntLow: Integer; const IntHigh: Integer ): Extended;
begin
    Result := ( ( IntHigh + Integer( IntLow < 0 ) ) * 4.294967296E9 + IntLow );
end;


procedure InitializeWizard();
var
  msEx: _MEMORYSTATUSEX;
  szMemoryLoad: String;
  szTotalPhys: String;
  szAvailPhys: String;
  szTotalPageFile: String;
  szAvailPageFile: String;
  szTotalVirtual: String;
  szAvailVirtual: String;
begin
  msEx.dwLength := SizeOf( msEx ) ;
  if not GlobalMemoryStatusEx( msEx ) then Exit;

  szMemoryLoad := Format( '%s: %d%s', ['MemoryLoad', msEx.dwMemoryLoad, '%'] );
  szTotalPhys := Format( '%s: %s', ['TotalPhys', BytesToSize( Size64( msEx.ullTotalPhys.Intlow, msEx.ullTotalPhys.IntHigh ) )] );
  szAvailPhys := Format( '%s: %s', ['AvailPhys', BytesToSize( Size64( msEx.ullAvailPhys.Intlow, msEx.ullAvailPhys.IntHigh ) )] );
  szTotalPageFile := Format( '%s: %s', ['TotalPageFile', BytesToSize( Size64( msEx.ullTotalPageFile.Intlow, msEx.ullTotalPageFile.IntHigh ) )] );
  szAvailPageFile := Format( '%s: %s', ['AvailPageFile', BytesToSize( Size64( msEx.ullAvailPageFile.Intlow, msEx.ullAvailPageFile.IntHigh ) )] );
  szTotalVirtual := Format( '%s: %s', ['TotalVirtual', BytesToSize( Size64( msEx.ullTotalVirtual.Intlow, msEx.ullTotalVirtual.IntHigh ) )] );
  szAvailVirtual := Format( '%s: %s', ['AvailVirtual', BytesToSize( Size64( msEx.ullAvailVirtual.Intlow, msEx.ullAvailVirtual.IntHigh ) )] );

  MsgBox(
          szMemoryLoad + #13#10 +
          szTotalPhys  + #13#10 +
          szAvailPhys + #13#10 +
          szTotalPageFile + #13#10 +
          szAvailPageFile + #13#10 +
          szTotalVirtual + #13#10 +
          szAvailVirtual,
          mbInformation,
          MB_OK
            );
end;

Последний раз редактировалось saurn, 09-11-2014 в 11:29.


Отправлено: 09:40, 09-11-2014 | #1915