#include<iostream>
#include<Windows.h>
using namespace std;
void main(void)
{
STARTUPINFO si;//STARTUPINFO用于指定新进程的主窗口特性的一个结构
PROCESS_INFORMATION pi;//在创建进程时相关的数据结构之一,该结构返回有关新进程及其主线程的信息
//TEXT作用是为了对字符处理的透明化,不论你使用的是不是 unicode 字符集,使用这个 TEXT 宏就可以使得程序都可以正常使用,只要在 程序中有 unicode 宏的,
//那么就使用 宽字符,否则使用 单字节字符,保证程序的可移植性 .....
TCHAR szCommandLine[] = TEXT("NOTEPAD");//因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串处理函数,比如:strlen和wcslen,
//分别用于处理两种字符串
//微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,
//这样就有了_T("")这样的字符串,对应的就有了_tcslen这样的函数为了存储这样的通用字符,就有了TCHAR:
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);//包含STARTUPINFO结构中的字节数.如果Microsoft将来扩展该结构,它可用作版本控制手段,应用程序必须将cb初始化为sizeof(STARTUPINFO)。
ZeroMemory(&pi, sizeof(pi));
//WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。
if (!CreateProcess(NULL, szCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
fprintf(stderr, "Createprocess Failed ");
}
int x;
while (true)
{
cout << "请输入要选择的操作:\n0:销毁进程\n1:挂起进程\n2:激活进程\n3:退出\n";
cin >> x;
switch (x)
{
case 0:
if (TerminateProcess(pi.hProcess, 0))
cout << "销毁进程成功" << endl;
else
cout << "销毁失败" << endl;
break;
case 1:
if (SuspendThread(pi.hThread))
cout << "挂起进程成功" << endl;
else
cout << "挂起失败" << endl;
break;
case 2:
if (ResumeThread(pi.hThread))
cout << "激活进程成功" << endl;
else
cout << "激活进程失败" << endl;
break;
case 3:
exit(0);
default:
cout << "选项不正确" << endl;
}
}
}
06-04