65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.73/5 (16投票s)

2003 年 3 月 29 日

CPOL

2分钟阅读

viewsIcon

97931

downloadIcon

766

只需在该工具上设置要关闭的机器的时间(24 小时制),选择是注销、重启或关闭,还是关闭电源(仅限 ATX 主板),然后单击“隐藏”。它已经在 Win9x/ME、WinNT/2000/XP 上进行了测试。

引言

这是一个用于关闭系统的简单实用程序。

只需在该工具上设置要关闭的机器的时间(24 小时制),选择是注销、重启或关闭,还是关闭电源(仅限 ATX 主板),然后单击“隐藏”。它已经在 Win9x/ME、WinNT/2000/XP 上进行了测试。完整的源代码位于 Zip 文件中。

如果在使用过程中遇到问题,请在设置结束时间时确保单击该数字后的数字。它是一个列表框,因此除非您通过单击选择一个数字,否则GetCaretIndex()调用将始终返回 0。

此工具的新功能是什么?

  1. 嗯,旧瓶装新酒。OnInitDialog()中的糟糕代码已完全替换为新代码。现在,我的一些同事既不会因为看到该代码而被完全关闭 ;-D,也不会觉得它很糟糕!!!。
  2. 对话框刷新由标志切换,因此它不会不必要地重绘(当单击菜单“打开主窗口”时)。
  3. 可以通过消息框中止正在进行的关闭。

真正缺少的是什么?

  • 关闭远程计算机的能力。

我这里没有网络。但是,如果您想远程关闭计算机,请使用以下函数:BOOL InitiateSystemShutdown。它具有以下参数

  1. 指向要关闭的计算机名称的指针,
  2. 指向要在对话框中显示的消息的指针,
  3. 显示对话框的时间,
  4. 强制关闭应用程序标志,
  5. 重新启动标志。

第一个参数采用网络中计算机的名称。如果它是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_QUERYENDSESSIONWM_ENDSESSION消息,它将强制进程终止。如果使用EWX_FORCE,则忽略此标志。

致谢

至于我的实用程序中使用的不同类,适当的感谢给予

  • Niek Albers 的CHoverButton
  • Keith Rule 的自动字体。
  • Chris Maunder 的系统托盘。
  • Microsoft 的在线 MSDN。

tray.cpptray.h 最初在 CodeProject 中被命名为 systemtray.cppsystemtray.h。所有以上类文件均从 CodeProject 下载。感谢所有直接或间接帮助我(以及其他实用程序)的人。特别感谢所有维护 CodeProject 的人。

© . All rights reserved.