]> gitweb.ps.run Git - autorec/commitdiff
handle starting and stopping obs
authorpatrick-scho <patrick.schoenberger@posteo.de>
Thu, 17 Apr 2025 20:11:17 +0000 (22:11 +0200)
committerpatrick-scho <patrick.schoenberger@posteo.de>
Thu, 17 Apr 2025 20:11:17 +0000 (22:11 +0200)
src/main.cpp

index 727050429e9320cdd9229d05ed8fd31fa3c6577e..f7a1438538f435df29984ba1f7088a17485edc03 100644 (file)
@@ -158,6 +158,36 @@ void WriteGameExes()
   ofs.close();\r
 }\r
 \r
+PROCESS_INFORMATION StartOBS()\r
+{\r
+  PROCESS_INFORMATION pi;\r
+  STARTUPINFOA sui;\r
+  GetStartupInfoA(&sui);\r
+  CreateProcessA(nullptr, "C:\\Program Files\\obs-studio\\bin\\64bit\\obs64.exe --disable-shutdown-check",\r
+    nullptr, nullptr, false, NORMAL_PRIORITY_CLASS, nullptr, "C:\\Program Files\\obs-studio\\bin\\64bit", &sui, &pi);\r
+  return pi;\r
+}\r
+\r
+void StopOBS(PROCESS_INFORMATION &pi)\r
+{\r
+  EnumWindows([](HWND hwnd, LPARAM lParam) -> BOOL {\r
+    PROCESS_INFORMATION *pi = (PROCESS_INFORMATION*)lParam;\r
+\r
+    DWORD pid, tid;\r
+    tid = GetWindowThreadProcessId(hwnd, &pid);\r
+    if (tid == pi->dwThreadId && pid == pi->dwProcessId) {\r
+\r
+      char title[1024]; GetWindowTextA(hwnd, title, 1024);\r
+\r
+      if (strncmp(title, "OBS", 3) == 0) {\r
+        PostMessage(hwnd, WM_CLOSE, 0, 0);\r
+        return FALSE; \r
+      }\r
+    }\r
+    return TRUE;\r
+  }, (LPARAM)&pi);\r
+}\r
+\r
 /*\r
 TODO:\r
   - Disconnect while recording\r
@@ -189,6 +219,8 @@ WinMain(HINSTANCE hInstance,
   niData.uCallbackMessage = ICON_MSG;\r
   niData.uVersion = NOTIFYICON_VERSION_4;\r
 \r
+  PROCESS_INFORMATION pi_obs = StartOBS();\r
+\r
   window.handlers[WM_SIZE].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {\r
     if (wParam == SIZE_MINIMIZED) {\r
       ShowNotificationIcon();\r
@@ -206,11 +238,16 @@ WinMain(HINSTANCE hInstance,
       SetActiveWindow(hwnd);\r
     }\r
   });\r
-\r
   window.handlers[WM_GETMINMAXINFO].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {\r
-          MINMAXINFO *mmInfo = (MINMAXINFO*)lParam;\r
-          mmInfo->ptMinTrackSize.x = 400;\r
-          mmInfo->ptMinTrackSize.y = 200;\r
+    MINMAXINFO *mmInfo = (MINMAXINFO*)lParam;\r
+    mmInfo->ptMinTrackSize.x = 400;\r
+    mmInfo->ptMinTrackSize.y = 200;\r
+  });\r
+  window.handlers[WM_QUERYENDSESSION].push_back([&pi_obs](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {\r
+    StopOBS(pi_obs);\r
+  });\r
+  window.handlers[WM_CLOSE].push_back([&pi_obs](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {\r
+    StopOBS(pi_obs);\r
   });\r
 \r
   lay_context *ctx = &window.ctx;\r