Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.12.28;
Скачать: [xml.tar.bz2];

Вниз

Как получить список работающих на данный момент 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.12.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
2-1226861210
demon
2008-11-16 21:46
2008.12.28
Как через WinAPI узнать положение окна?


2-1227004020
Apachi
2008-11-18 13:27
2008.12.28
Создание одной переменной несколько объектов


15-1225539231
Кое кто
2008-11-01 14:33
2008.12.28
Где можно посмотреть модели очень


2-1226992902
RamzesIII
2008-11-18 10:21
2008.12.28
TQRCahr


15-1224145808
Kerk
2008-10-16 12:30
2008.12.28
MMP 24 октября





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский