如何使用C++关闭其他正在运行的应用程序?如txt文档、Chrome浏览器
方案可行性判断
ShellExecute(NULL, "open", "C://File Path" , NULL, NULL, SW_SHOWNORMAL)是用于启动程序、打开文件/目录的Windows API,完全不具备关闭运行中进程/窗口的能力,该方案不可行。- 向目标窗口发送
WM_CLOSE消息的方案可行,但需要先获取到目标窗口的句柄,不能直接调用SendMessage(WM_CLOSE)。
具体实现步骤
依赖说明
代码运行在Windows平台,需要引入头文件windows.h,编译时链接user32.lib(多数Windows开发环境会默认链接)。
核心逻辑
- 通过窗口类名遍历获取目标程序(记事本/Chrome)的窗口句柄
- 向每个目标窗口发送
WM_CLOSE消息,触发程序正常退出流程
示例代码
#include <windows.h> int main() { HWND hWnd = NULL; // 关闭所有正在运行的记事本(txt默认打开程序)窗口 while ((hWnd = FindWindowExW(NULL, hWnd, L"Notepad", NULL)) != NULL) { SendMessageW(hWnd, WM_CLOSE, 0, 0); } // 关闭所有正在运行的Chrome浏览器窗口 while ((hWnd = FindWindowExW(NULL, hWnd, L"Chrome_WidgetWin_1", NULL)) != NULL) { SendMessageW(hWnd, WM_CLOSE, 0, 0); } return 0; }
注意事项
- 如果txt文件有未保存的内容,发送
WM_CLOSE后会弹出保存确认弹窗,不会直接强制关闭。如果需要无提示强制关闭,可以先通过GetWindowThreadProcessId获取窗口对应进程ID,调用OpenProcess拿到进程句柄后用TerminateProcess强制结束进程,但该操作会丢失所有未保存数据,不推荐使用。 - Chrome采用多进程架构,关闭所有顶层窗口后一般会自动退出全部后台进程,若存在残留可以遍历系统进程列表,结束所有名为
chrome.exe的进程。
内容的提问来源于stack exchange,提问作者user15637411
相关产品推荐
相关产品推荐

