Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.28;
Скачать: CL | DM;

Вниз

Как получить список работающих на данный момент DLL от всех   Найти похожие ветки 

 
dreamse   (2008-02-11 17:56) [0]

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

Есть код позволяющий получить список 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 18:07) [1]

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


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

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

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

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

GetCurrentProcess ?


 
clickmaker ©   (2008-02-11 19:25) [3]


>  [2] dreamse   (11.02.08 18:59)

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



Страницы: 1 вся ветка

Текущий архив: 2008.12.28;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
15-1225264023
depr
2008-10-29 10:07
2008.12.28
Извиняюсь. Еще вопросик, не успел.


2-1226862680
Лешка
2008-11-16 22:11
2008.12.28
Картинка из интернета


2-1226578957
misha_shar
2008-11-13 15:22
2008.12.28
Cobitia


2-1227036079
front
2008-11-18 22:21
2008.12.28
Объявление переменной


15-1225463695
Циркуль
2008-10-31 17:34
2008.12.28
Нашел какую-то фичу (может глюк) в D6...