Qt在windows下杀死进程:QProcess和系统API两种方式
2017-07-10 08:44
477 查看
虽然方法能查到,这里总结一下,以后方便回顾一下
1、QProcess
QProcess p; QString c = "taskkill /im DingTalk.exe /f"; p.execute(c); p.close();
直接执行CMD中的命令,注意空格!!!
2、系统API
根据进程名称先找到进程PID,再根据PID杀死进程
#include <Windows.h> #include <tlhelp32.h> #include <string.h> using namespace std; /*根据进程名称杀死进程 *1、根据进程名称找到PID *2、根据PID杀死进程 */ int killTaskl(const QString& exe) { //1、根据进程名称找到PID HANDLE hProcessSnap; PROCESSENTRY32 pe32; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) { return -1; } pe32.dwSize = sizeof(PROCESSENTRY32); if (!Process32First(hProcessSnap, &pe32)) { CloseHandle(hProcessSnap); return -1; } BOOL bRet = FALSE; DWORD dwPid = -1; while (Process32Next(hProcessSnap, &pe32)) { //将WCHAR转成const char* int iLn = WideCharToMultiByte (CP_UTF8, 0, const_cast<LPWSTR> (pe32.szExeFile), static_cast<int>(sizeof(pe32.szExeFile)), NULL, 0, NULL, NULL); std::string result (iLn, 0); WideCharToMultiByte (CP_UTF8, 0, pe32.szExeFile, static_cast<int>(sizeof(pe32.szExeFile)), const_cast<LPSTR> (result.c_str()), iLn, NULL, NULL); if (0 == strcmp(exe.toStdString().c_str(), result.c_str ())) { dwPid = pe32.th32ProcessID; bRet = TRUE; qDebug()<<"zhaodao"; break; } } CloseHandle(hProcessSnap); qDebug()<<dwPid; 2、根据PID杀死进程 HANDLE hProcess=NULL; //打开目标进程 hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,dwPid); if (hProcess==NULL) { qDebug()<<"Open Process fAiled ,error:"<<GetLastError(); return -1; } //结束目标进程 DWORD ret=TerminateProcess(hProcess,0); if(ret==0) { qDebug()<<"kill task faild,error:"<<GetLastError(); return -1; } return 0; }
PS:WCHAR转const char*有更好的方法请留言,谢谢!
相关文章推荐
- qt环境程序中通过QProcess启动进程的方式启动windows系统自带的画图程序中遇到的错误
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- Android两种杀掉进程方式总结(System.exit()和Process.killProcess())
- 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 网易公开课《Linux内核分析》学习心得-使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- windows系统查看端口号,杀死进程
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- windows系统下安装weblogic的两种方式之一:图形界面安装
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- 使用库函数API和C代码中嵌入汇编代码两种方式实现对sysinfo的系统调用
- Linux内核分析:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用