Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.25;
Скачать: CL | DM;

Вниз

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

 
JB   (2005-05-19 11:11) [0]

Удалено модератором
Примечание: AutoModerator


 
Digitman ©   (2005-05-19 11:45) [1]


> пишу прогу которая ведет лог в который пишет какие процессы
> за день запускались


пытаешься по таймеру список процессов просматривать ?

а если процесс стартовал и тут же завершился между двумя последовальными "тиками" таймера ?


 
Digitman ©   (2005-05-19 11:47) [2]

на wasm.ru есть пример реализации процесс-монитора под НТ, с использованием драйвера режима ядра


 
JB   (2005-05-19 12:58) [3]

А если не под НТ


 
Eraser ©   (2005-05-19 13:05) [4]

JB   (19.05.05 12:58) [3]

А если не под НТ


Тогда Process32First по таймеру. Непонятно почему она у тебя ошибку фозвращает. Приведи код.


 
Digitman ©   (2005-05-19 14:24) [5]

Members

dwSize

Specifies the length, in bytes, of the structure. Before calling the Process32First function, set this member to
sizeof(PROCESSENTRY32).


 
JB   (2005-05-19 15:01) [6]

>Eraser
Код:
 
 Module32.dwSize:=SizeOf(TModuleEntry32);
 H:=CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, 0);
 if Module32First(h,Module32) then
  begin
   Repeat
    Next:=Module32Next(H,Module32);

    if Next  Then
      {добавляем в список}
   Until Not Next;
  end;
  CloseHandle(h);


 
Eraser ©   (2005-05-19 15:18) [7]

JB   (19.05.05 15:01) [6]
if Module32First(h,Module32) then
 begin
  Repeat
   Next:=Module32Next(H,Module32);


Не правильно!


 
Marser ©   (2005-05-19 15:22) [8]


> JB   (19.05.05 15:01) [6]

Ты всё перепутал. Тебе ведь процессы нужны, а не модули. А значит, используй соответственно process32first, process32next, структуру TProcessEntry32 и константу TH32CS_SNAPPROCESS.


 
Eraser ©   (2005-05-19 16:02) [9]

JB   (19.05.05 15:01) [6]

Во-первых Marser ©   (19.05.05 15:22) [8]

Во-вторых ты пропускаешь первый элимент

if Module32First(h,Module32) then
begin
 Repeat
  Next:=Module32Next(H,Module32);


 
Piter ©   (2005-05-19 18:01) [10]

Вопрос: как получить список процессов в системе

Ответ: будем пользоваться функцией CreateToolhelp32Snapshot, она реализована как в NT системах (начиная с windows 2000), так и в 9x. В NT она использует пресловутую NtQuerySystemInformation, которая недокументированна.
Заголовок CreateToolhelp32Snapshot и остальные типы описаны в модуле TlHelp32.
CreateToolhelp32Snapshot может делать снимок процессов и куч, модулей, потоков, используемых процессом. Она заносит требуемые данные в некоторую структуру (снимок) и возвращает ее описатель. После использования снимка нужно закрыть описатель.
Работать со снимком можно с помощью функций Process32First, Process32Next, Thread32First , Thread32Next и так далее (описаны в Win32 SDK в разделе "Tool Help Functions"). Эти функции заносят информацию о конкретном процессе, потоке и т.д. из снимка в структуры типа TProcessEntry32, TThreadEntry32.
Итак, будем получать список процессов и заносить их названия в ListBox1, который лежит у нас на форме:

uses
TlHelp32;
...

procedure TForm1.Button1Click(Sender: TObject);
var
 HSnapShot: THandle;
 pe: TProcessEntry32;
begin
 listbox1.Clear; //очишаем наш ListBox1
 HSnapShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //нам нужен снимок процессов
 pe.dwSize := sizeof(ProcessEntry32); //перед использованием TProcessEntry32 нужно заполнить поле dwSize
 if Process32First(HSnapShot, pe) then // если первая запись о процессах получена - продолжаем
  repeat
    listbox1.Items.Add(pe.szExeFile); // добавляем в ListBox
  until ( not Process32Next(HSnapShot,pe) ); // получаем запись о следующем процессе, если не получаем - выходим из цикла
 closehandle(HSnapShot); // закрываем описатель снимка
end;

Файл проекта с данным примером можно загрузить ЗДЕСЬ

Отвечал: Piter


 
GrayFace ©   (2005-05-20 13:54) [11]

Piter ©   (19.05.05 18:01) [10]
пресловутую NtQuerySystemInformation, которая недокументированна.

Прекрасно документирована в MSDN, но с пометкой "is internal function".

Piter ©   (19.05.05 18:01) [10]
Файл проекта с данным примером можно загрузить ЗДЕСЬ

:)


 
alpet ©   (2005-05-20 14:10) [12]

Модули для упрощения работы со списком процессов.
http://alpet.hotmail.ru/psmap.zip (7Кбайт)
Поддерживается также поиск по ID процесса, и имени его файла. Создание списка окон с получением их иконок, с созхранением резульатов в TListView компонент.


 
Marser ©   (2005-05-20 14:38) [13]

Удалено модератором
Примечание: AutoModerator


 
Piter ©   (2005-05-20 15:16) [14]

Удалено модератором
Примечание: AutoModerator


 
Игорь Шевченко ©   (2005-05-20 15:20) [15]

Piter ©   (20.05.05 15:16) [14]


> вроде когда я писал еще не была документирована


А когда ты писал ?


 
Marser ©   (2005-05-20 16:29) [16]


> Нда? Понт? И в чем же здесь понт, Сергей? Объяснишь
> может?

Информация бесполезна, поскольку не содержит описания работы NtQuerySystemInformation. Упоминание о его недокументированности выглядит как красование своими знаниями.
В принципе, такое упоминание приемлемо. Но в полноценной статье, а не в FAQ.

В остальном оформление очень неплохое.


 
Piter ©   (2005-05-20 18:11) [17]

Marser ©   (20.05.05 16:29) [16]
о его недокументированности выглядит как красование своими знаниями


да? А почему бы вообще этот пример не рассматривать, как красование моими знаниями? Мол, решил покрасоваться - поэтому и написал этот ответ?

Про недокументированность я упомянул для того, чтобы объяснить почему я узнаю нформацию о процессах с помощью снимков, а не с помощью этой функции. Ведь логичнее получать информацию с помощью документированных функций, чем недокумнтированных?


 
Marser ©   (2005-05-20 18:18) [18]


> почему я узнаю нформацию о процессах с помощью
> снимков, а не с помощью этой функции

Хотя бы потому, что в Win9x её нету.


 
Piter ©   (2005-05-20 20:12) [19]

Marser ©   (20.05.05 18:18) [18]
Хотя бы потому, что в Win9x её нету


верно. Это еще одна причина. А другую причину уже и озвучить нельзя, ибо Marser рассмотрел в этом понты?!


 
alpet ©   (2005-05-20 20:18) [20]

Marser ©   (20.05.05 18:18) [18]
>Хотя бы потому, что в Win9x её нету.

Не много оффтоп. Я обнаружил что в составе Win98 всегда определяется библиотека ntdll.dll. Из нее вроде можно экспортировать-юзать функции (such as NtCreateFile) которые по описанию в MSDN для этой версии Windows заказаны. Она что редистрибутабельная эта либа ?


 
Marser ©   (2005-05-21 12:13) [21]

Удалено модератором
Примечание: AutoModerator


 
GrayFace ©   (2005-05-26 19:27) [22]

Как мне помнится, в каких-то Nt-шках не поддерживается ToolHelp32, но есть NtQuerry...

alpet ©   (20.05.05 20:18) [20]
Скорее всего, при их вызове ничего не делается и возвращается ошибка "not supported".


 
Игорь Шевченко ©   (2005-05-26 19:37) [23]

alpet ©   (20.05.05 20:18) [20]

Ейных функций во-первых мало, во-вторых, они все переадресуются к Kernel32, насколько я могу судить. Так что не советую.


 
Piter ©   (2005-05-26 23:32) [24]

GrayFace ©   (26.05.05 19:27) [22]
Как мне помнится, в каких-то Nt-шках не поддерживается ToolHelp32, но есть NtQuerry...


ну видимо во всех NT до Win2000



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

Текущий архив: 2005.07.25;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.035 c
1-1120835930
Qwertyk
2005-07-08 19:18
2005.07.25
Потеря качества при уменьшении иображения


3-1118734195
Lexa
2005-06-14 11:29
2005.07.25
Переход к другой таблице


14-1120125202
andrey111111
2005-06-30 13:53
2005.07.25
Nsis


1-1120891550
KyRo
2005-07-09 10:45
2005.07.25
Код клавиши


6-1113399588
MegaVolt
2005-04-13 17:39
2005.07.25
Ping при количестве потоков >6 работает некорректно