900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 模拟windows任务管理器列举系统进程 并关闭进程......

模拟windows任务管理器列举系统进程 并关闭进程......

时间:2021-12-07 08:08:03

相关推荐

模拟windows任务管理器列举系统进程 并关闭进程......

其实对于 windows进程的操作很简单,只要理解了 进程线程的概念 对于 进程的操作 那么就只是 几个函数的 问题了 。

下面是 对于进程操作要用到的几个函数 。

进程的概念:我们运行了一个程序,那个这个独立的程序就是一个进程。进程有自己的私有地址空间,进程中的线程共享这些私有地址空间 。

在一个进程中多个线程共同完成一项功能,可以提高工作的效率。

HANDLE WINAPI CreateToolhelp32Snapshot(//这个函数创建一个系统进程列表的快照 并返快照的句柄 用于操作

DWORDdwFlags,

DWORDth32ProcessID

);

BOOL WINAPI Process32First(//根据进程快照句柄检索快照列表中第一个进程

HANDLEhSnapshot,

LPPROCESSENTRY32lppe

);

BOOL WINAPI Process32Next( //根据进程快照句柄 循环检索进程信息 。。

HANDLEhSnapshot,

LPPROCESSENTRY32lppe

);

HANDLE OpenProcess( //给定一个进程ID 我们可以打开并且获取句柄 用于 ReadProcessMemory WriteProcessMemory 等等的线程插入使用

DWORDdwDesiredAccess,// access flag

BOOLbInheritHandle,// handle inheritance option

DWORDdwProcessId// process identifier

);

BOOL TerminateProcess(//根据指定进程句柄关闭进程

HANDLEhProcess,// handle to the process

UINTuExitCode// exit code for the process

);

typedef struct tagPROCESSENTRY32 {//进程信息结构体 用于接收进程的各种信息

DWORD dwSize;

DWORD cntUsage;

DWORD th32ProcessID;

ULONG_PTR th32DefaultHeapID;

DWORD th32ModuleID;

DWORD cntThreads;

DWORD th32ParentProcessID;

LONG pcPriClassBase;

DWORD dwFlags;

TCHAR szExeFile[MAX_PATH];

} PROCESSENTRY32;

typedef PROCESSENTRY32 *PPROCESSENTRY32;

BOOL ExitWindowsEx(

UINTuFlags,// shutdown operation

DWORDdwReason// shutdown reason

);

第一个参数的取值

休眠

下面是一段例子代码 在SDI下测试运行 在视图类中定义一个 CListCtrl类的对象c

然后定义一个 进程信息类

class ProcessInfo

{

public:

ProcessInfo(){index=0 ;}

int index ;

DWORD hArray[100] ;

};

这些都放在视图的操作中 ,如果这些做完了 那么就相应copy下面的代码

void CMyView::OnInitialUpdate() //视图初始化.....

{

CView::OnInitialUpdate();

GetDocument()->SetTitle("系统进程查看器--MadeBy小卫") ;

InitProcessist() ;

}

void CMyView::OnKiilprocess() //查杀进程

{

POSITION ps=c.GetFirstSelectedItemPosition();

if (ps==NULL)

{

exit(0) ;

}

int item=c.GetNextSelectedItem(ps) ;

HANDLE pt=OpenProcess(PROCESS_ALL_ACCESS,FALSE,f.hArray[item]) ; //打开进程

TerminateProcess(pt,0) ; //查杀进程

InitProcessist();//初始化列表

}

void CMyView::InitProcessist()

{

int index=0 ;

CString in ;

if(c.m_hWnd==NULL)

{

c.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_SINGLESEL ,CRect(0,0,600,500), this, 1);

c.InsertColumn(0,"进程地址",LVCFMT_LEFT,350) ;

c.InsertColumn(0,"进程ID",LVCFMT_LEFT,250) ;

c.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE) ;

}

else

{

c.DeleteAllItems() ;

ZeroMemory(&f,sizeof(f)) ;

}

HANDLE sh=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) ;//返回包含进程列表的

PROCESSENTRY32 pinfo; //进程信息结构体

BOOL check=Process32First(sh,&pinfo) ; //检索进程快照列表中的第一个 进程

if (check)

{

in.Format("%d",pinfo.th32ParentProcessID) ; //格式换文本

c.InsertItem(index,in) ;

c.SetItemText(index,1,pinfo.szExeFile) ; //设置子项文本

f.hArray[f.index]=pinfo.th32ProcessID ;//保存进程ID

f.index++;

index++ ;

}

while(Process32Next(sh,&pinfo)) //如果快照列表存在 那么继续搜索

{

in.Format("%d",pinfo.th32ParentProcessID) ;

c.InsertItem(index,in) ;

c.SetItemText(index,1,pinfo.szExeFile) ;

f.hArray[f.index]=pinfo.th32ProcessID ;//保存进程ID

f.index++;

index++ ;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。