#include <tlhelp32>

HANDLEhSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

//现在我们获得了所有进程的信息。

//将从hSnapShot中抽取数据到一个PROCESSENTRY32结构中

//这个结构代表了一个进程,是ToolHelp32API的一部分。

//抽取数据靠Process32First()和Process32Next()这两个函数。

//这里我们仅用Process32Next(),他的原形是:

//BOOLWINAPIProcess32Next(HANDLEhSnapshot,LPPROCESSENTRY32lppe);

//我们程序的代码中加入:

PROCESSENTRY32*processInfo=newPROCESSENTRY32;

//必须设置PROCESSENTRY32的dwSize成员的值;

processInfo->dwSize=sizeof(PROCESSENTRY32);

intindex=0;

//这里我们将快照句柄和PROCESSENTRY32结构传给Process32Next()。

//执行之后,PROCESSENTRY32结构将获得进程的信息。我们循环遍历,直到函数返回FALSE。

printf("****************开始列举进程****************/n");

intID=0;

while(Process32Next(hSnapShot,processInfo)!=FALSE)

{

index++;

printf("******************%d******************/n",index);

printf("PIDNameCurrentThreads/n");

printf("%-15d%-25s%-4d/n",processInfo->th42ProcessID,processInfo->szExeFile,processInfo->cntThreads);

intsize=WideCharToMultiByte(CP_ACP,0,processInfo->szExeFile,-1,NULL,0,NULL,NULL);

char*ch=newchar[size+1];

if(WideCharToMultiByte(CP_ACP,0,processInfo->szExeFile,-1,ch,size,NULL,NULL))

{

if(strstr(ch,"cmd.exe"))//使用这段代码的时候只需要改变"cmd.exe".将其改成你要结束的进程名就可以了。

{

ID=processInfo->th42ProcessID;

qDebug()<<"ID="<<ID;

HANDLEhProcess;

//现在我们用函数TerminateProcess()终止进程:

//这里我们用PROCESS_ALL_ACCESS

hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,ID);

if(hProcess==NULL)

{

printf("Unabletogethandleofprocess:");

printf("Erroris:%d",GetLastError());

}

TerminateProcess(hProcess,0);

CloseHandle(hProcess);

}

}

}

CloseHandle(hSnapShot);

deleteprocessInfo;

typedefHANDLE(_stdcall*WTSOPENSERVER)(

LPTSTRpServerName//NetBios指定的终端服务名,如果我们查看本地终端所有进程信息我们可以通过在控制台命令行下用nbtstat–an来获取本机NetBios名。如图3所示。

);