// services/GameMonitor.h #pragma once #include "core/WinApi.h" #include #include namespace GameMonitor { [[nodiscard]] inline bool IsGameRunning() noexcept { WinApi::UniqueHandle snapshot{ CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) }; if (!snapshot || snapshot.get() == INVALID_HANDLE_VALUE) return false; PROCESSENTRY32W entry{ sizeof(entry) }; if (!Process32FirstW(snapshot.get(), &entry)) return false; do { if (_wcsicmp(entry.szExeFile, L"EscapeFromTarkov.exe") == 0) return true; } while (Process32NextW(snapshot.get(), &entry)); return false; } [[nodiscard]] inline bool WaitForGame(DWORD maxWaitMs = 30 * 60 * 1000) noexcept { DWORD elapsed = 0; const DWORD stepMs = 1000; while (elapsed < maxWaitMs) { if (IsGameRunning()) return true; Sleep(stepMs); elapsed += stepMs; } return false; } }