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

Вниз

Программно отследить активность определенного процесса   Найти похожие ветки 

 
Eugem ©   (2006-02-22 17:05) [0]

Прошу помощи в решении задачи. Необходимо программно отследить активность определенного приложения (процесса). Её (активность) можно видеть, если нажать Alt+Ctrl+Del и появится диспетчер задач. Далее можно видеть число записей программы (счетчик записей), которые она делает во время выполнения. Очень важно программно определить именно число записей, которые делает процесс во время своего выполнения.


 
clickmaker ©   (2006-02-22 17:17) [1]

GetProcessTimes поможет в определении активности?


 
begin...end ©   (2006-02-22 17:53) [2]

> Eugem ©   (22.02.06 17:05)

> Далее можно видеть число записей программы (счетчик записей),
> которые она делает во время выполнения. Очень важно программно
> определить именно число записей, которые делает процесс
> во время своего выполнения.

GetProcessIOCounters


 
Eugem ©   (2006-02-22 22:59) [3]

GetProcessIOCounters подойдет, наверное. Вот только где описание этой функции?


 
Eugem ©   (2006-02-23 00:40) [4]

попробовал в программе GetProcessIOCounters, при обработке алгоритма в середине выскакивает ошибка ввода/вывода. Подскажите что не так. Вот код:
***
type
 IO_COUNTERS = packed record
   ReadOperationCount : LARGE_INTEGER;
   WriteOperationCount : LARGE_INTEGER;
   OtherOperationCount : LARGE_INTEGER;
   ReadTransferCount : LARGE_INTEGER;
   WriteTransferCount : LARGE_INTEGER;
   OtherTransferCount : LARGE_INTEGER;
 end;

function GetProcessIoCounters(HANDLE:THandle;PIO_COUNTERS:IO_COUNTERS):boolean; external "kernel32.dll" name "GetProcessIoCounters";

procedure TForm1.FormActivate(Sender: TObject);
var
hSnap:THandle;
pe:TProcessEntry32;
cz:boolean;
cou:IO_COUNTERS;
cous:LARGE_INTEGER;
begin
listbox1.Clear;
pe.dwSize:=SizeOf(pe);
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
cz:=GetProcessIoCounters(hSnap,cou);
If Process32First(hSnap,pe) then begin
listbox1.Items.Add(pe.szExeFile);
While Process32Next(hSnap,pe) do begin
listbox1.Items.Add(pe.szExeFile);
if GetProcessIoCounters(hSnap,cou) then cous:=cou.WriteOperationCount;
end;
end;
end;
***


 
n0name   (2006-02-23 06:33) [5]

Неправльно перевел прототип финкции
BOOL GetProcessIoCounters(
 HANDLE hProcess,
 PIO_COUNTERS lpIoCounters
);

function GetProcessIoCounters(hPorcess: THandle; lpIoCounters: PIO_COUNTERS): boolean

PIO_COUNTERS = ^IO_COUNTERS;


 
begin...end ©   (2006-02-23 09:37) [6]

> Eugem ©   (22.02.06 22:59) [3]

В MSDN: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocessiocounters.asp

> Eugem ©   (23.02.06 00:40) [4]

Во-первых, см. [5]. Во-вторых, не указано нужное соглашение о вызове (stdcall). В-третьих, в функцию Вы почему-то передаёте не дескриптор процесса, а дескриптор снимка, возвращённый CreateToolhelp32Snapshot.

type
 TIOCounters = packed record
   ReadOperationCount:  Int64;
   WriteOperationCount: Int64;
   OtherOperationCount: Int64;
   ReadTransferCount:   Int64;
   WriteTransferCount:  Int64;
   OtherTransferCount:  Int64;
 end;

function GetProcessIoCounters(hProcess: Cardinal; var lpIoCounters: TIOCounters): BOOL; stdcall; external "kernel32.dll";

var
 hSnap, hProc: THandle;
 Counters: TIOCounters;
 PE: TProcessEntry32;
begin
 hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
 if hSnap <> INVALID_HANDLE_VALUE then
   try
     PE.dwSize := sizeof(PE);
     if Process32First(hSnap, PE) then
       repeat
         hProc := OpenProcess(PROCESS_QUERY_INFORMATION, False, PE.th32ProcessID);
         try
           if GetProcessIoCounters(hProc, Counters) then
             ListBox.Items.Add(
               Format("Id: %d ExeName: %s WriteCount: %d", [PE.th32ProcessID, PE.szExeFile, Counters.WriteOperationCount]))
         finally
           CloseHandle(hProc)
         end
       until not Process32Next(hSnap, PE)
   finally
     CloseHandle(hSnap)
   end
end


 
Eugem ©   (2006-02-23 13:37) [7]

begin...end, огромное тебе СПАСИБО. Всё получилось :-) Я счастлив!!!!



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

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

Наверх





Память: 0.46 MB
Время: 0.018 c
2-1146513225
Mr tray
2006-05-01 23:53
2006.05.21
Получить иконку запущенного приложения


15-1145596344
Ega23
2006-04-21 09:12
2006.05.21
С Днём рождения! 21 апреля


6-1137789560
GuAV
2006-01-20 23:39
2006.05.21
Можно ли закрыть listen socket при работающих accepted ?


2-1147016485
AlexanderMS
2006-05-07 19:41
2006.05.21
Проблема с фокусом


2-1146655911
Vetas
2006-05-03 15:31
2006.05.21
Печать Tchart





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