如何根据进程名字结束进程
2016-04-25 16:27
183 查看
结束一个进程,一般有两种情况:一种是有界面的,一种是没有界面的。
结束有界面的进程的思想就是:通过FindWindow查找到窗口,然后根据窗口获取进程id,然后就直接看代码:
具体可以参考:/article/1629450.html
如果是根据进程名字结束进程,结束系统进程模块的代码是用系统快照的原理得到进程的句柄,然后用TerminateProcess的方法结束掉进程的:
结束有界面的进程的思想就是:通过FindWindow查找到窗口,然后根据窗口获取进程id,然后就直接看代码:
//结束进程 BOOL KillProcess(LPCTSTR pszClassName, LPCTSTR pszWindowTitle) { HANDLE hProcessHandle; ULONG nProcessID; HWND TheWindow; TheWindow = ::FindWindow( /*pszClassName*/NULL, pszWindowTitle ); ::GetWindowThreadProcessId( TheWindow, &nProcessID ); hProcessHandle = ::OpenProcess( PROCESS_TERMINATE, FALSE, nProcessID ); return ::TerminateProcess( hProcessHandle, 2 ); }
具体可以参考:/article/1629450.html
如果是根据进程名字结束进程,结束系统进程模块的代码是用系统快照的原理得到进程的句柄,然后用TerminateProcess的方法结束掉进程的:
// killprocess_test.cpp : 定义控制台应用程序的入口点。 // #include <stdio.h> #include <string.h> #include <windows.h> #include <Tlhelp32.h> #include <algorithm> #include <vector> // void kill(int pid) { HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pid); BOOL bOkey = TerminateProcess(hProcess, 0); if(bOkey) { WaitForSingleObject(hProcess, 1000); CloseHandle(hProcess); hProcess = NULL; } } // void TerminateProcessByName(PCWSTR name) { DWORD pid = 0; // Create toolhelp snapshot. HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32W process; ZeroMemory(&process, sizeof(process)); process.dwSize = sizeof(process); std::vector<DWORD> pids; // Walkthrough all processes. if (Process32FirstW(snapshot, &process)) { do { // Compare process.szExeFile based on format of name, i.e., trim file path // trim .exe if necessary, etc. std::wstring szExeFile = process.szExeFile; std::wstring szName = name; /*std::transform(szExeFile.begin(), szExeFile.end(), szExeFile.begin(), towlower); std::transform(szName.begin(), szName.end(), szName.begin(), towlower);*/ if (!wcscmp(szExeFile.c_str(), szName.c_str())) { pid = process.th32ProcessID; pids.push_back(pid); } } while (Process32NextW(snapshot, &process)); } CloseHandle(snapshot); size_t size = pids.size(); for(size_t i = 0; i < size; ++i) { kill(pids[i]); } } // int main() { printf("this is test for kill process\n"); //注意区分大小写 TerminateProcessByName(L"KuGou.exe"); system("pause"); return 0; }
相关文章推荐
- 【IIS服务器】 一点点对WEBRESOURCE.AXD的配置及使用
- openldap+phpldapadmin创建ldapserver
- 回归和分类
- YJAutoLayout
- HDU 1848 Fibonacci again and again Nim博弈变形
- Oracle-BPM(五)
- 导入Excel表格数据
- Android Https相关完全解析 当OkHttp遇到Https
- 用户态软件读写root文件方法
- Android应用分类和安全Domain
- CSS
- 面向对象的基础和设计模式
- 法线的变换的一些概念
- 手机设计尺寸 - iPhone界面尺寸
- 程序员的核心竞争力
- linux vim order
- Java对象初始化详解
- php获取下个月的今天
- Android开发改变状态栏的颜色
- memcached缓存数据库