Как получить обьем физической памяти компа
От: Аноним  
Дата: 04.06.04 11:00
Оценка:
Спасибо.
Re: Как получить обьем физической памяти компа
От: .Mistery Беларусь  
Дата: 04.06.04 11:04
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Спасибо.


GlobalMemoryStatus

Удачи!
... << RSDN@Home 1.1.3 beta 1 >>
Мы — маньяки, должны помогать друг другу!
Re: Как получить обьем физической памяти компа
От: Amper  
Дата: 04.06.04 20:27
Оценка:
Здравствуйте, Аноним, Вы писали:

Используй
GlobalMemoryStatus
Re[2]: Как получить обьем физической памяти компа
От: stealth296 Великобритания  
Дата: 04.06.04 23:08
Оценка:
Здравствуйте, 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);
}


Думаю, что этим всё сказано!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.