【原创】关闭指定名字的进程,关闭指定id的进程, 取得指定进程的id

 1 #include "stdafx.h"
 2 #include <windows.h>
 3 #include "tlhelp32.h"
 4 #include <string>
 5 #include <iostream>
 6 
 7 using std::string;
 8 using std::cout;
 9 using std::endl;
10 
11 // findprocessid
12 // find the process identifer with the specified process name
13 // proc_name [in] name of process
14 // return value : the identifer of process, if return value is 0, indicate that fail to get process identifer
15 DWORD FindProcessId(const char* proc_name_)
16 {
17     DWORD proc_id_ = 0;
18 
19     PROCESSENTRY32 proc_entry_;
20     HANDLE handle_ = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
21     if(handle_ != INVALID_HANDLE_VALUE)
22     {
23         proc_entry_.dwSize = sizeof(proc_entry_);
24         if(Process32First(handle_, &proc_entry_))
25         {
26             do
27             {
28 
29                 if(stricmp(proc_entry_.szExeFile, proc_name_) == 0)
30                 {
31                     proc_id_ = proc_entry_.th32ProcessID;
32                     break;
33                 }
34             }while(Process32Next(handle_, &proc_entry_));
35         }
36         CloseHandle(handle_);
37     }
38     return proc_id_;
39 }
40 
41 // TerminateProc
42 // Terminate a process that is specified by process identifer
43 // proc_id_ [in] indentifer of process
44 // return value : true -- successful, false -- fail
45 bool TerminateProc(DWORD proc_id_)
46 {
47     bool b_rtn = false;
48 
49     HANDLE handle_ = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id_);
50     if(handle_ != INVALID_HANDLE_VALUE)
51     {
52         DWORD exit_code_;
53         GetExitCodeProcess(handle_, &exit_code_);
54         TerminateProcess(handle_, exit_code_);
55         WaitForSingleObject(handle_, INFINITE);
56         CloseHandle(handle_);
57         b_rtn = true;
58     }
59     return b_rtn;
60 }
61 
62 // TerminateProcSZ
63 // Terminate a process that is specified by process window name
64 // win_name_ [in] name of process window 
65 // return value : true -- successful, false -- fail
66 bool TerminateProcSZ(const char* win_name_)
67 {
68     bool b_rtn = false;
69 
70     HWND h_wnd = FindWindow(NULL, win_name_);
71     if(!h_wnd)
72     {
73         return b_rtn;
74     }
75     ::PostMessage(h_wnd, WM_CLOSE, 0,0);
76 
77     DWORD proc_id_ = 0;
78     GetWindowThreadProcessId(h_wnd, &proc_id_);
79     HANDLE handle_ = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id_);
80     if(handle_ != INVALID_HANDLE_VALUE)
81     {
82         DWORD dw_wait = WaitForSingleObject(handle_, 2000);
83         if(dw_wait == WAIT_TIMEOUT)
84         {
85             DWORD exit_code_;
86             GetExitCodeProcess(handle_, &exit_code_);
87             TerminateProcess(handle_, exit_code_);
88             WaitForSingleObject(handle_, INFINITE);
89         }
90         CloseHandle(handle_);
91         b_rtn = true;
92     }
93     return b_rtn;
94 }

转载于:https://www.cnblogs.com/jihongzhi/archive/2012/10/16/2726811.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值