#include "TLHELP32.H"//一定要加如这个头文件
遍历进程
void CShowAllProcessDlg::OnGetProcess()
{
// TODO: Add your control notification handler code here
HANDLE Snapshot;
Snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//获得某一时刻系统的进程、堆(heap)、模块(module)或线程的快照信息
PROCESSENTRY32 processListStr;
processListStr.dwSize=sizeof(PROCESSENTRY32);
BOOL return_value;
return_value=Process32First(Snapshot,&processListStr);
//获得系统进程链表中第一个进程的信息
m_showlist.DeleteAllItems();
int i=0;//item index
while(return_value)
{
m_showlist.InsertItem(i,processListStr.szExeFile,0);
CString s;
s.Format("%d",processListStr.cntThreads);
m_showlist.SetItemText(i,1,s);
s.Format("%d",processListStr.th32ParentProcessID);
m_showlist.SetItemText(i,2,s);
s.Format("%d",processListStr.pcPriClassBase);
m_showlist.SetItemText(i,3,s);
int memory=processListStr.cntThreads;
m_ProcessIndex[i]=processListStr.th32ProcessID;//save ID into array to teminate
return_value=Process32Next(Snapshot,&processListStr);
//获得系统进程链表中下一个进程的信息
i++;
}
}
关闭进程
void CShowAllProcessDlg::OnStopProcess()
{
//先获得该进程句柄,通过进程标识
HANDLE ProcessHandle;
ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_ProcessIndex[currentSelect]);
//利用数组ID指定的获得存在的一个进程的句柄
if(ProcessHandle)
{
TerminateProcess(ProcessHandle,0);
AfxMessageBox("指定进程已终止!");
}
else
{
AfxMessageBox("系统不允许终止指定进程!");
}
}
loadlibrary("user32.dll");
取得IsHungAppWindow()导出函数,用来判断窗口是否Hung
Enumwindows(...,...) 遍历窗体实现,GetWindowThreadProcessid()取得processid,
再根据pwnd->GetParent()是否为空,取得相关的Pid进行比较