Главная страница
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.017 c
15-1224495980
Добежал
2008-10-20 13:46
2008.12.28
Vista и The Bat 2.x


2-1226769630
DOjD
2008-11-15 20:20
2008.12.28
Схему рабочего механизма


2-1227080020
Andrey_ka
2008-11-19 10:33
2008.12.28
ошибка при закрытии проэкта


15-1223781352
Riply
2008-10-12 07:15
2008.12.28
Тем, кому я не смогла ответить.


2-1227103489
noob_one
2008-11-19 17:04
2008.12.28
Поделитесь пожалуйста алгоритмом перебора сочетаний