PDA

Просмотр полной версии : Аналог GetModuleFileNameEx() в win 9x



Xen
22.12.2004, 13:31
Господа программеры, подскажите, плиз, по сабжу. Имеется хэндл процесса, нужно получить полный путь к бинарнику. В NT на этот случай есть psapi, а чем бы воспользоваться в 98х ? Вот такой вот вопрос возник в моей больной после вчерашнего голове...


P.S.
О мудрейший Гесер! предлагаю создать раздел на форуме для разработчиков. Вот под такие вот топики...

Зайцев Олег
22.12.2004, 15:14
Господа программеры, подскажите, плиз, по сабжу. Имеется хэндл процесса, нужно получить полный путь к бинарнику. В NT на этот случай есть psapi, а чем бы воспользоваться в 98х ? Вот такой вот вопрос возник в моей больной после вчерашнего голове...

P.S.
О мудрейший Гесер! предлагаю создать раздел на форуме для разработчиков. Вот под такие вот топики...

В Win98 есть аналог PSAPI - Toolhelp32. Соответственно CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID) создает для заданного PID список библиотек, а CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) создает список процессов. Перемещение по спискам - Module32First/Module32Next и Process32First/Process32Next. В полученных списках есть PID всех процессов и модулей.
С другой стороны, что у нас на входе - хендл процесса (полученный после OpenProcess) или все-аки его PID ??
Просто
HANDLE OpenProcess(
DWORD dwDesiredAccess,***// access flag
BOOL bInheritHandle,***// handle inheritance flag
DWORD dwProcessId ***// process identifier
);***
требует знания PID процесса ... поэтому скорее всего PID известен и все решаемо описанными выше функциями

Geser
22.12.2004, 18:30
О мудрейший Гесер! предлагаю создать раздел на форуме для разработчиков. Вот под такие вот топики...

А нужно? Есть же вроде крутые форумы по С++

Xen
22.12.2004, 20:09
С тулхелпом вроде все понятно, только соответствующее поле структуры PROCESSENTRY32 (или как-то так, пишу по памяти) заполняется именем файла, а не полным именем, включающим path к нему...

Sanja
23.12.2004, 12:38
под ХП тебе придется для кожлого процесса считывать еще и MODULEENTRY32 и уже там 1 модулем будет полное имя процесса

Aizek
21.01.2005, 14:39
С тулхелпом вроде все понятно, только соответствующее поле структуры PROCESSENTRY32 (или как-то так, пишу по памяти) заполняется именем файла, а не полным именем, включающим path к нему...

typedef struct tagPROCESSENTRY32 {
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
DWORD th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
char szExeFile[MAX_PATH];
} PROCESSENTRY32;
szExeFile Path and filename of the executable file for the process.
тебе нужен именно szExeFile