From 6fe31b9ef4cb9861beb7461fe935345d5947b849 Mon Sep 17 00:00:00 2001 From: patrick-scho Date: Thu, 17 Apr 2025 22:11:17 +0200 Subject: [PATCH] handle starting and stopping obs --- src/main.cpp | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 7270504..f7a1438 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -158,6 +158,36 @@ void WriteGameExes() ofs.close(); } +PROCESS_INFORMATION StartOBS() +{ + PROCESS_INFORMATION pi; + STARTUPINFOA sui; + GetStartupInfoA(&sui); + CreateProcessA(nullptr, "C:\\Program Files\\obs-studio\\bin\\64bit\\obs64.exe --disable-shutdown-check", + nullptr, nullptr, false, NORMAL_PRIORITY_CLASS, nullptr, "C:\\Program Files\\obs-studio\\bin\\64bit", &sui, &pi); + return pi; +} + +void StopOBS(PROCESS_INFORMATION &pi) +{ + EnumWindows([](HWND hwnd, LPARAM lParam) -> BOOL { + PROCESS_INFORMATION *pi = (PROCESS_INFORMATION*)lParam; + + DWORD pid, tid; + tid = GetWindowThreadProcessId(hwnd, &pid); + if (tid == pi->dwThreadId && pid == pi->dwProcessId) { + + char title[1024]; GetWindowTextA(hwnd, title, 1024); + + if (strncmp(title, "OBS", 3) == 0) { + PostMessage(hwnd, WM_CLOSE, 0, 0); + return FALSE; + } + } + return TRUE; + }, (LPARAM)&pi); +} + /* TODO: - Disconnect while recording @@ -189,6 +219,8 @@ WinMain(HINSTANCE hInstance, niData.uCallbackMessage = ICON_MSG; niData.uVersion = NOTIFYICON_VERSION_4; + PROCESS_INFORMATION pi_obs = StartOBS(); + window.handlers[WM_SIZE].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (wParam == SIZE_MINIMIZED) { ShowNotificationIcon(); @@ -206,11 +238,16 @@ WinMain(HINSTANCE hInstance, SetActiveWindow(hwnd); } }); - window.handlers[WM_GETMINMAXINFO].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { - MINMAXINFO *mmInfo = (MINMAXINFO*)lParam; - mmInfo->ptMinTrackSize.x = 400; - mmInfo->ptMinTrackSize.y = 200; + MINMAXINFO *mmInfo = (MINMAXINFO*)lParam; + mmInfo->ptMinTrackSize.x = 400; + mmInfo->ptMinTrackSize.y = 200; + }); + window.handlers[WM_QUERYENDSESSION].push_back([&pi_obs](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { + StopOBS(pi_obs); + }); + window.handlers[WM_CLOSE].push_back([&pi_obs](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { + StopOBS(pi_obs); }); lay_context *ctx = &window.ctx; -- 2.50.1