Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
5-1135421009
sco
2005-12-24 13:43
2006.07.16
SetXXXXValue и class


15-1150138873
JUS
2006-06-12 23:01
2006.07.16
Размещение игы в инете и её продажа


2-1150997721
аматор
2006-06-22 21:35
2006.07.16
свойство parent


6-1141971797
WondeRu
2006-03-10 09:23
2006.07.16
TServerSocket внутри COM-сервера.


6-1142322245
SKAyeR
2006-03-14 10:44
2006.07.16
Как получить список файлов находящихся в папке на удал. web серв





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский