Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.16;
Скачать: CL | DM;

Вниз

Системные параметры процесса   Найти похожие ветки 

 
in-tank   (2006-04-04 23:36) [0]

Здравствуйте.
Вопрос возник: Как мне извлеч из системы сколько памяти выделенного под процесс и сколько процентов загрузки процессора он занимает. (Как в диспетчере задач, но для одного с указанным именем).
Заранее спасибо.


 
Eraser ©   (2006-04-05 00:18) [1]


> in-tank   (04.04.06 23:36)

http://rouse.front.ru/
см. taskmon.zip


 
Handle   (2006-04-05 10:54) [2]

Кидаешь на форму TListView и ImageList1 и типа как в диспетчере задач.
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, TLHelp32, PsAPI, Shellapi , ShlObj, ImgList, StdCtrls;
type
 TIconType = (itSmall, itLarge);
type
 TForm1 = class(TForm)
   ListView1: TListView;
   StatusBar1: TStatusBar;
   ImageList1: TImageList;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1:         TForm1;
 hSnapShot:     THandle;
 uProcess:      PROCESSENTRY32;
 r:             longbool;
 ProcessHandle: THandle;
 ExePath:       array[0..127] of Char;
 TheIcon:       TIcon;
 pmc:           PPROCESS_MEMORY_COUNTERS;
 cb:            Integer;
 NewColumn:     TListColumn;
implementation

{$R *.dfm}
function GetIcon(const FileName: string; const IconType: TIconType = itSmall):
 TIcon;
var
 FileInfo: TShFileInfo;
 ImageList: TImageList;
 IT: DWORD;
begin
 IT := SHGFI_SMALLICON;
 Result := TIcon.Create;
 ImageList := TImageList.Create(nil);
 if (IconType = itLarge) then
 begin
   IT := SHGFI_LARGEICON;
   ImageList.Height := 32;
   ImageList.Width := 32;
 end;
 FillChar(FileInfo, Sizeof(FileInfo), #0);
 ImageList.ShareImages := true;
 ImageList.Handle := SHGetFileInfo(
   PChar(FileName),
   SFGAO_SHARE,
   FileInfo,
   sizeof(FileInfo),
   IT or SHGFI_SYSICONINDEX
   );
 ImageList.GetIcon(FileInfo.iIcon, Result);
 ImageList.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
NewColumn := ListView1.Columns.Add;
NewColumn.Caption:= "Process";
NewColumn.Width:= 150;
NewColumn := ListView1.Columns.Add;
NewColumn.Caption:= "Memory";
NewColumn.Width:= 90;
NewColumn.Alignment:= taRightJustify;
ListView1.ViewStyle:= vsReport;
ListView1.SmallImages:= ImageList1;
ListView1.Clear;
ImageList1.BkColor:= clWhite;
hSnapShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
uProcess.dwSize := Sizeof(uProcess);
if(hSnapShot<>0)then
begin
r:=Process32First(hSnapShot, uProcess);
while r <> false do
begin
if  uProcess.szExeFile = "notepad.exe"{Имя искомого процесса} then
begin
ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, uProcess.th32ProcessID);
GetModuleFileNameEx(ProcessHandle, 0, ExePath,127);
cb := SizeOf(_PROCESS_MEMORY_COUNTERS);
GetMem(pmc, cb);
pmc^.cb := cb;
TheIcon:= TIcon.Create;
TheIcon:= GetIcon(ExePath);
ImageList1.AddIcon(TheIcon);
TheIcon.Free;
GetProcessMemoryInfo(ProcessHandle, pmc, cb) ;
with ListView1.Items.Add do begin
  Caption := uProcess.szExeFile;
  ImageIndex:= ImageList1.Count- 1;
  SubItems.Add(IntToStr(pmc^.WorkingSetSize div 1024) + " KB");
end;
end;
r:=Process32Next(hSnapShot, uProcess);
end;
CloseHandle(hSnapShot);
end;
end;
end.


Насчёт

> сколько процентов загрузки процессора он занимает

пока не допёр.


 
in-tank   (2006-04-05 22:42) [3]

Спасибо за предложенные варианты.
to Handle:
По поводу "не допер" - сорри,что коряво выржаюсь. Попытаюсь поконкретнее. Нужно узнать CPU Usege для конкретного процесса.
Попробую более конкретно. Я работаю с Апачем. У него есть конкретное имя -"Apache2" (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Apache2), с помощью которого я его запускаю и останавливаю. А в диспетчере задач Windows имени образа Apache.exe (это я к примеру о нотпаде.ехе) два, при том один из них занимает 0 кб памяти, но в реальности на машине мжет быть запущено два разных апача, при этом оба будут Apache.exe, но имена сервисов (DisplayName) будут разными. Как мне обратиться к процессу по символьному имени (DisplayName,т.е. Apache2, а не Apache.exe)?
to Eraser:
Прежде чем писать на форум, я пытаюсь решить эту проблему самостоятельно, просто не всегда получается. Этот пример я сам нашел, но мне самому ОЧЕНЬ сложно там разобраться + этот пример у меня работает в ХР, а в 2000s и 2000pro не работает. Заранее спасибки.


 
in-tank   (2006-04-06 01:13) [4]

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


 
in-tank   (2006-04-07 01:04) [5]

fup



Страницы: 1 вся ветка

Текущий архив: 2006.07.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
2-1151395315
312Kbps
2006-06-27 12:01
2006.07.16
Диалог ввода даты !


2-1151698113
Adil
2006-07-01 00:08
2006.07.16
Открыть ParamStr(1) и не загрузить программу заново.


15-1150465354
Polevi
2006-06-16 17:42
2006.07.16
смешно


2-1151569501
learner
2006-06-29 12:25
2006.07.16
Управление VCL из нити


2-1151653536
XTD
2006-06-30 11:45
2006.07.16
Командная строка