From c709b8ed9899a58d0dd43a044b3447e2215777f1 Mon Sep 17 00:00:00 2001 From: takase1121 <20792268+takase1121@users.noreply.github.com> Date: Sat, 24 May 2025 12:16:23 +0800 Subject: [PATCH] process(windows): try sending WM_CLOSE for graceful process termination --- src/process/windows/SDL_windowsprocess.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/process/windows/SDL_windowsprocess.c b/src/process/windows/SDL_windowsprocess.c index 65d8a394a0..3ba98af97c 100644 --- a/src/process/windows/SDL_windowsprocess.c +++ b/src/process/windows/SDL_windowsprocess.c @@ -520,8 +520,23 @@ done: return result; } +static BOOL CALLBACK terminate_app(HWND hwnd, LPARAM proc_id) +{ + DWORD current_proc_id = 0; + GetWindowThreadProcessId(hwnd, ¤t_proc_id); + if (current_proc_id == (DWORD) proc_id) { + PostMessage(hwnd, WM_CLOSE, 0, 0); + } + return TRUE; +} + bool SDL_SYS_KillProcess(SDL_Process *process, bool force) { + if (!force) { + EnumWindows(terminate_app, (LPARAM) process->internal->process_information.dwProcessId); + PostThreadMessage(process->internal->process_information.dwThreadId, WM_CLOSE, 0, 0); + return true; + } if (!TerminateProcess(process->internal->process_information.hProcess, 1)) { return WIN_SetError("TerminateProcess failed"); }