|
|
| Посл.отвђт | Сообщен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 точно есть такая переменная. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.094 |