diff --git a/src/main.cpp b/src/main.cpp index ed584459..1a1d5ef2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -71,6 +71,15 @@ SessionMonitorWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { return DefWindowProc(hwnd, uMsg, wParam, lParam); } } + +WINAPI BOOL +ConsoleCtrlHandler(DWORD type) { + if (type == CTRL_CLOSE_EVENT) { + BOOST_LOG(info) << "Console closed handler called"; + lifetime::exit_sunshine(0, false); + } + return FALSE; +} #endif int @@ -244,6 +253,11 @@ main(int argc, char *argv[]) { shutdown_event->raise(true); }); +#ifdef _WIN32 + // Terminate gracefully on Windows when console window is closed + SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE); +#endif + proc::refresh(config::stream.file_apps); // If any of the following fail, we log an error and continue event though sunshine will not function correctly.