![]() |
Delphi: список процессов
У меня есть список процессов, созданный кодом:
Код:
varPID: 12345 NAME: notepad.exe CMD: edit.bat bla-bla-bla.txt PATH: D:\TEXTS\ Структуры PROCESSENTRY32 подобной информации не содержат. Но это как-то можно выковырять (я видел такие проги), только - как? Никто не подскажет? |
Для каждого из процессов нужно ещё раз вызвать CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, proc.th32ProcessID);
Первый модуль, полученный по Module32First, должен быть самим exe-шником (MODULEENTRY32.szExePath). p.s.: не забывай закрывать хэндлы, полученные по CreateToolHelp32SnapShot... |
Как комментарий, щоб понятней было, к сказанному Gem Single
ты делаешь слепок системы, ну или слепок памяти системы, в которой ты работаешь, так вот, как совершенно правильно заметил Gem Single , тыж ведь в память че-то грузишь, заполняя тем самым адресное пространство всей системы. Поэтому как сделаешь слепок, незабывай удалять его ибо он также занимает память. Золотое правило программиста - занял память - освободи явно, не полагаясь на компилятор. |
Вложений: 1
Гыхм... Все равно - не то. Посмотрите на скриншот (с проги TaskInfo2003). То, что было предложено вами, дает мне третью строку - имя exe-шника с полным путем. Меня же интересуют две первые строки - с какими параметрами и из какой директории он был запущен.
|
эхх... вторая строка -- это не из какой директории, а _текущий_ каталог (установленный функцией SetCurrentDirectory()).
Придётся тебе воспользоваться функцией CreateRemoteThread() для интересующего процесса. В созданном потоке будешь вызывать GetCommandLine() и GetCurrentDirectory(), ну и передавать полученную инфу в свой процесс при помощи file mapping. |
ИМХО при использовании CreateProcess есть ряд структур, в которых есть то, что тебе надо... но это при создании ручками... незнаю, если в памяти эти структуры после запуска процесса не чистятся, имхо они чистятся при закрытии процесса, то их можно поиска в адресном пространстве...
BOOL CreateProcess( LPCTSTR lpApplicationName, // pointer to name of executable module LPTSTR lpCommandLine, // pointer to command line string LPSECURITY_ATTRIBUTES lpProcessAttributes, // pointer to process security attributes LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes BOOL bInheritHandles, // handle inheritance flag DWORD dwCreationFlags, // creation flags LPVOID lpEnvironment, // pointer to new environment block LPCTSTR lpCurrentDirectory, // pointer to current directory name LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION ); |
А при чём здесь CreateProcess?
|
Gem Single
Спасибо. Принцип ясен. Буду мучить. |
| Часовой пояс GMT +4, время: 09:14. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.