首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请问一个进程结束的有关问题

2012-01-28 
请教一个进程结束的问题我想删除一个正在运行的病毒文件知道了路径e:\eee\a1.exe想从进程列表中找到这个进

请教一个进程结束的问题
我想删除一个正在运行的病毒文件
知道了路径e:\eee\a1.exe

想从进程列表中找到这个进程并结束它,请问该怎么写,用到哪些主要的api
谢谢了

[解决办法]
给你点提示,以前别人写的代码

void CDlgProcManage::OnRefresh() //显示当前所有进程,放入一ListBox
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
m_wndList.ResetContent();
HANDLE hSnapshot; // 创建一快照句柄
hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe;
Process32First(hSnapshot,&pe); // 先搜索系统中的第一个进程信息
do // 下面对系统中的所有信息进行过滤,并保存其信息
{
int index=m_wndList.AddString(pe.szExeFile); // 把进程对应的文件路径填入列表框
m_wndList.SetItemData(index, pe.th32ProcessID); // 设置列表框中该项的Data号为相应的进程的ID号,利于以后终止该进程。
}
while(Process32Next(hSnapshot,&pe));



CloseHandle(hSnapshot); // 关闲快照句柄
//GetDlgItem(IDC_STOP)-> EnableWindow(FALSE); // 由于此时列表框中尚未有选择,故按纽IDC_STOP的状态应为Disable

}

void CDlgProcManage::OnStop()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
int index=m_wndList.GetCurSel(); // 获取此时列表框中的所选项
DWORD data=m_wndList.GetItemData(index); // 获取所选项的的数据,即该项对应的进程ID
HANDLE hProcess;
hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,data); // 利用进程ID值,打开该进程,获得进程句柄,PROCESS_TERMINATE表示可以用 TerminateProcess() 函数来终止该进程。
if(hProcess)
TerminateProcess(hProcess,0); // 这里是你要的,这里开始杀死进程

else
MessageBox( "=== 该进程可能已被终止 === ");
Sleep(500); // 延迟一段时间,以便系统正确响应
OnRefresh();

}

可以参考上面的程序,首先获得你要杀的进程的PID,然后就可以杀了
在XP下使用上面的程序需要包含tlhelp32.h和th32.lib

热点排行