Здравствуйте, <Аноним>, Вы писали:
А>Спасибо.
GlobalMemoryStatus
Удачи!
... << RSDN@Home 1.1.3 beta 1 >>
Здравствуйте, Amper, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
A>Используй
A>GlobalMemoryStatus
Вот пример того, как можно использовать GlobalMemoryStatus:
// Где-то в *.h файле...
int
APIENTRY
MemoryStatus_PrintA(
LPSTR pszBuffer,
UINT uStatus);
int
APIENTRY
MemoryStatus_PrintW(
LPWSTR pszBuffer,
UINT uStatus);
#ifdef UNICODE
#define MemoryStatus_Print MemoryStatus_PrintW
#else
#define MemoryStatus_Print MemoryStatus_PrintA
#endif // !UNICODE
// Current available status parameters for the MemoryStatus_Print function.
typedef enum {
PERSENT_OF_LOAD = 0x0001,
TOTAL_PHYSICAL = 0x0002,
AVAILABLE_PHYSICAL = 0x0003,
TOTAL_PAGEFILE = 0x0004,
AVAILABLE_PAGEFILE = 0x0005,
TOTAL_VIRTUAL = 0x0006,
AVAILABLE_VIRTUAL = 0x0007,
} MEMORY_STATUS;
// Где-то в *.cpp файле...
/****************************************************************************************\
* Function: MemoryStatus_Print(ANSI/UNICODE).
*
* Inputs: LPWSTR pszBuffer // буфер, для получения результирующей строки
* UINT uStatus // тип памяти, может, быть установлен в однин из
* // следующих флагов:
*
* PERSENT_OF_LOAD // % памяти загружено
* TOTAL_PHYSICAL // всего физической памяти
* AVAILABLE_PHYSICAL // доступно физической памяти
* TOTAL_PAGEFILE // размер файла подкачки
* AVAILABLE_PAGEFILE // доступное место в файле подкачки
* TOTAL_VIRTUAL // всего виртуальной памяти
* AVAILABLE_VIRTUAL // доступно виртуальной памяти
*
* Result: Не ноль, если функция завершается успешно, в противном случае
* результат == 0.
*
* Purpose: Получение информации о количестве и использованнии памяти.
*
* Remarks: Флаги нельзя комбинировать при помощи поразрядной операции
* ИЛИ (f1 | f2).
\****************************************************************************************/
int __stdcall MemoryStatus_PrintW(LPWSTR pszBuffer, UINT uStatus)
{
// Для получения информации о кол-ве свободной памяти воспользуемся структурой
// MEMORYSTATUS и вспомогательной функцией GlobalMemoryStatus из winbase.h.
MEMORYSTATUS ms;
GlobalMemoryStatus(&ms);
// Печатаемые строки.
WCHAR szPrintableStrings[7][40] = {
L"Memory using: %d MB",
L"Total physical memory: %d KB",
L"Available physical memory: %d KB",
L"Total paging file: %d KB",
L"Available paging file: %d KB",
L"Total virtual memory: %d KB",
L"Available virtual memory: %d KB",
};
int curr_status; // текущее состояние
switch (uStatus) {
case PERSENT_OF_LOAD:
return swprintf(pszBuffer, szPrintableStrings[uStatus], ms.dwMemoryLoad);
case TOTAL_PHYSICAL:
curr_status = ms.dwTotalPhys;
break;
case AVAILABLE_PHYSICAL:
curr_status = ms.dwAvailPhys;
break;
case TOTAL_PAGEFILE:
curr_status = ms.dwTotalPageFile;
break;
case AVAILABLE_PAGEFILE:
curr_status = ms.dwAvailPageFile;
break;
case TOTAL_VIRTUAL:
curr_status = ms.dwTotalVirtual;
break;
case AVAILABLE_VIRTUAL:
curr_status = ms.dwAvailVirtual;
break;
default:
swprintf(pszBuffer, L"An error has occured!");
return FALSE;
}
return swprintf(pszBuffer, szPrintableStrings[uStatus - 1], curr_status / 1024);
}
int __stdcall MemoryStatus_PrintA(LPSTR pszBuffer, UINT uStatus)
{
// Для получения информации о кол-ве свободной памяти воспользуемся структурой
// MEMORYSTATUS и вспомогательной функцией GlobalMemoryStatus из winbase.h.
MEMORYSTATUS ms;
GlobalMemoryStatus(&ms);
char szPrintableStrings[7][40] = {
"Memory using: %d KB",
"Total physical memory: %d KB",
"Available physical memory: %d KB",
"Total paging file: %d KB",
"Available paging file: %d KB",
"Total virtual memory: %d KB",
"Available virtual memory: %d KB",
};
int curr_status;
switch (uStatus) {
case PERSENT_OF_LOAD:
return sprintf(
pszBuffer,
szPrintableStrings[uStatus - 1],
ms.dwMemoryLoad);
case TOTAL_PHYSICAL:
curr_status = ms.dwTotalPhys;
break;
case AVAILABLE_PHYSICAL:
curr_status = ms.dwAvailPhys;
break;
case TOTAL_PAGEFILE:
curr_status = ms.dwTotalPageFile;
break;
case AVAILABLE_PAGEFILE:
curr_status = ms.dwAvailPageFile;
break;
case TOTAL_VIRTUAL:
curr_status = ms.dwTotalVirtual;
break;
case AVAILABLE_VIRTUAL:
curr_status = ms.dwAvailVirtual;
break;
default:
sprintf(pszBuffer, "An error has occured!");
return FALSE;
}
return sprintf(pszBuffer, szPrintableStrings[uStatus - 1], curr_status / 1024);
}
Думаю, что этим всё сказано!