遍歷進程 結束某個進程

 

 

#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->th32ProcessID,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->th32ProcessID;
                    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所示。
       );


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章