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. }  
  • 相关阅读:
    三大流程控制:1、if判断语句 2、while循环语句 3、for循环语句
    变量剩余的部分,然后是基本数据类型、输入输出和基本运算符
    1.操作系统、2.编程语言分类、3.变量、4.运行python文件的三个阶段
    数据库4 待修
    电脑组合键
    redis 基础应用
    数据库3 待改
    数据库2 待修
    mysql 数据库基础篇
    socketserver 和 事件Event
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4838858.html
Copyright © 2011-2022 走看看