【小技巧】win32 控制台检测系统正在关机或者注销

您所在的位置:网站首页 azure控制台关机 【小技巧】win32 控制台检测系统正在关机或者注销

【小技巧】win32 控制台检测系统正在关机或者注销

2024-07-14 02:31| 来源: 网络整理| 查看: 265

本地进行编码时,发现似乎并没有具体提到如何在控制台上检测到关机/注销事件,特别是当控制台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