Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› Помогите со списоком .dll в .exe
Посл.ответ Сообщение

Ранг: 46.9 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 01 июля 2007 06:29
· Личное сообщение · #1

Есть фунция:
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;
pid : integer;
begin
Result := False;
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;
pid:=2404;
FillChar(ma, SizeOF(TModuleArray), 0);
MessageBox(0,PCHar(IntToStr(OpenProcess(PROCESS_ALL_ACCESS, true, pid))),0,0);
if EnumModType(EnumProc)(OpenProcess(PROCESS_ALL_ACCESS,true, pid), 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);
begin
S := FileName;
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;

Поулучает список .dll подруженных в определенный .exe =) писал сам поэтому,что то работает некорректно тоесть получает список .dll только в своем .exe если у кого есть корректно работающая фунция получения списка библиотек по имени процесса или PID был бы очень благодарен выложите



Ранг: 46.9 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 01 июля 2007 06:40 · Поправил: Zloy
· Личное сообщение · #2

Вот примерно,что надо бы




Ранг: 56.3 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 01 июля 2007 07:18
· Личное сообщение · #3

function TForm1.FillModuleTable(PID: dword): boolean;
var
Module: TModuleEntry32;
hSnapshot: dword;
i:dword;
begin
Result := False;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID);
if hSnapshot = 0 then exit;
Module32First(hSnapshot, Module);
i := 0;
ListView2.Clear;
repeat
ListView2.Items.Add.Caption := Module.szExePath;
ListView2.Items[i].SubItems.Add(IntToHex(Module.hModule, 8));
ListView2.Items[i].SubItems.Add(IntToHex(Module.modBaseSize, 8));
inc(i);
until not Module32Next(hSnapshot, Module);
CloseHandle(hSnapshot);
Result := True;
end;


PS Мля, уже первое Июля...



Ранг: 46.9 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 01 июля 2007 07:38
· Личное сообщение · #4

Спасиба чел



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 02 июля 2007 00:39
· Личное сообщение · #5

всё это можно было спросить у гугла или MSDN'а...


 eXeL@B —› Программирование —› Помогите со списоком .dll в .exe
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати