【小技巧】win32 控制台检测系统正在关机或者注销 |
您所在的位置:网站首页 › azure控制台关机 › 【小技巧】win32 控制台检测系统正在关机或者注销 |
本地进行编码时,发现似乎并没有具体提到如何在控制台上检测到关机/注销事件,特别是当控制台console处于system等权限时; 以上方法取自 https://stackoverflow.com/questions/6799955/how-to-detect-windows-shutdown-or-logoff 虽然是C#,但是方法是一致的,然后从 https://stackoverflow.com/questions/9049268/how-to-programmatically-determine-if-windows-is-shutting-down 中确认该方法可用,并已本地验证过了; 当本地程序属于窗口类型,且处理 WM_ENDSESSION消息失效时,可以使用该方法 建议使用如下代码,专门使用一个线程进行检测,然后也不会很浪费cpu资源,当然,肯定还有其他方法,不知道能不能找到
std::thread t([&,this]{ HANDLE h = CreateEvent(NULL, false, false, NULL); bool init = false; while (true) { if (!init) { LOG("get init shutdown"); init = true; } WaitForSingleObject(h, 10); bool bShutDown = GetSystemMetrics(SM_SHUTTINGDOWN); if (bShutDown) { LOG("get into shutdown"); this->DoShutDownEvent(); TerminateProcess(GetCurrentProcess(),0); //视情况是否自行结束进程 break; } } }); t.detach();
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |