Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2013, 20:38   #1
alex111089
Новичок
Джуниор
 
Регистрация: 03.12.2009
Сообщений: 2
Стрелка Delphi. Работа с процессами - узнать количество занимаемой процессом памяти в ОЗУ и определить загрузку процессора

Здравствуйте, уважаемые.

Вот незадача у меня случилась - для моей программы необходима подробная информация о процессе:
  • имя процесса;
  • путь к процессу;
  • занимаемая процессом память в ОЗУ;
  • загрузка процессора.
Первые 2 параметра я нашел, а вот с последними 2-мя проблема. Перечитал довольно много статей. Верной информации получить не удалось.
Может быть кто-нибудь сталкивался с подобной проблемой?

Код:
type clProcessInfo=record
  prName, prPath: string;
  prID, prMemory: Integer;
end;

var arrProcesses: array of clProcessInfo;

implementation

procedure getProcInfo;
Var Proc : Thandle;
    ProcTag : TagProcessentry32;

    ModName: array [0..MAX_PATH] of Char;
    ProcHndl: THandle;
begin
SetLength(arrProcesses, 0);
Proc:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
ProcTag.dwSize:=SizeOf(TProcessEntry32);
If Process32first(Proc, ProcTag) then
  Repeat
    SetLength(arrProcesses, length(arrProcesses)+1);
    arrProcesses[length(arrProcesses)-1].prName:=ProcTag.szExeFile;
    arrProcesses[length(arrProcesses)-1].prID:=ProcTag.th32ProcessID;
    arrProcesses[length(arrProcesses)-1].prMemory:=ProcTag.dwSize;  //Выдает неправильное количество занимаемой памяти
    ProcHndl:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,ProcTag.th32ProcessID);
    If GetModuleFileNameEx(ProcHndl,ProcTag.th32ModuleID,ModName,SizeOf(ModName))> 0 then
      arrProcesses[length(arrProcesses)-1].prPath:=ModName
    else
      arrProcesses[length(arrProcesses)-1].prPath:='Unknown';

//------------------ КАК ЭТО ПОЛУЧИТЬ? ----------------------
//    arrProcesses[length(arrProcesses)-1].prMemory:=0;
//-----------------------------------------------------------

  Until not Process32Next(Proc, ProcTag);
end;

Последний раз редактировалось alex111089; 19.01.2013 в 20:44.
alex111089 вне форума Ответить с цитированием
Старый 19.01.2013, 21:10   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Можно например воспользоваться функцией GetProcessTimes() для каждого процесса и потом пересчитать все в проценты.

Просмотрите и остальные GetProcess*() функции...
waleri вне форума Ответить с цитированием
Старый 19.01.2013, 21:44   #3
alex111089
Новичок
Джуниор
 
Регистрация: 03.12.2009
Сообщений: 2
По умолчанию

Спасибо, что откликнулись.
Код:
tmp, tmp2: cardinal
Код:
ProcHndl:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,ProcTag.th32ProcessID);

GetProcessWorkingSetSize(ProcHndl,tmp,tmp2);
GetProcessMemoryInfo(ProcHndl,@ppc,sizeof(PROCESS_MEMORY_COUNTERS));
Функции GetProcessWorkingSetSize и GetProcessMemoryInfo выдают также неправильные значения.

Мне необходимо получить размер занимаемой памяти в ОЗУ определенным процессом - также, как это делает стандартный диспетчер задач.
alex111089 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определить тактовою частоту процессора и узнать название активной видеокарты и объём памяти SalasAndriy C++ Builder 7 14.04.2012 16:17
Процент загрузки процессора процессом likerRr C# (си шарп) 3 30.11.2011 17:58
Максимальный размер занимаемой памяти Alex Cones Общие вопросы Delphi 8 06.05.2009 22:37
Освобождение памяти занимаемой объектом Oburec Общие вопросы Delphi 10 16.04.2009 10:54
Нужно создать программку, отображающую текущую загрузку процессора. Naik Общие вопросы Delphi 6 03.03.2009 08:42