91

我想知道提供有关上次 Windows 重新启动源信息的 Windows API 函数(如果存在)是什么。可能的原因主要有以下三种:

  1. 电脑蓝屏死机
  2. 用户或程序关闭/重新启动计算机
  3. 失去了力量

我能得到的细节越多越好。但是,我至少需要知道主要的原因是什么。

我需要支持 Windows Vista 和 Windows 7。

回答:

似乎没有直接的 API 可以获取该信息。相反,我们必须收集 Windows 事件日志。系统重新启动信息位于事件查看器/Windows 日志/系统中。以下是事件 ID 提供的各种信息:

  • 6005:Windows 启动
  • 6006:Windows 关闭(正确)
  • 6008:Windows 关闭(意外)

我还没有明白断电和系统崩溃之间的区别,但这是一个好的开始。

4

2 回答 2

104

本文详细解释了如何查找上次启动/关闭的原因。就我而言,这是由于 Windows SCCM 推送更新,即使我已在本地禁用它。访问文章以获取带有图片的完整详细信息。作为参考,以下是从网站复制/粘贴的步骤:

  1. Windows+R键打开“运行”对话框,键入eventvwr.msc,然后按Enter

  2. 如果 UAC 提示,则单击/点击是 (Windows 7/8) 或继续 (Vista)。

  3. Event Viewer的左窗格中,双击/点击Windows Logs将其展开,单击System将其选中,然后右键单击 System,然后单击/点击Filter Current Log

  4. 执行下面的第 5 步或第 6 步,了解您希望查看的关闭事件。

  5. 查看所有用户关闭计算机的日期和时间

    A) 在事件源中,单击/点击下拉箭头并选中该USER32框。

    B) 在All Event IDs字段中,键入1074,然后单击/点击OK

    C)这将在事件查看器的中间窗格顶部为您提供关闭(关机)和重新启动关闭类型的事件列表。

    D) 您可以滚动浏览这些列出的事件,以找到关机类型为关机类型的事件。您会注意到日期和时间,以及列出的每个关机事件由哪个用户负责关闭计算机。

    E) 转到步骤 7。

  6. 查看所有意外关闭计算机的日期和时间

    A. 在所有事件 ID字段类型6008中,然后单击/点击确定

    B. 这将在事件查看器的中间窗格顶部为您提供意外关闭事件的列表。您可以滚动浏览这些列出的事件以查看每个事件的日期和时间。

  7. 完成后,您可以关闭事件查看器。


其他有用的事件 ID(来源

ID 描述
41 系统已重新启动,但未先完全关闭。
1074 系统已被用户或进程正确关闭。
1076 在事件 ID 6008 之后出现,表示第一个具有关机权限的用户在意外重新启动或关机后登录到服务器并指定了原因。
6005 事件日志服务已启动。表示系统启动。
6006 事件日志服务已停止。指示正确的系统关闭。
6008 先前的系统关闭是意外的。
6009 系统启动时检测到的操作系统版本。
6013 系统正常运行时间(以秒为单位)。
于 2014-06-13T13:34:08.880 回答
19

查看事件日志 API。情况 a)(蓝屏,用户切断电源线或系统挂起)导致下次系统正确重新启动时在“系统”事件日志中留下一条注释(“系统未正确关闭”或类似的东西)。您应该能够使用上述 API 以编程方式访问它(老实说,我从未使用过它,但它应该可以工作)。

于 2010-01-26T14:51:01.883 回答