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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.5 MB
Время: 0.01 c
14-1120210615
Rentgen
2005-07-01 13:36
2005.07.25
Длина кабеля LCD to IBM


1-1120901409
r-i-d
2005-07-09 13:30
2005.07.25
как узнать дескриптор (HWND) созданного функцией CreateProcess??


4-1117454054
strong
2005-05-30 15:54
2005.07.25
И снова про дочерние формы с кнопкой на панели задач


1-1120749836
Gin
2005-07-07 19:23
2005.07.25
Мышь и форма


3-1118384256
Fynjy1984
2005-06-10 10:17
2005.07.25
Проблема с полем Time





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