Другие языки программирования и технологии

Как узнать путь к исполняемой программе с помощью функций API ?

GetModuleFileName

Функция GetModuleFileName позволяет получить полный путь для указанного модуля.

Чтобы указать процесс, который содержит указанный модуль, прийдётся воспользоваться функцией GetModuleFileNameEx.

DWORD GetModuleFileName(
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);

Параметры

hModule
[на входе] Дескриптор модуля, чей путь мы хотим узнать. Если этот параметр равен NULL, GetModuleFileName возвратит путь текущего модуля.
lpFilename
[на выходе] Указатель на буфер, который будет содержать строку (завершающуюся нулём) с полным путём модуля. Если длина пути превышает размер, указанный в параметре nSize, то функция вернёт путь, но он будет обрезан до nSize символа и может не содержать в конце нулевого символа.

Windows NT/2000/XP: Путь может иметь префикс "\\?\", в зависимости от того, как был загружен модуль.
nSize
[на входе] Размер буфера lpFilename в TCHAR-ах.

Возвращаемое значение

Если функция выполнена успешно, то возвращаемое значение, это длина строки, скопированной в буфер в TCHAR-ах. Если буфер слишком мал для хранения имени модуля, то строка будет обрезана до nSize символа, а функция вернёт значение nSize.

Если при выполнении функции возникнет ошибка, то возвращаемое значение будет равно нулю.
Замечания

Если DLL загружена в два процесса, то её имя в одном процессе может отличаться от имени в другом процессе.

Для ANSI версии функции, количество TCHAR-ов, это количество байт; для Unicode версии, это количество символов.
Требования

Windows NT/2000/XP: Включена в Windows NT 3.1 и позже.
Windows 95/98/Me: Включена в Windows 95 и позже.
Unicode: Для Windows NT/2000/XP существует как Unicode, так и ANSI версии.
Заголовок: Объявлена в Winbase.h; Windows.h.
Библиотека: Kernel32.lib.
Александр Хомяков
Александр Хомяков
17 300
Лучший ответ

Похожие вопросы