通过进程句柄关闭某个程序的进程

下面是具体代码
总共分为两个过程
EnumProcTree 主要用来枚举句柄树
KillProc 关闭某个程序的进程


procedure EnumProcTree(const PID: DWORD;
out PID_Tree: TPIDTree);

procedure ListTree(RootPID: DWORD);
var
hP_Root: THandle;
Found: Boolean;
Pn: TProcesseNtry32;
hSnap: THandle;
begin
hP_Root := OpenProcess(PROCESS_ALL_ACCESS, False, RootPID);
if hP_Root <> 0 then
begin
CloseHandle(hP_Root);

SetLength(PID_Tree, Length(PID_Tree) + 1);
PID_Tree[Length(PID_Tree) - 1] := RootPID;

hSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
Pn.dwSize := SizeOf(TProcesseNtry32);
Found := Process32First(hSnap, Pn);
while Found do
begin
if RootPID = Pn.th32ParentProcessID then
begin
ListTree(Pn.th32ProcessID);
end;
Found := Process32Next(hSnap, Pn);
end;
CloseHandle(hSnap);
end;
end;
begin
SetLength(PID_Tree, 0);
ListTree(PID);
end;

全部代码可以到
[url]http://www.xszlo.com/article/2012-12-24/7746.html[/url]
查看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`GetModuleFileNameEx` 和 `EnumProcessModules` 是用于获取某个进程的模块信息的函数,其中 `GetModuleFileNameEx` 可以获取指定进程中指定模块的路径,而 `EnumProcessModules` 可以枚举指定进程中的所有模块。 下面是一个示例,展示如何使用这两个函数获取一个进程的模块路径: ```c++ #include <Windows.h> #include <Psapi.h> #include <iostream> int main() { DWORD pid = 1234; // 假设要获取的进程的 PID 是 1234 // 打开进程句柄 HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid); if (hProcess == NULL) { std::cout << "打开进程失败" << std::endl; return 1; } // 获取进程模块句柄 HMODULE hModule; DWORD cbNeeded; if (!EnumProcessModules(hProcess, &hModule, sizeof(hModule), &cbNeeded)) { std::cout << "获取模块句柄失败" << std::endl; CloseHandle(hProcess); return 1; } // 获取模块路径 TCHAR szModName[MAX_PATH]; if (!GetModuleFileNameEx(hProcess, hModule, szModName, MAX_PATH)) { std::cout << "获取模块路径失败" << std::endl; CloseHandle(hProcess); return 1; } std::cout << "进程 " << pid << " 的模块路径是:" << szModName << std::endl; CloseHandle(hProcess); return 0; } ``` 其中,`pid` 是要获取的进程的 PID,可以通过其他方式获取。在本示例中,我们假设要获取的进程的 PID 是 1234。 首先,我们打开进程句柄,然后使用 `EnumProcessModules` 函数获取进程模块句柄。由于我们只需要获取一个模块的路径,因此这里只枚举了一个模块。 接着,我们使用 `GetModuleFileNameEx` 函数获取模块的路径,将其存储在 `szModName` 变量中,并输出到控制台。 最后,我们关闭进程句柄,结束程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值