一、实验要求
实现进程管理器
- 能列出操作系统当前运行的进程
- 实现进程管理,如杀掉进程,输入进程名或进程ID,自动结束进程
- 不要求有界面,命令行窗口即可
二、源代码
#include "windows.h"
#include "tlhelp32.h"
#include "stdio.h"
#include <iostream>
using namespace std;
BOOL killps(DWORD ProcessId)
{
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
if (hProcess == NULL)
return FALSE;
if (!TerminateProcess(hProcess, 0))
return FALSE;
return TRUE;
}
void showps()
{
PROCESSENTRY32 pe32;
//在使用这个结构前,先设置它的大小
pe32.dwSize = sizeof(pe32);
//给系统内所有的进程拍个快照
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot 调用失败.\n");
//return -1;
}
//遍历进程快照,轮流显示每个进程的信息
BOOL bMore = ::Process32First(hProcessSnap, &pe32);
while (bMore)
{
printf("进程名称:%s\n", pe32.szExeFile);
printf("进程ID:%u\n\n", pe32.th32ProcessID);
bMore = ::Process32Next(hProcessSnap, &pe32);
}
//不要忘记清除掉snapshot对象
::CloseHandle(hProcessSnap);
}
int main(int argc, char* argv[])
{
int flag;
cout << "输入1显示进程,输入2杀掉进程" << endl;
while (cin >> flag)
{
if (flag == 1)
{
showps();
cout << "####################################################################################" << endl;
}
if (flag == 2)
{
int id;
cout << "杀掉:";
cin >> id;
killps(id);
}
cout << "输入1显示进程,输入2杀掉进程" << endl;
}
int a;
cin >> a;
return 0;
}
三、程序运行
1.显示进程
2.终止mstsc.exe
四、总结
通过本次实验,我对C++的系统函数有了一定的认识,学会了显示和根据id终止进程,希望以后可以把学到的知识用到更多的地方