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 list(processList());
80 if(list.contains(process) && killProcess(process.toStdWString().c_str()))
88 const QStringList list(processList());
89 for(
const QString &process :
qAsConst(processes))
91 if(list.contains(process) && killProcess(process.toStdWString().c_str()))
97 #elif defined Q_OS_UNIX
106 static QList<PIDInfo> processList()
108 QList<PIDInfo> lprocess;
110 process.start(
"/bin/bash", {
"-c",
"ps -xu | awk '{print $2\";\"$11}'"});
111 if(!process.waitForFinished())
116 const QString data(process.readAll());
123 for(
const QString &var :
qAsConst(sp))
125 const QStringList &line = var.split(
";");
126 if(line.count() != 2)
132 info.m_pid = line.front().toInt();
133 info.m_path = line.back();
140 static bool killProcess(
int pid)
148 const QList<PIDInfo> list(processList());
149 for(
const PIDInfo &info :
qAsConst(list))
151 if(info.m_path.contains(process) && killProcess(info.m_pid))
153 TTK_INFO_STREAM(
"Unix Kill Process " << process <<
" PID" << info.m_pid <<
" Successed");
161 const QList<PIDInfo> list(processList());
162 for(
const QString &process :
qAsConst(processes))
164 for(
const PIDInfo &info :
qAsConst(list))
166 if(info.m_path.contains(process) && killProcess(info.m_pid))
168 TTK_INFO_STREAM(
"Unix Kill Process " << process <<
" PID" << info.m_pid <<
" Successed");
TTK_MODULE_EXPORT bool execute(const QString &path)
#define TTK_INFO_STREAM(msg)
typedef long(ZCALLBACK *tell_file_func) OF((voidpf opaque
TTK_MODULE_EXPORT void killProcessByName(const QString &process)