Форум: "WinAPI";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизИнформация о процессе Найти похожие ветки
← →
n0wheremany © (2005-05-09 23:20) [0]Доброго времени суток.
Моя проблема не новая и по моему на этом форуме эти вопросы уже рассматривались но конкретных ответов по моему мнению небыло...
Вот проблемы:
1. Как узнать скока времени сожрал процесс у процессора в процентах
2. Кто запустил процесс
(Как у TaskMan.exe в WinXP) // Можно для 9x, если возможно
Вот 1 ответ
var usertim,kerneltim:int64;
var usertim0,kerneltim0:int64;
function GetProcessUssage(PID:DWord):integer;
// This procesedure for All Windows
var pHandle : THandle;
kr,us:_large_integer;
usertim1,kerneltim1:int64;
crt,ext,ker,usr:_filetime;
begin
pHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PId);
getprocesstimes(pHandle,crt,ext,ker,usr);
us.LowPart:=usr.dwLowDateTime;
us.HighPart:=usr.dwHighDateTime;
kr.LowPart:=ker.dwLowDateTime;
kr.HighPart:=ker.dwHighDateTime;
usertim:=us.QuadPart;
kerneltim:=kr.QuadPart;
usertim1:=usertim-usertim0;
kerneltim1:=kerneltim-kerneltim0;
if usertim1<>0 then result:=round((usertim1/(usertim1+kerneltim1+1))*100) else result:=0;
usertim0:=usertim;
kerneltim0:=kerneltim;
CloseHandle(pHandle);
end;
Взял с КД
Тока у меня один процесс занял более 100% - Это возможно?
Вот 2 ответ
type
SID_AND_ATTRIBUTES=record
Sid:PSID;
Attributes:DWORD;
end;
TOKEN_USER=record
User:SID_AND_ATTRIBUTES;
end;
PTOKEN_USER=^TOKEN_USER;
...
var
AcctName: PChar;
DomainName:PChar;
dwAcctName:Cardinal;
dwDomainName:DWORD;
ProcHand: THandle;
TokenHand: THandle;
buffer:PTOKEN_USER;
bufsize:DWORD;
begin
...
//В ProcHand ХЭНДЛ процесса
OpenProcessToken(ProcHand,TOKEN_READ,TokenHand);
GetTokenInformation(TokenHand,TokenUser,nil,0,bufsize);
buffer:=PTOKEN_USER(GlobalAlloc(GMEM_FIXED,bufsize));
GetTokenInformation(TokenHand,TokenUser,buffer,bufsize,bufsize);
LookupAccountSid(nil,buffer^.User.Sid,AcctName,dwAcctName,DomainName,dwDomainName,eUse);
AcctName := PChar(GlobalAlloc(GMEM_FIXED,dwAcctName+1));
DomainName := PChar(GlobalAlloc(GMEM_FIXED,dwDomainName+1));
LookupAccountSid(nil,buffer^.User.Sid,AcctName,dwAcctName,DomainName,dwDomainName,eUse ) ;
//получаем в AcctName имя владельца процесса
...
end;
Взято с КД (вопрос № 22763)
Тока чёта не работает? Может кто исправит
Может кто знает другие способы получения такой информацмм
← →
Ученик (2005-05-10 00:17) [1]>n0wheremany © (09.05.05 23:20)
pHandle всегда правильный и getprocesstimes возвращает True ?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.043 c