Developpez.com

Delphi

Choisissez la catégorie, puis la rubrique :


Récupérer le chemin d'un module (exe ou dll) à partir de son handle

Date de publication : 24/02/2005

Par Pierre Castelain (Contributions)
 

Une fonction permettant de récupérer le chemin exact d'un module (exécutable ou dll) par son handle



Une fonction relativement utile quand on veut connaître le chemin d'une dll, en particulier s'il s'agit d'une dll COM.

Cette fonction gère correctement les 2 types de système d'exploitation possibles (Win9x et WinNT).

interface uses Windows; function GetDLLFilename(DLLHandle: THandle): string; implementation uses SysUtils, PsAPI, TlHelp32; function _GetModuleFileNameEx(AProcess: DWORD; AModule: HMODULE; StringSize : integer = MAX_PATH): string; var lpFileNameEx: PChar; nSize: Cardinal; res: DWORD; begin nSize:= StringSize; lpFileNameEx:= StrAlloc(nSize); res:= GetModuleFileNameEx(AProcess, AModule, lpFileNameEx, nSize); if res = 0 then raise Exception.Create(SysErrorMessage(GetLastError)); if res = nSize then result:= _GetModuleFileNameEx(AProcess, AModule, nSize * 2) else result:= lpFileNameEx; StrDispose(lpFileNameEx); end; function GetDLLFilename(DLLHandle: THandle): string; var process: DWORD; h: THandle; me: TModuleEntry32; begin if Win32Platform = VER_PLATFORM_WIN32_NT then // NT4, 2000, XP begin process:= GetCurrentProcess; result:= _GetModuleFileNameEx(process, DLLHandle); end else // Windows 95, 98, Me begin h:= CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessID); result:= ''; if h = 0 then exit; FillChar(me, 0, SizeOf(me)); me.dwSize:= SizeOf(me); if Module32First(h, me) then repeat if me.hModule = DLLHandle then begin result:= me.szExePath; break; end; until not Module32Next(h, me); CloseHandle(h); end; end;


Copyright © Pierre Castelain. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -