zoukankan      html  css  js  c++  java
  • WIN32 根据程序名(映像名称)终止外部程序

    场景:

    1.有时候需要调用外部程序,但是外部程序有可能崩溃挂起,这样这个进程就没法结束,所以再在下次调用前需要先结束之前调用的。

    2.没考虑到权限问题,应该是只能终止当前用户启动的进程.

    [cpp] view plaincopy
     
    1. #include <stdio.h>  
    2. #include <string.h>  
    3.   
    4. #include <windows.h>  
    5. #include <Tlhelp32.h>  
    6.   
    7. #include <vector>  
    8.   
    9. void TerminateProcessByName(PCWSTR name)  
    10. {  
    11.     DWORD pid = 0;  
    12.       
    13.     // Create toolhelp snapshot.  
    14.     HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);  
    15.     PROCESSENTRY32W process;  
    16.     ZeroMemory(&process, sizeof(process));  
    17.     process.dwSize = sizeof(process);  
    18.   
    19.     std::vector<DWORD> pids;  
    20.     // Walkthrough all processes.  
    21.     if (Process32FirstW(snapshot, &process))  
    22.     {  
    23.         do  
    24.         {  
    25.             // Compare process.szExeFile based on format of name, i.e., trim file path  
    26.             // trim .exe if necessary, etc.  
    27.             if (!wcscmp(process.szExeFile, name))  
    28.             {  
    29.                pid = process.th32ProcessID;   
    30.                pids.push_back(pid);  
    31.             }  
    32.         } while (Process32NextW(snapshot, &process));  
    33.     }  
    34.   
    35.     CloseHandle(snapshot);  
    36.       
    37.     size_t size = pids.size();  
    38.     for(size_t i = 0; i < size; ++i)  
    39.     {  
    40.         HANDLE one_process = OpenProcess(PROCESS_TERMINATE, FALSE, pids[i]);  
    41.         BOOL res = TerminateProcess(one_process,0);  
    42.         if(res)  
    43.         {  
    44.             WaitForSingleObject(one_process,1000);  
    45.         }  
    46.     }  
    47. }  
    48.   
    49. int main(int argc, char *argv[])  
    50. {  
    51.     printf("Hello, world ");  
    52.       
    53.     std::vector<DWORD> pids;  
    54.     TerminateProcessByName(L"notepad.exe");  
    55.   
    56.     return 0;  
    57. }  
  • 相关阅读:
    hdu 4002 Find the maximum
    hdu 2837 坑题。
    hdu 3123
    zoj Treasure Hunt IV
    hdu 2053 Switch Game 水题一枚,鉴定完毕
    poj 1430 Binary Stirling Numbers
    hdu 3037 Saving Beans
    hdu 3944 dp?
    南阳oj 求N!的二进制表示最低位的1的位置(从右向左数)。
    fzu 2171 防守阵地 II
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4838858.html
Copyright © 2011-2022 走看看