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
begin
process:= GetCurrentProcess;
result:= _GetModuleFileNameEx(process, DLLHandle);
end
else
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;
| Articles | |
Delphi 2005 : Découvrez le futur Delphi 2005
| |
DirectX : Introduction à DirectX 9 en Delphi
| |
Variables d'environnement : Présentation, description et utilisation des variables d'environnement sous Windows
| |
Mailslots : Présentation des mailslots et de leur utilisation en Delphi pour la communication inter-processus
| | Projets complets avec sources | |
NumericalParser : Parser numérique en Delphi afin de transformer une chaîne de caractères en
valeur flottante ou entière.
| |
RegSearch : Composant de recherche dans la base de registre
| |
CDAReader : Lecture des informations contenues dans les fichier CDA de Windows
| |
ScreenSaverPreview : Composant d'affichage de l'aperçu des économiseurs d'écran de Windows
| |
ScanResources : Programme d'exploration des ressources des programmes ou des dll d'un répertoire
| |
ClipboardViewer : Démonstration de la détection des modifications et de l'affichage du contenu du presse-papier
| |
Matrix : Tentative de reproduction en Delphi de l'animation bien connue du film Matrix
| | Sources et exemples | |
EMFTransform : Transformation (rotation, inversion, miroir) d'un metafile Windows en mémoire
| |
DeleteKeyTree : Suppression récursive d'un clé de la base de registre
| |
MultiStrings : Routines de gestion de tableaux de chaînes C
| |
GetDllFilename : Pour récupérer le chemin d'une dll par son handle
| |
Extension du shell : Exemple d'extension du menu contextuel du shell de Windows
| |
TriStringGrid : Exemple de tri par colonne d'un composant TStringGrid à l'aide d'un algorithme
de tri rapide (quick sort)
| |
XPManifestCPL : Utilisation des contrôles XP dans une application du panneau de configuration (cpl)
| |
Bouboules : Modélisation à l'aide du design pattern Observer
| | Divers | |
Diagramme ternaire : Un logiciel gratuit de tracé de diagramme ternaire
|
|
|