Форум: "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