您好,登錄后才能下訂單哦!
#include <tlhelp32>
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()。
//執行之后,PROCESSENTRY32 結構將獲得進程的信息。我們循環遍歷,直到函數返回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 ="<<ID;
HANDLE hProcess;
// 現在我們用函數 TerminateProcess()終止進程:
// 這里我們用PROCESS_ALL_ACCESS
hProcess=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所示。
);
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。