Qt获取所有进程、终止某个进程
代码中用到Qt库的地方, 不使用Qt库的可以替换为自己相应的函数
方法一:
//Qt开源库, 通过QProcess启动系统命令“tasklist.exe”, 获取正在运行的进程 QProcess process process.start("tasklist.exe") if(process.waitForFinished()) { QByteArray result = process.readAll() }
方法二:
#include <Psapi.h> unsigned long aProcesses[1024], cbNeeded, cProcesses; if( !EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded) ) { qDebug()<<"text01"; } QStringList lprocess; cProcesses = cbNeeded / sizeof(unsigned long); for(unsigned int i = 0; i < cProcesses; i++) { if(aProcesses[i] == 0) { continue; } HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, aProcesses[i]); wchar_t buffer[50]; GetModuleBaseName(hProcess, 0, buffer, 50); CloseHandle(hProcess); lprocess << QString::fromWCharArray(buffer); } qDebug()<<lprocess;
终止进程:
int KillProcess(LPCSTR processName) { PROCESSENTRY32 pe; DWORD id=0; HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); pe.dwSize = sizeof(PROCESSENTRY32); if(!Process32First(hSnapshot,&pe)) { return 0; } while(1) { pe.dwSize=sizeof(PROCESSENTRY32); if(Process32Next(hSnapshot,&pe)==FALSE) { break; } if(wcsicmp(pe.szExeFile, processName)==0) { id = pe.th32ProcessID; break; } } CloseHandle(hSnapshot); HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, id ); if (hProcess != NULL) { TerminateProcess(hProcess,0); CloseHandle(hProcess); } return 1; }