C++ (Qt)/*************************/ if QProcess::exist(firefox.exe) QProcess::kill(firefox.exe) /*************************/
CToolhelp thProcesses(TH32CS_SNAPPROCESS); PROCESSENTRY32 pe = { sizeof(pe) }; BOOL fOk = thProcesses.ProcessFirst(&pe); for (; fOk; fOk = thProcesses.ProcessNext(&pe)) { TCHAR sz[1024]; // Place the process name (without its path) & ID in the list PCTSTR pszExeFile = _tcsrchr(pe.szExeFile, TEXT('\\')); if (pszExeFile == NULL) pszExeFile = pe.szExeFile; else pszExeFile++; // Skip over the slash wsprintf(sz, TEXT("%s (0x%08X)"), pszExeFile, pe.th32ProcessID); int n = ComboBox_AddString(hwndList, sz); // Associate the process ID with the added item ComboBox_SetItemData(hwndList, n, pe.th32ProcessID); }
// systemwin32.h#ifndef SYSTEMWIN32_H#define SYSTEMWIN32_H#include <windows.h>#include <w32api.h>#include <tlhelp32.h>#include <QMap>#include <QString>#include <QMessageBox>class systemWin32{public: systemWin32(); bool findProcess(QString findProcName); QString getProcessName(int idProcess); QStringList getAllProcessList();private: QMap <int, QString> win32sysMap; QString copyToQString(WCHAR array[MAX_PATH]);};#endif // SYSTEMWIN32_H// systemwin32.cpp#include "systemwin32.h"systemWin32::systemWin32(){ HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnap == NULL) { QMessageBox::critical(0, "Error!", "Error Load ToolHelp", QMessageBox::Close); return; } PROCESSENTRY32 proc = { sizeof(proc) }; if (Process32First(hSnap, &proc)) { QString filename; filename = copyToQString(proc.szExeFile); win32sysMap[proc.th32ProcessID] = filename; while (Process32Next(hSnap, &proc)) { filename = copyToQString(proc.szExeFile); win32sysMap[proc.th32ProcessID] = filename; } }}// принимает имя процесса, возвращает true, если процесс запущенbool systemWin32::findProcess(QString findProcName){ QMapIterator<int, QString> i(win32sysMap); while (i.hasNext()) { i.next(); if (i.value() == findProcName) return true; } return false;}// получить имя процесса по ID-уQString systemWin32::getProcessName(int idProcess){ return win32sysMap[idProcess];}// имена процессов WinAPI представлены как массив WCHAR. Для удобства - возврат в QString// хэз, может как-нить по другому можно сделатьQString systemWin32::copyToQString(WCHAR array[MAX_PATH]){ QString string; int i = 0; while (array[i] != 0) { string[i] = array[i]; i++; } return string;}// получить список всех процессовQStringList systemWin32::getAllProcessList(){ return win32sysMap.values();}// ну и кому вообще лень - оболочка для тестирования и pro файл// main.cpp#include <QtGui>#include "systemwin32.h"int main(int argc, char *argv[]){ QApplication app(argc, argv); QLabel *label = new QLabel; bool ok; QString processName = QInputDialog::getText(0, "Do you want to know that process is created?", "Input process name", QLineEdit::Normal, "", &ok); systemWin32 processesInWin; if (ok) { if (processesInWin.findProcess(processName)) { QMessageBox::information(0, "Yes", "Process " + processName + " has been created!"); } else { QMessageBox::information(0, "No", "Process " + processName + " hasn't been created!"); } } int ret = QMessageBox::information(0, "Question", "Do you want see all list of process?", QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok) { QStringList list(processesInWin.getAllProcessList()); QString strings; for (int i = 0; i < list.size(); i++) { strings += list[i] + "\n"; } label->setText(strings); label->show(); } return app.exec();}// getprocesslist.proTARGET = getprocesslistTEMPLATE = appSOURCES += main.cpp \ systemwin32.cppHEADERS += systemwin32.h