Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить список работающих на данный момент DLL от всех [D7, WinXP]


dreamse ©   (2008-02-11 17:56:00) 

процессов. или от персонального процесса указанного в программе.

Есть код позволяющий получить список dll которые используються в нашем приложении. А как получить список всех DLL которые активны на данный момент ?

Код для получения списка DLL своего приложения


unit ModuleProcs;

interface

uses
 Windows, Classes;

type
 TModuleArray = array [0..400] of HMODULE;
 TModuleOption = (moRemovePath, moIncludeHandle);
 TModuleOptions = set of TModuleOption;

function GetLoadedDLLList(sl: TStrings;
 Options: TModuleOptions = [moRemovePath]): Boolean;

implementation

uses
 SysUtils;

function GetLoadedDLLList(sl: TStrings;
 Options: TModuleOptions = [moRemovePath]): Boolean;
type
 EnumModType = function (hProcess: Longint; lphModule: TModuleArray;
 cb: DWord; var lpcbNeeded: Longint): Boolean; stdcall;
var
 psapilib: HModule;
 EnumProc: Pointer;
 ma: TModuleArray;
 I: Longint;
 FileName: array[0..MAX_PATH] of Char;
 S: string;
begin
 Result := False;

 (* Данная функция запускается только для Widnows NT *)
 if Win32Platform <> VER_PLATFORM_WIN32_NT then
   Exit;

 psapilib := LoadLibrary('psapi.dll');
 if psapilib = 0 then
   Exit;
 try
   EnumProc := GetProcAddress(psapilib, 'EnumProcessModules');
   if not Assigned(EnumProc) then
     Exit;
   sl.Clear;
   FillChar(ma, SizeOF(TModuleArray), 0);
   if EnumModType(EnumProc)(GetCurrentProcess, ma, 400, I) then
   begin
     for I := 0 to 400 do
       if ma[i] <> 0 then
       begin
         FillChar(FileName, MAX_PATH, 0);
         GetModuleFileName(ma[i], FileName, MAX_PATH);
         if CompareText(ExtractFileExt(FileName), '.dll') = 0 then
         begin
           S := FileName;
           if moRemovePath in Options then
             S := ExtractFileName(S);
           if moIncludeHandle in Options then
             sl.AddObject(S, TObject(ma[I]))
           else
             sl.Add(S);
         end;
       end;
   end;
   Result := True;
 finally
   FreeLibrary(psapilib);
 end;
end;

end.


clickmaker   (2008-02-11 19:25:00) [1]


>  [2] dreamse   (11.02.08 18:59)

GetCurrentProcess -- это только для твоего.
для чужих нужно OpenProcess делать


dreamse   (2008-02-11 18:59:00) [2]

> clickmaker ©   (11.02.08 18:07) [1]

Это понятно :)

Я только к сожалению не смог разобраться с вышеприведенным кодом, где там указывать путь или Id процесса ?

GetCurrentProcess ?


clickmaker   (2008-02-11 18:07:00) [3]

Process32First, Process32Next, ну и получать список DLL, загруженных каждым


Наверх

Титульная страница Поиск, карта сайта Написать письмо