Delphi 中如何取某一进程所加载的所有dll?
取得某进程加载调用的所有dll.包括静态加载和动态加载.
[解决办法]
需要自己翻译一下
http://msdn.microsoft.com/en-us/library/ms686849.aspx
[解决办法]
找到一个Delphi版的,你可以试试
- Delphi(Pascal) code
uses tlhelp32;//根据进程名称获取进程IDfunction 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;
[解决办法]
1L不带这样的,回复的也太快了啊,好不容易懂一道题的说
[解决办法]
也可以用OpenProcess,EnumProcessModules配合GetModuleFileNameEx来使用
函数在PSAPI单元