Текущий архив: 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.46 MB
Время: 0.009 c