#include "process_watch.h" #include "ui.h" #include #include #include ProcessWatch process_watch; bool updateRunningProcesses() { HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (snapshot == INVALID_HANDLE_VALUE) { return false; } PROCESSENTRY32W entry = { sizeof(PROCESSENTRY32W) }; if (Process32FirstW(snapshot, &entry)) { std::map foundProcesses; while (Process32NextW(snapshot, &entry)) { for (const std::string& processName : UIConstants.et_notify_processes) { std::wstring wproc(processName.begin(), processName.end()); bool active = _wcsicmp(entry.szExeFile, wproc.c_str()) == 0; if (active && process_watch.active_processes.contains(processName)) { process_watch.active_processes[processName].running = true; foundProcesses[processName] = true; } } }; for (const std::string& processName : UIConstants.et_notify_processes) { if (!foundProcesses.contains(processName) && process_watch.active_processes.contains(processName)) { process_watch.active_processes[processName].running = false; process_watch.active_processes[processName].shownToast = false; } } } CloseHandle(snapshot); return false; } void ProcessWatch::run() { for (std::string processName : UIConstants.et_notify_processes) { process_watch.active_processes[processName] = { processName, false }; } thread = std::thread([&]() { while (ui.alive.load()) { Sleep(6000); if (ui.deviceType == "BS2E") { updateRunningProcesses(); } } }); } void ProcessWatch::shutdown() { if (thread.joinable()) { thread.join(); } }