Функция GetModuleFileName извлекает полный путь доступа к файлу, содержащему указанный модуль, которым владеет текущий процесс.
GetModuleFileName работает только с модулями, которыми владеет текущий процесс. Чтобы определить модули, которые принадлежат другому процессу, используют функцию GetModuleFileNameEx.
Синтаксис
DWORD GetModuleFileName( HMODULE hModule, LPTSTR lpFilename, DWORD nSize); |
Параметры
hModule
[in] Дескриптор модуля, путь к которому требуется. Если этот параметр - ПУСТО (NULL), GetModuleFileName извлекает путь к исполняемому файлу текущего процесса.lpFilename
[out] Указатель в буфер, получающий символьную строку с нулем в конце, которая определяет полный путь доступа к модулю. Если длина пути выходит за пределы размера, который определяет параметр nSize, функция завершается успешно, но строка обрезается до величины nSize и не может быть символом конца строки ('\0').Возвращенная строка будет использовать тот же самый формат, который устанавливался при загрузке модуля. Поэтому, путь может быть с длинным или коротким именем файла, и может использовать префикс " \\?\ ". Дополнительную информацию, см. в статье Именование файлов.
Чтобы отделить путь от имени файла и расширения, используйте функцию PathRemoveFileSpec.
Обратите внимание! на то, что эта функция не поддерживает пути с префиксом " \\?\". |
nSize
[in] Размер буфера lpFilename, в TCHARs.Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - длина строки, которая копируется в буфер, в TCHARs. Если буфер является слишком маленьким, чтобы вместить имя модули, строка обрезается до величины nSize, а функция возвращает значение nSize.
Если функция завершается ошибкой, возвращаемое значение - 0 (нуль). Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Замечания
Если DLL загружена в два процесса, ее имя файла в первом процессе может отличаться от его имени файла в другом процессе.
Для функции версии ANSI, число TCHARs - число байтов; для версии Unicode, это - число символов.
Глобальная переменная _pgmptr автоматически инициализируется полным путем исполняемого файла и может быть использована, чтобы извлечь полное имя пути исполняемого файла.
Windows Me/98/95: Эта функция извлекает длинные имена файла, когда номер версии приложения больше чем или равен 4.00, а длинное имя файла доступно. В противном случае, она возвращает только имена файла формата 8.3.Код примера
Пример, см. в статье Установка службы.
Смотри также
Обзор Динамически подключаемые библиотеки (DLL), Функции, используемые DLL, GetModuleFileNameEx , GetModuleHandle, LoadLibrary
Размещение и совместимость GetModuleFileName |
||
К |
Windows XP |
Да |
л |
Windows 2000 Professional |
Да |
и |
Windows NT Workstation |
Да |
е |
Windows Me |
Да |
н |
Windows 98 |
Да |
т |
Windows 95 |
Да |
С |
Windows Server 2003 |
Да |
е | Windows 2000 Server | Да |
р | Windows NT Server | Да |
в | ||
е | ||
р | ||
Используемая библиотека |
Kernel32.lib |
|
Используемая DLL | kernel32.dll | |
Заголовочный файл | ||
- объявлено в |
Winbase.h |
|
- включено в |
- |
|
Unicode |
Реализовано как GetModuleFileNameW(Unicode) и GetModuleFileNameA(ANSI). |
|
Замечания по платформе |
Не имеется |