如何执行程序清理时,用户按下关闭按钮在c++控制台应用程序
How to perform program cleanup when user presses close button in C++ console app?
所以我在Visual Studio中开发了一个c++控制台应用程序,用信用卡读卡器保存考勤记录,然后输出一个.csv文件。但是,由于程序现在是正确的,用户必须手动输入"exit"才能使程序成功关闭并生成。csv.
我知道非技术人员不会意识到这一点,他们可能只需要按下X键就会丢失数据。有没有办法捕捉到信号,让程序完成清理工作并关闭?
程序已经是windows专用的,所以这不是问题
使用SetConsoleCtrlHandler
设置CTRL_CLOSE_EVENT
事件的回调,该事件在按下窗口标题关闭"X"按钮时引发。
注意Ctrl+C事件是不同的:那是CTRL_C_EVENT
,但你处理它的方式相同:处理Win32上的Ctrl +C
#include <Windows.h>
BOOL onConsoleEvent(DWORD event) {
switch( event ) {
case CTRL_C_EVENT:
case CTRL_CLOSE_EVENT:
// do stuff
break;
}
return TRUE;
}
int main(int argc, char* argv[]) {
if( !SetConsoleCtrlHandler( onConsoleEvent, TRUE ) ) {
// die
}
// do stuff
}
正如你所说,这是windows特有的。,这应该不是问题。
请注意,您可以使用便携式signal
函数来设置SIGINT
事件的处理程序(对应于Ctrl+C),然而,据我所知,Windows的signal
函数没有对应于X按钮的回调事件,因此您必须使用SetConsoleCtrlHandler
。
#include <signal.h> // use `<cstdlib>` in C++
void onSigint(int value) {
// do stuff
}
int main(int argc, char* argv[]) {
signal(SIGINT, onSigint);
// do stuff
}
相关文章:
- 可能的Qt5错误:调用setFixedSize()禁用主窗口的关闭按钮(在Win7下)
- 如何隐藏最大化和最小化按钮并在qml应用程序窗口中显示关闭按钮?
- Arduino上的打开和关闭按钮
- 如何抓住CTabView关闭按钮按下
- 在关闭按钮上设置未保存的文件标记
- 在 WTL 中使向导的"关闭"按钮灰显
- 禁用 Win32 中的最小化、最大化、关闭按钮
- QDialog 打开时允许 QMainWindow 上的关闭按钮
- 禁用QDialogs默认关闭按钮(左上角"cross button")?
- 如何在不影响 ALT+F4 或在任务栏中关闭窗口的情况下重新调整窗口关闭按钮的用途?
- 单击对话框关闭按钮时,正确中止线程
- 自定义最小-最大关闭按钮实现
- 如何处理笔记本上的电源关闭按钮
- 如何执行程序清理时,用户按下关闭按钮在c++控制台应用程序
- 启用win32消息框中的关闭按钮
- WinAPI:创建可调整大小的窗口,没有标题栏,但有最小化/最大化/关闭按钮(如Firefox/Chrome/Opera
- 使用关闭按钮关闭Opencv窗口
- 为什么快板自动处理最小化按钮,而不是关闭按钮
- 我似乎无法使用Qt::WindowFlags添加关闭按钮
- 如何获取标题栏窗口控件的 RECT(最大化、最小化、关闭按钮)?我尝试制作自定义颜色标题栏