#include
HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//現在我們獲得了所有進程的信息。
//將從hSnapShot中抽取數據到一個PROCESSENTRY32結構中
//這個結構代表了一個進程,是ToolHelp32 API的一部分。
//抽取數據靠Process32First()和Process32Next()這兩個函數。
//這里我們僅用Process32Next(),他的原形是:
//BOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);
//我們程序的代碼中加入:
PROCESSENTRY32* processInfo=new PROCESSENTRY32;
// 必須設置PROCESSENTRY32的dwSize成員的值 ;
processInfo->dwSize=sizeof(PROCESSENTRY32);
int index=0;
//這里我們將快照句柄和PROCESSENTRY32結構傳給Process32Next()。
//執(zhí)行之后,PROCESSENTRY32 結構將獲得進程的信息。我們循環(huán)遍歷,直到函數返回FALSE。
printf("****************開始列舉進程****************/n");
int ID = 0;
while(Process32Next(hSnapShot,processInfo)!=FALSE)
{
index++;
printf("****************** %d ******************/n",index);
printf("PID Name Current Threads/n");
printf("%-15d%-25s%-4d/n",processInfo->th42ProcessID,processInfo->szExeFile,processInfo->cntThreads);
int size=WideCharToMultiByte(CP_ACP,0,processInfo->szExeFile,-1,NULL,0,NULL,NULL);
char *ch=new char[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 ="< HANDLE hProcess;// 現在我們用函數 TerminateProcess()終止進程:// 這里我們用PROCESS_ALL_ACCESShProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,ID);if(hProcess==NULL){printf("Unable to get handle of process: ");printf("Error is: %d",GetLastError());}TerminateProcess(hProcess,0);CloseHandle(hProcess);}}}CloseHandle(hSnapShot);delete processInfo;typedef HANDLE (_stdcall *WTSOPENSERVER)(LPTSTR pServerName //NetBios指定的終端服務名,如果我們查看本地終端所有進程信息我們可以通過在控制臺命令行下用nbtstat –an來獲取本機NetBios名。如圖3所示。);另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享標題:遍歷進程結束某個進程-創(chuàng)新互聯(lián)
標題來源:http://weahome.cn/article/cdchjj.html