1,184
社区成员
发帖
与我相关
我的任务
分享
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;