5 #define WIN32_LEAN_AND_MEAN
6 #include <qt_windows.h>
10 static QStringList processList()
13 unsigned long aProcesses[1024], cbNeeded, cProcesses;
14 if(!EnumProcesses(aProcesses,
sizeof(aProcesses), &cbNeeded))
19 cProcesses = cbNeeded /
sizeof(
unsigned long);
20 for(
unsigned int i = 0; i < cProcesses; ++i)
22 if(aProcesses[i] == 0)
27 HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, aProcesses[i]);
29 GetModuleBaseNameW(hProcess, 0, buffer, 50);
30 CloseHandle(hProcess);
31 lprocess << QString::fromWCharArray(buffer);
37 static bool killProcess(LPCWSTR processName)
41 HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
42 pe.dwSize =
sizeof(PROCESSENTRY32W);
43 if(!Process32FirstW(hSnapshot, &pe))
50 pe.dwSize =
sizeof(PROCESSENTRY32W);
51 if(Process32NextW(hSnapshot, &pe) == FALSE)
57 if(wcsicmp(pe.szExeFile, processName) == 0)
59 id = pe.th32ProcessID;
64 CloseHandle(hSnapshot);
67 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE,
id);
70 TerminateProcess(hProcess,0);
71 CloseHandle(hProcess);
79 const QStringList infos(processList());
80 for(
const QString &info :
qAsConst(infos))
82 if(info.contains(process) && killProcess(process.toStdWString().c_str()))
95 const QStringList infos(processList());
96 for(
const QString &process :
qAsConst(processes))
98 for(
const QString &info :
qAsConst(infos))
100 if(info.contains(process) && killProcess(process.toStdWString().c_str()))
111 #elif defined Q_OS_UNIX
120 static QList<PIDInfo> processList()
122 QList<PIDInfo> lprocess;
124 process.start(
"/bin/bash", {
"-c",
"ps -xu | awk '{print $2\";\"$11}'"});
125 if(!process.waitForFinished())
130 const QString data(process.readAll());
137 for(
const QString &var :
qAsConst(sp))
139 const QStringList &line = var.split(
";");
140 if(line.count() != 2)
146 info.m_pid = line.front().toInt();
147 info.m_path = line.back();
154 static bool killProcess(
int pid)
162 const QList<PIDInfo> infos(processList());
163 for(
const PIDInfo &info :
qAsConst(infos))
165 if(info.m_path.contains(process) && killProcess(info.m_pid))
167 TTK_INFO_STREAM(
"Unix Kill Process" << process <<
"PID" << info.m_pid <<
"Successed");
178 const QList<PIDInfo> infos(processList());
179 for(
const QString &process :
qAsConst(processes))
181 for(
const PIDInfo &info :
qAsConst(infos))
183 if(info.m_path.contains(process) && killProcess(info.m_pid))
185 TTK_INFO_STREAM(
"Unix Kill Process" << process <<
"PID" << info.m_pid <<
"Successed");
TTK_MODULE_EXPORT bool execute(const QString &path)
TTK_MODULE_EXPORT void killProcessByName(const QString &process, bool more=false)
#define TTK_INFO_STREAM(msg)
typedef long(ZCALLBACK *tell_file_func) OF((voidpf opaque