You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Windows API在C++中仅关闭当前聚焦窗口(不终止同PID进程)

解决方案

你的问题出在直接终止了整个进程——TerminateProcess会干掉目标PID对应的所有进程实例,所以像记事本这种单进程多窗口的程序会被全部关闭。要只关闭当前聚焦的单个窗口,应该给目标窗口发送关闭请求消息,让它自己处理关闭逻辑,而不是杀进程。

修改后的代码

void close_focused_window()
{
    HWND focused = GetForegroundWindow();
    if (!focused)
        return;

    // 发送WM_CLOSE消息,让窗口优雅关闭
    SendMessage(focused, WM_CLOSE, 0, 0);
}

关键说明

  • WM_CLOSE是Windows标准的窗口关闭消息,窗口收到后会执行自身的关闭流程(比如记事本弹出保存提示、浏览器确认关闭标签页),完全不会影响同进程的其他窗口。
  • 不需要再调用GetWindowThreadProcessId、OpenProcess、TerminateProcess这些操作进程的API,因为我们的目标是操作单个窗口,而非整个进程。

可选备选方案

如果某些窗口不响应WM_CLOSE(比如无响应窗口),可以尝试发送系统关闭命令:

SendMessage(focused, WM_SYSCOMMAND, SC_CLOSE, 0);

内容的提问来源于stack exchange,提问作者h00die

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:20:02