Delphi 中如何取某一进程所加载的所有dll?

SxSQuid 2011-09-20 02:04:19
取得某进程加载调用的所有dll.包括静态加载和动态加载.
...全文
209 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
浩南_哥 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 funxu 的回复:]

1L不带这样的,回复的也太快了啊,好不容易懂一道题的说
[/Quote]
呵呵 最近比较闲。
僧多粥少啊。
蓝色光芒 2011-09-20
  • 打赏
  • 举报
回复
也可以用OpenProcess,EnumProcessModules配合GetModuleFileNameEx来使用
函数在PSAPI单元
funxu 2011-09-20
  • 打赏
  • 举报
回复
1L不带这样的,回复的也太快了啊,好不容易懂一道题的说
浩南_哥 2011-09-20
  • 打赏
  • 举报
回复
找到一个Delphi版的,你可以试试

uses tlhelp32;

//根据进程名称获取进程ID
function TForm1.GetProcessIDByName(const ProcessName: string): DWORD;
var
FSnapshotHandle: THandle;
pe: PROCESSENTRY32;
begin
result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe.dwSize := SizeOf(PROCESSENTRY32);
if (Process32First(FSnapshotHandle, pe)) then
begin
while (Process32Next(FSnapshotHandle, pe)) do
begin
if (UpperCase(ExtractFileName(pe.szExeFile)) = UpperCase(ProcessName)) then
begin
Result := pe.th32ProcessID;
end;
end;
end;
CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
pid: dword;
hnd: THandle;
hModuleSnap: THandle;
me32: MODULEENTRY32;
begin
pid := GetProcessIDByName(edit1.Text);
hnd := openprocess(PROCESS_ALL_ACCESS, FALSE, pid);
hModuleSnap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
if hModuleSnap = INVALID_HANDLE_VALUE then
exit;
me32.dwSize := SizeOf(MODULEENTRY32);
if Module32First(hModuleSnap, me32) then
begin
repeat
Memo1.Lines.Add(format('MODULE NAME: %s', [me32.szModule]));
Memo1.Lines.Add(format('executable: %s', [me32.szExePath]));
Memo1.Lines.Add(format('process id: %d', [me32.th32ProcessID]));
Memo1.Lines.Add(format('ref count(g):%d', [me32.GlblcntUsage]));
Memo1.Lines.Add(format('ref count(p):%d', [me32.ProccntUsage]));
Memo1.Lines.Add(format('base address:%d', [DWORD(me32.modBaseAddr)]));
Memo1.Lines.Add(format('base size: %d', [me32.modBaseSize]));
until not Module32Next(hModuleSnap, me32);
end;
CloseHandle(hModuleSnap);
end;

摘自:http://topic.csdn.net/u/20090725/11/69a3fa31-d978-4c3d-8c6c-b04dcd0bb322.html
浩南_哥 2011-09-20
  • 打赏
  • 举报
回复
SxSQuid 2011-09-20
  • 打赏
  • 举报
回复
昨天刚发帖就在pudn下了个例子
散分,散分

procedure GetModules(ProcessID : DWORD; pmList : TStringList);
var
hSnap : THandle;
ModuleEntry : TModuleEntry32;
Proceed : Boolean;
begin
pmList.Clear;
hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessID);
if HSnap <> INVALID_HANDLE_VALUE then begin
ModuleEntry.dwSize := SizeOf(TModuleEntry32);
Proceed := Module32First(hSnap, ModuleEntry);
while Proceed do
begin
with ModuleEntry do
pmList.Add(ModuleEntry.szModule);
Proceed := Module32Next(hSnap, ModuleEntry);
end;
CloseHandle(hSnap);
end;
end;

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧