用于关闭系统的简单实用程序






2.73/5 (16投票s)
只需在该工具上设置要关闭的机器的时间(24 小时制),选择是注销、重启或关闭,还是关闭电源(仅限 ATX 主板),然后单击“隐藏”。它已经在 Win9x/ME、WinNT/2000/XP 上进行了测试。
引言
这是一个用于关闭系统的简单实用程序。
只需在该工具上设置要关闭的机器的时间(24 小时制),选择是注销、重启或关闭,还是关闭电源(仅限 ATX 主板),然后单击“隐藏”。它已经在 Win9x/ME、WinNT/2000/XP 上进行了测试。完整的源代码位于 Zip 文件中。
如果在使用过程中遇到问题,请在设置结束时间时确保单击该数字后的数字。它是一个列表框,因此除非您通过单击选择一个数字,否则GetCaretIndex()
调用将始终返回 0。
此工具的新功能是什么?
- 嗯,旧瓶装新酒。
OnInitDialog()
中的糟糕代码已完全替换为新代码。现在,我的一些同事既不会因为看到该代码而被完全关闭 ;-D,也不会觉得它很糟糕!!!。 - 对话框刷新由标志切换,因此它不会不必要地重绘(当单击菜单“打开主窗口”时)。
- 可以通过消息框中止正在进行的关闭。
真正缺少的是什么?
- 关闭远程计算机的能力。
我这里没有网络。但是,如果您想远程关闭计算机,请使用以下函数:BOOL InitiateSystemShutdown
。它具有以下参数
- 指向要关闭的计算机名称的指针,
- 指向要在对话框中显示的消息的指针,
- 显示对话框的时间,
- 强制关闭应用程序标志,
- 重新启动标志。
第一个参数采用网络中计算机的名称。如果它是null
,则本地计算机将被关闭。
工作
一旦您运行/编译,它将传递到系统托盘。OnInitDialog()
将使用小时/分钟/秒填充列表框,如下所示
CListBox* pListHrs = static_cast(GetDlgItem(IDC_LISTHRS)); while(i<=24) { _itoa(i,buff,10); pListHrs->AddString(buff); i++;}
定时器将开始执行,并定期检查用户的时间。一旦满足条件,所选选项将传递给Sflag
。反过来,在switch
语句中检查此标志,并执行以下代码
Switch(Sflag) { case 0: CDialog::KillTimer (nIDEvent); ExitWindowsEx(EWX_SHUTDOWN ,EWX_FORCE); exit(0); break; . . . }
如果您有最新版本的 Visual Studio 和 MSDN(我没有),您可以简单地添加休眠。您可以将EWX_FORCEIFHUNG
代替EWX_FORCE
用于 Windows NT 5.0 及更高版本:如果进程不响应WM_QUERYENDSESSION
或WM_ENDSESSION
消息,它将强制进程终止。如果使用EWX_FORCE
,则忽略此标志。
致谢
至于我的实用程序中使用的不同类,适当的感谢给予
- Niek Albers 的
CHoverButton
。 - Keith Rule 的自动字体。
- Chris Maunder 的系统托盘。
- Microsoft 的在线 MSDN。
tray.cpp 和 tray.h 最初在 CodeProject 中被命名为 systemtray.cpp 和 systemtray.h。所有以上类文件均从 CodeProject 下载。感谢所有直接或间接帮助我(以及其他实用程序)的人。特别感谢所有维护 CodeProject 的人。