C++ 在windows平台的程序 如果用户手动输入 taskkill /f /pid 来杀死我的程序 我该如何知道 类似atexit函数? 能给我一个示例代码么
时间: 2024-03-17 14:45:30 浏览: 28
下面是一个示例代码,使用 SetConsoleCtrlHandler 函数来注册一个控制台关闭事件处理函数:
```c++
#include <Windows.h>
#include <iostream>
using namespace std;
BOOL CtrlHandler(DWORD fdwCtrlType);
int main()
{
// 注册控制台关闭事件处理函数
SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE);
// 程序主体
while (true) {
cout << "程序正在运行..." << endl;
Sleep(1000);
}
return 0;
}
BOOL CtrlHandler(DWORD fdwCtrlType)
{
switch (fdwCtrlType) {
case CTRL_C_EVENT:
case CTRL_CLOSE_EVENT:
case CTRL_BREAK_EVENT:
case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT:
// 在这里执行清理工作
cout << "程序被关闭了!" << endl;
return TRUE;
default:
return FALSE;
}
}
```
在这个示例代码中,我们在程序启动时使用 SetConsoleCtrlHandler 函数注册了一个控制台关闭事件处理函数 CtrlHandler。当用户手动输入 "taskkill /f /pid" 命令来杀死程序时,将触发控制台关闭事件,该事件将被 CtrlHandler 函数捕获并执行清理工作。
注意,这种方式只能捕获控制台关闭事件,如果用户直接关闭程序窗口或者程序崩溃等其他情况,将无法触发该事件。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![bat](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)