|
|
|

| | | | | | | | |  |
 | 
 | Code source : unité LRJ_WinModule |  |

|  |
 | |  |

|
Description : cette unité contient les objets LRJ_TProcModule et LRJ_TProcModuleList.
LRJ_TProcModuleList contient la liste des objets LRJ_TProcModule qui
encapsulent les modules utlisés par un processus. LRJ_TProcModule permet de connaître le nom
et de lire certaines des informations du module sous-jacent.
L'unité est livrée avec une application de démonstration (
voir description plus loin
) qui utilise les fonctionnalités des
objets contenus dans l'unité. Les codes de l'application
sont livrés avec l'unité pour illustrer comment utiliser les objets de
cette unité. L'application de démonstration utilise les unités
LRJ_GridsPlus et
LRJ_WinProcess non livrées avec l'application.
L'unité LRJ_WinModule met en oeuvre les fonctions de Windows suivantes :
|
|
EnumProcessModules
GetModuleFileNameEx
GetModuleInformation
|
Déclarations publiques de l'unité
I
Télécharger l'application de démonstration
I
Exemples d'utilisations
Utilise les unités : Windows,
LRJ_WindowsPlus et
LRJ_ClassesPlus.
Version : 1 du 23.05.2009
Auteur : Laurent Hède
Copyright : LorenJo
Nombre de lignes : 353
Réalisée sous : Delphi 6
Systèmes compatibles : NT4, 2000, XP, Vista, serveurs
Prix : 80.00 € H.T.
Déclarations publiques de l'unité :
unit LRJ_WinModule;
interface
uses
Windows,
LRJ_WindowsPlus,
LRJ_ClassesPlus;
function LRJ_GetModuleBaseName(const hProcess: THandle; const hModule: HMODULE; var AFileName: string): boolean;
function LRJ_EnumProcessModules(const hProcess: THandle; const lphModule: pointer; const cb: DWORD;
var cbNeeded: DWORD) : boolean;
function LRJ_GetModuleFileNameEx(const hProcess: THandle; const hModule: HMODULE; var Filename: string): boolean;
.............
function LRJ_GetModuleInformation(const hProcess: THandle;const hModule: HMODULE; const lpmodinfo: LRJ_PMODULEINFO): boolean;
type
//------------OBJET----------------------------
LRJ_TProcModule = class(TObject)
.............
property Handle: HMODULE read MOHandle;
property ProcessHandle: THandle read MOProcessHandle;
property FileName: string read GetFileName;
property BaseOfDll: pointer read GetBaseOfDll;
property SizeOfImage: DWORD read GetSizeOfImage;
property EntryPoint: Pointer read GetEntryPoint;
end;//-----------FIN--------------------------
// Il faut passer un handle de processus ouvert avec les droits PROCESS_QUERY_INFORMATION et PROCESS_VM_READ
//------------OBJET----------------------------
LRJ_TProcModuleList = class(TObject)
.............
procedure Refresh;
function Count: integer;
property ProcessHandle: THandle write SetProcessHandle;
property Modules[const Aindex: integer]: LRJ_TProcModule read GetModule;
end;//-----------FIN--------------------------
|
Application de démonstration

Le ComboBox processes contient la liste des processus dont la liste des modules est
accessible.
En sélectionnant un processus dans le ComboBox, la liste est chargée avec les modules utilisés
par le processus.
En cliquant sur une ligne correspondant à un module dans la liste, les informations
disponibles avec la fonction GetModuleInformation sont affichées dans la grille.
Exemples d'utilisations
Charger la liste des modules d'un processus dont l'ID est contenu dans ComboBox1 dans
ListBox1.
var
zProcessID: Integer;
i: integer;
zModule: LRJ_TProcModule;
zMaxWidth: integer;
begin
zMaxWidth := 0;
ClearProcess;
ListBox1.ItemIndex := -1;
if ComboBox1.ItemIndex < 0 then EXIT;
zProcessID := ExtractID(ComboBox1.Items[ComboBox1.ItemIndex]);
MOHandleProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, zProcessID);
MOModules := LRJ_TProcModuleList.Create;
MOModules.ProcessHandle := MOHandleProcess;
ListBox1.Items.BeginUpdate;
ListBox1.Clear;
ListBox1.Items.Capacity := MOModules.Count;
for i:=0 to MOModules.Count-1 do
begin
zModule := MOModules.Modules[i];
ListBox1.Items.AddObject(zModule.FileName, zModule);
zMaxWidth := Max(zMaxWidth, Canvas.TextWidth(zModule.FileName));
end;
ListBox1.Items.EndUpdate;
ListBox1.ScrollWidth := zMaxWidth + 10;
if zMaxWidth > CtMaxWidthListBax then zMaxWidth := CtMaxWidthListBax;
ListBox1.Width := zMaxWidth + 10;
MOStrGridInfo.ClearCellsNotFixed;
ResizeStrGrid;
Label2.Caption := CTTexteBaseListeModules + ' (' + IntToStr(MOModules.Count) + ')';
end;
|
Vous n'avez pas trouvé d'exemple répondant à votre problématique ?
Cliquez sur ce lien.
|
|
 |
 | |  |
|
|