如何延迟closures/重新启动/hibernate在Windows 7或Windows 8在VC + +

我使用的是使用C ++开发的基于vs2012的应用程序。

如果应用程序正在运行,并执行一些处理,并且用户触发器重新启动/closures或hibernate,则应该暂停重新启动/closures,直到应用程序处理完成。

一旦应用程序处理完成,窗口应该恢复重新启动/closures。

我会高度赞赏,如果一些参考或示例代码相同可用

谢谢

我做了这样的事情

bool shutdownSystemWin(EShutdownActions action) { HANDLE hToken; TOKEN_PRIVILEGES tkp; // Get a token for this process. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return false; // Get the LUID for the shutdown privilege. LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // Get the shutdown privilege for this process. AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); if (GetLastError() != ERROR_SUCCESS) return false; // Shut down the system and force all applications to close. UINT flags = EWX_FORCE; switch (action) { case EShutdownActions::Shutdown: flags |= EWX_SHUTDOWN; break; case EShutdownActions::PowerOff: flags |= EWX_POWEROFF; break; case EShutdownActions::SuspendToRAM: return SetSuspendState(FALSE, FALSE, FALSE); case EShutdownActions::Hibernate: return SetSuspendState(TRUE, FALSE, FALSE); break; case EShutdownActions::Reboot: flags |= EWX_REBOOT; break; case EShutdownActions::LogOff: flags |= EWX_LOGOFF; break; } if (!ExitWindowsEx(flags, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_MINOR_UPGRADE | SHTDN_REASON_FLAG_PLANNED)) return false; //shutdown was successful return true; }