Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Процессы и память


Автор: Helicopterr 13.10.2005, 22:48
скажите, можно ли определить сколько байт каждый из тукущих процессов занимает в памяти на уровне записи этой инфы в переменную int.

Автор: np9mi7 13.10.2005, 23:18
Можно
(если по ОС Windows то тебе в раздел Win API и системное программирование)

Автор: Helicopterr 13.10.2005, 23:27
ну что поделать...

Автор: _hunter 14.10.2005, 11:51
в смысле? тебе объем занимаемой памяти нужен?
а при чем тут уровень записи?

Автор: Helicopterr 14.10.2005, 22:10
Цитата(_hunter @ 14.10.2005, 11:51)
в смысле? тебе объем занимаемой памяти нужен?
а при чем тут уровень записи?

Объем занимаемой памяти в байтах!

int Process_N_Size = size in memory(); //к сожалению это моя фантазия, а вот как нужно пытаюсь узнать

Автор: GremlinProg 15.10.2005, 08:11
возьми первый модуль процесса с помощью EnumProcessModules в PSAPI, затем, для этого модуля получи информацию с помощью GetModuleInformation. lpmodinfo->SizeOfImage - это и есть размер в байтах исполняемого процесса.

Автор: Helicopterr 16.10.2005, 23:21
Цитата(GremlinProg @ 15.10.2005, 08:11)
возьми первый модуль процесса с помощью EnumProcessModules в PSAPI

Это я сделал:
Код

//---------------------------------------------------------
// выводит список процессов
//---------------------------------------------------------

#include "stdafx.h"
#include <windows.h>
#pragma comment (lib, "Psapi.lib")

void PrintProcessNameAndID( DWORD processID )
{
    char szProcessName[MAX_PATH] = "unknown";

    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, processID );

    if (NULL != hProcess )
    {
        HMODULE hMod;
        DWORD cbNeeded; 

        if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
        {
            GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) );

            // GetModuleInformation( ... ); 
            
        }
        else return;
    }
    else return;

    printf( "%s (Process ID: %u)\n", szProcessName, processID );
    CloseHandle( hProcess );
}


void main( )
{
    DWORD aProcesses[1024], cbNeeded, cProcesses;
    unsigned int i;

    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
        return;    
       cProcesses = cbNeeded / sizeof(DWORD);
       for ( i = 0; i < cProcesses; i++ )
        PrintProcessNameAndID( aProcesses[i] );
}



Дальше нужна помощь
? Как включить в код это:

Код

LPMODULEINFO lpmodinfo;
DWORD cb;

typedef struct _MODULEINFO {
LPVOID lpBaseOfDll;      
DWORD SizeOfImage;       
LPVOID EntryPoint;       
} MODULEINFO, *LPMODULEINFO;

GetModuleInformation( hProcess, hMod, lpmodinfo, DWORD cb );

DWORD My_process_size =  lpmodinfo -> SizeOfImage;   // так можно?                  


Автор: Neitron 17.10.2005, 09:05
Цитата

lpmodinfo -> SizeOfImage;

Дык тебе нужно научиться работать с СИ++ а не уже приступать к WinAPI
lpmodinfo - не указатель на объект а сам объект. А к объекту нужно обращаться через точку.
DWORD My_process_size = lpmodinfo.SizeOfImage;
Кстати именно этим меня бесит Дельфя.

Автор: Helicopterr 18.10.2005, 21:00
о госпади. Ну извини, я учусь только...
На счёт lpmodinfo -> SizeOfImage - так писал GremlinProg.
Neitron если разобрался скажи лучше что со структурой _MODULEINFO делать.
а то ведь не работает...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)