· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Поиск всех процессов

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Дек 22, 2003 02:24:46

Пересмаривал я тут процессовые и потоковые функции, и что-то не смог найти... Как делать сабж? Я имею ввиду было что-то аналогичное системе FindFirstFile - FindNextFile. Где-то я такое видел и для процессов, а вот где?


Дата: Дек 22, 2003 02:40:23

1. Делаешь снимок (CreateToolhelp32Snapshot)
2. Вызываешь Process32First
3. Вызываешь циклически Process32Next, пока она не возвратит ноль


Дата: Дек 22, 2003 03:37:41

Поищи по форуму, тут даже исходник где-то лежит.


Дата: Дек 22, 2003 13:31:08

Кстати, для нт-подобных систем это работает? А то я щас пишу одну программку и хотел бы ее сделать совместимым.
У самого оперативка винда 98-ая.


Дата: Дек 22, 2003 15:37:43

Биллиотека Toolhelp есть во всей линейке 9x. В НТ начиная с 2000. Хотя в последних sp для NT4 может тоже есть.


Дата: Дек 22, 2003 16:01:34

Toxic
Спасибо, эти два слова у меня и вылетели из головы. ;)
А на всяких там оптиронах есть такая штука как Process64xxx ?


Дата: Дек 22, 2003 20:35:09

Кстати, ToolHelp в 2k/XP возвращает не полный путь к файлу а только его имя, в связи с этим такой вопрос, как зная PID процесса получить полный путь к файлу под 2k/XP?


Дата: Дек 22, 2003 21:04:03

Asterix
GetModuleFileName


Дата: Дек 22, 2003 21:29:02

Quantum

Я смотрел в сторону этой функции но что-то мне показалось что так нельзя, ладно попробую ещё ;-)


Дата: Дек 22, 2003 22:49:58 · Поправил: _Juicy

В линейке NT есть psapi.dll - специальная библиотека для работы с процессами.
Она экспортирует много хороших функций.

BOOL EnumProcesses(
DWORD *lpIdProcess,//буфер для идентификаторов процессов
DWORD cb,//размер буфера(не помню, в байтах или в dword
DWORD*Need //указатель на возвращаемое число идентификаторов
);

Заполняет буфер идентификаторами процессов в системе.

Чтобы получить имя модуля процесса вызывается OpenProcess для получения хэндла процесса, а затем из той же psapi :

EnumProcessModules(HANDLE hProcess, HMODULE*hModule_vector,DWORD size_hModule, LPDWORD cbReturned );

GetModuleFileNameExA(HANDLE hProcess,HMODULE hModule,char*ModulName,DWORD size_ModuleName);

GetModuleFileNameExA для первого идентификатора, полученного в hModule_vector с помощью EnumProcessModules и будет именем исполняемого файла, а остальные - идентификаторы длл-ей


Дата: Дек 22, 2003 22:51:43

_Juicy

А без psapi.dll, это принципиально!

Quantum

Чего-то не получается, щас кину тебе сорец ;-)


Дата: Дек 23, 2003 02:59:44

Все замечательно работает %)
Вот только одно не ясно: Process32xxxx нам структурку заполняет, где айди всякие и т.д. А хендл-то процесса как получить?


Дата: Дек 23, 2003 03:25:01

Вытащить из структурки PROCESSENTRY32, только здесь не хэндл а скорее PID(th32ProcessID).


Дата: Дек 23, 2003 06:38:17

Только обращайте внимание на ремарки в MSDN - там в некоторых случаях возвращаются псевдо-хэндлы, предназначенные для использования только с несколькими функциями набора.

Asterix
как зная PID процесса получить полный путь к файлу под 2k/XP
Можно так сделать: используя th32ProcessID, делаешь перебор модулей данного процесса(Module32First, Module32Next), там в структуре есть элемент szExePath


Дата: Дек 23, 2003 06:43:58 · Поправил: Asterix

Toxic

Спасибо. В MODULEENTRY32 точно есть такая переменная.

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.094