Главная страница
    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.007 c
2-1151641414
Rubey
2006-06-30 08:23
2006.07.16
Картинка вместо кнопки


2-1151655597
Mr tray
2006-06-30 12:19
2006.07.16
Изменять выведенный текст консольного приложения


15-1150014980
Карелин Артем
2006-06-11 12:36
2006.07.16
Лицензионные DVD.


15-1150208840
SergProger
2006-06-13 18:27
2006.07.16
Строка в PHP


2-1151109122
Maggot
2006-06-24 04:32
2006.07.16
Послать *.doc на печать.Подскажите пожалуйста!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский