Главная arrow Лаборатория arrow Как получить информацию о системе (свободная память и т.д.)  
06.02.2012
Главное меню
Главная
Лаборатория
Книги по дельфи
Инструменты
Статьи
Видео
Юмор
Ссылки
Поиск
База знаний Delphi
Общие вопросы
Windows, WinAPI
Графика, Звук
IDE Delphi
Консоль
Авторизация





Забыли пароль?
Вы не зарегистрированы. Регистрация
Каталог@Mail.ru - каталог ресурсов интернет
Как получить информацию о системе (свободная память и т.д.) Версия для печати
Рейтинг: / 11
ХудшаяЛучшая 
Написал Alexeis   
24.07.2007

Если вы хотите узнать сколько виртуальной памяти вам доступно вашей программе или общий объем физической и виртуальной памяти достаточно воспользоваться API функцией GlobalMemoryStatus.

Рассмотрим следующий код. Добавим на форму кнопку (TButton) и многострочный редактор (TMemo). После чего в обработчик кнопки вставляем следующий код.
 
procedure TForm1.Button1Click(Sender: TObject);
var MemoryStatus: TMemoryStatus;
begin
  Memo1.Lines.Clear;
  MemoryStatus.dwLength := SizeOf(MemoryStatus) ;
  GlobalMemoryStatus(MemoryStatus) ;
  with MemoryStatus
  do
    begin
      Memo1.Lines.Add(IntToStr(dwMemoryLoad) +
        '% использованно памяти') ;
      Memo1.Lines.Add(IntToStr(dwTotalPhys) +
        ' Всего физической памяти (в байтах)') ;
      Memo1.Lines.Add(IntToStr(dwAvailPhys) +
        ' Доступно физической памяти (в байтах)') ;
      Memo1.Lines.Add(IntToStr(dwTotalPageFile) +
        ' Всего виртуальной памяти (в байтах)') ;
      Memo1.Lines.Add(IntToStr(dwAvailPageFile) +
        ' Доступно виртуальной памяти (в байтах) ') ;
      Memo1.Lines.Add(IntToStr(dwTotalVirtual) +
        ' Адресное виртуальное простанство текущего процесса') ;
      Memo1.Lines.Add(IntToStr(dwAvailVirtual) +
        ' Доступно байт виртуального адресного пространства текущего процесса') ;
   end;
end;
В Memo1 видим всю необходимую информацию.

Источник delphi.about.com/b/a/257850.htm

Добавлено:
Пример устарел с появлением памяти более 2Гб. Переделан для Windows2000 и выше:
type
  DWORDLONG = Int64;  // ULONGLONG 
  {$EXTERNALSYM DWORDLONG}
  PMemoryStatusEx = ^TMemoryStatusEx; 
  LPMEMORYSTATUSEX = PMemoryStatusEx; 
  {$EXTERNALSYM LPMEMORYSTATUSEX} 
  _MEMORYSTATUSEX = packed record 
    dwLength        : DWORD; 
    dwMemoryLoad    : DWORD; 
    ullTotalPhys    : DWORDLONG;
    ullAvailPhys    : DWORDLONG; 
    ullTotalPageFile: DWORDLONG; 
    ullAvailPageFile: DWORDLONG; 
    ullTotalVirtual : DWORDLONG; 
    ullAvailVirtual : DWORDLONG; 
  end; 
  {$EXTERNALSYM _MEMORYSTATUSEX} 
  TMemoryStatusEx = _MEMORYSTATUSEX; 
  MEMORYSTATUSEX = _MEMORYSTATUSEX; 
  {$EXTERNALSYM MEMORYSTATUSEX}
 
procedure GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx); stdcall;
external kernel32 name 'GlobalMemoryStatus';
{$EXTERNALSYM GlobalMemoryStatusEx}
 
// Пример использования:
procedure TForm1.Button1Click(Sender: TObject);
var MemoryStatusEx: TMemoryStatusEx;
begin
  Memo1.Lines.Clear;
  MemoryStatusEx.dwLength := SizeOf(MemoryStatusEx);
  GlobalMemoryStatusEx(MemoryStatusEx);
  with MemoryStatusEx
  do
    begin
      Memo1.Lines.Add(IntToStr(dwMemoryLoad) +
        '% использованно памяти') ;
      Memo1.Lines.Add(IntToStr(ullTotalPhys) +
        ' Всего физической памяти (в байтах)') ;
      Memo1.Lines.Add(IntToStr(ullAvailPhys) +
        ' Доступно физической памяти (в байтах)') ;
      Memo1.Lines.Add(IntToStr(ullTotalPageFile) +
        ' Всего виртуальной памяти (в байтах)') ;
      Memo1.Lines.Add(IntToStr(ullAvailPageFile) +
        ' Доступно виртуальной памяти (в байтах) ') ;
      Memo1.Lines.Add(IntToStr(ullTotalVirtual) +
        ' Адресное виртуальное простанство текущего процесса') ;
      Memo1.Lines.Add(IntToStr(ullAvailVirtual) +
        ' Доступно байт виртуального адресного пространства текущего процесса') ;
   end;
end;
Добавить новыйПоиск
Alexius   2008-05-04 17:50:42
B) Неплохо. Но помому это даже вобщеобразовательных целх в институте препадают. Не в обиду будет сказано...
Black Leopard   2008-10-23 20:50:29
нормуль. Я покаместь лам в программировании. В институт уже врядли пойду, а научиться хочется. Вот и учусь на чужих успехах ;)
Спасибо.
BoROD@   2009-11-22 15:52:49
dwTotalPhys видит тока 2Гб памяти, есть альтернатива шоб узнать объём физической памяти???????????? :(
Snowy   2009-11-25 16:10:22
Переделал пример для размеров свыше 2Гб
BOGGAD   2010-01-13 22:33:44
Я вот недавно с паскаля на делфи перешёл. Подскажите, а отличий в самом построении кода много?
Терминатор   2010-11-20 17:04:50
=Я вот недавно с паскаля на делфи перешёл. Подскажите, а отличий в самом построении кода много?=
Вообще ничего общего. Вернись на паскаль обратно)
Анонимно   2011-01-28 17:39:00
:X :X <img src=ide:' />
комментарии
Имя:
Заголовок:
UBB-Код:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Security Image
Пожалуйста, введите проверочный код, который Вы видите на картинке.
 
< Пред.   След. >