一个执行自动关机、注销或重启操作的工具






4.76/5 (11投票s)
2004年12月18日
2分钟阅读

92657

2911
这是一个简单的工具,用于在指定时间自动关机、注销或重启您的计算机。该工具在最小化后将在系统托盘中运行。
引言
这是一个简单的工具,用于在指定时间自动关机、注销或重启您的计算机。当您希望在一段时间后注销、关闭或重启计算机,而您又不在计算机旁时,它非常有用,例如,您希望在完成下载或磁盘碎片整理后 3 或 4 小时后关机。为此,选择“在此计算机关闭后”单选按钮,并在编辑框中指定 240 分钟,然后单击“应用”。
该工具还通过简化的代码教授托盘图标操作背后的技术。
详细信息
应用(“应用”)后将启动两个计时器。一个计时器将显示闪烁的图标,另一个计时器将检查时间并执行操作。该操作可以是以下任何一项。
- 关机
- 注销
- 重启
下面的代码是执行操作的代码。要执行这些操作,登录用户必须具有 TOKEN_ADJUST_PRIVILEGES
和 TOKEN_QUERY
权限。否则,这将失败。
void CStayONDlg::OnAction() { HANDLE hToken; TOKEN_PRIVILEGES tkp; if (OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, & hToken)) {// open and check the privileges for to perform the actions LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, & tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(AdjustTokenPrivileges( hToken, FALSE, & tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0)) {/// adjust the privilege to perform the action if(m_dwAction & STAT_SWOFF) ExitWindowsEx( EWX_SHUTDOWN| EWX_POWEROFF| EWX_FORCE, 0); else if(m_dwAction & STAT_SWOFFTIMER) ExitWindowsEx( EWX_SHUTDOWN| EWX_POWEROFF| EWX_FORCE, 0); else if(m_dwAction & STAT_LOGOFF) ExitWindowsEx( EWX_LOGOFF| EWX_FORCE, 0); else if(m_dwAction & STAT_LOGOFFTIMER) ExitWindowsEx( EWX_LOGOFF| EWX_FORCE, 0); else if(m_dwAction & STAT_RESTART) ExitWindowsEx( EWX_REBOOT| EWX_FORCE, 0); else if(m_dwAction & STAT_RESTARTTIMER) ExitWindowsEx( EWX_REBOOT| EWX_FORCE, 0); } } int err = GetLastError(); if(err) {// if any error occurs the report to the user LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER| FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) & lpMsgBuf, 0, NULL); MessageBox( (LPTSTR)lpMsgBuf, "StayON", MB_OK|MB_ICONERROR); LocalFree(lpMsgBuf); } // make sure you quit after issueing any commands PostQuitMessage(0); exit(0); }
EWX_FORCE
标志将忽略任何正在运行的进程。如果删除此标志,关机、注销或重启操作将等待其他进程完成。例如,如果在 MS-Word 中打开了未保存的文档,则关机、注销或重启操作将等待 MS-Word 关闭。即,它将等待用户单击 MS-Word 文档上的“保存”。有关更多详细信息,请参阅 MSDN 中的 ExitWindowsEx
。
结论
希望这个工具对某些人有用。我想提醒您,我对该工具造成的任何损害概不负责。谢谢。
警告:此工具无法检测计算机上正在进行的任何进程。它将无论任何进程正在运行都执行关机、注销或重启操作。因此,请谨慎预测关机、重启或注销的时间。