Главная страница
    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.45 MB
Время: 0.004 c
1-1204962203
GrafDrakula
2008-03-08 10:43
2008.12.28
Прозрачный Listbox1, memo(richedit)


15-1224761475
pochemuchka
2008-10-23 15:31
2008.12.28
Не генерируется объявление класса в HPP


15-1225121537
Xenus
2008-10-27 18:32
2008.12.28
Возведение в степень - что быстрее?


2-1226928481
noob_one
2008-11-17 16:28
2008.12.28
Query.Eof или Query.recordcount.


15-1225186008
axd
2008-10-28 12:26
2008.12.28
Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский