Delphi 中如何取某一进程所加载的所有dll? 取得某进程加载调用的所有dll.包括静态加载和动态加载. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 需要自己翻译一下http://msdn.microsoft.com/en-us/library/ms686849.aspx 找到一个Delphi版的,你可以试试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;摘自:http://topic.csdn.net/u/20090725/11/69a3fa31-d978-4c3d-8c6c-b04dcd0bb322.html 也可以用OpenProcess,EnumProcessModules配合GetModuleFileNameEx来使用函数在PSAPI单元 昨天刚发帖就在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; fastreport 3.0打印第二页线条模糊 Delphi 中连接远程数据库的问题 求救!! 程序版本号的问题 如何使程序不在任务栏上出现相应的图标?? 请问如何将datetimepicker初始化为空值呢? 如何把从用clientdataset找出的数据加到combobox中? 字符串string,怎么转换成整数,integer,类型。 急!急!急! 菜鸟的问题能不能给讲一下 和给个例子TShellTreeView和TShellListView 给讲讲谢谢了 在戴妃中用过TTS的人请进 delphi 连接DBF问题 **关于内存和指针操作,数据类型转换本质的理解
http://msdn.microsoft.com/en-us/library/ms686849.aspx
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
函数在PSAPI单元
散分,散分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;