2010-01-26 55 views
39

我想知道提供有關最後一次Windows重新啓動源的信息的Windows API函數(如果有)。主要有三種可能的原因:如何獲取Windows最後一次重新啓動原因

  1. 電腦死機藍屏
  2. 用戶或程序關閉上/重啓
  3. 一個掉電

的更多詳細信息我可以在電腦變得更好。但是,我需要知道至少從主要原因來看它是哪個原因。

我需要支持Windows Vista和Windows 7

答:

似乎沒有直接的API來獲取這些信息。相反,我們必須收穫Windows事件日誌。系統重新啓動信息位於事件查看器/ Windows日誌/系統中。這裏是由事件IDS提供的各種信息:

  • 6005:Windows啓動
  • 6006:Windows關機(正常)
  • 6008:Windows關機(意外)

我還沒有獲得功率損失和系統崩潰之間的差異,但這是一個好的開始。

+0

可能重複:http://stackoverflow.com/questions/1315858/get-windows-server-shutdown-reason-in-c – 2010-01-26 14:51:13

+2

這篇文章是關於C#,我需要的Windows API(C/C++) – Frederic 2010-01-26 14:54:39

回答

16

看一看的Event Log API。情況a)(藍屏,用戶切斷電源和絃或系統掛起)導致一個音符('系統沒有正確關閉'或類似的東西)留在'系統'事件日誌中,下一次系統正常重啓。你應該能夠使用上面的API以編程方式訪問它(老實說,我從來沒有使用它,但它應該可以工作)。

+0

聽起來不錯,但我應該找什麼? – Frederic 2010-01-26 18:01:38

+1

找到它,它在系統事件日誌中。 – Frederic 2010-01-27 17:40:18

+1

我注意到系統凍結時出現以下消息:「系統已經重新啓動而沒有首先完全關閉,如果系統停止響應,崩潰或意外斷電,可能會導致此錯誤。」這看起來像一個普通的消息。有誰知道是否有辦法區分藍屏和系統死機? – 2011-10-16 22:49:55

20

article詳細解釋如何找到上次啓動/關機的原因。在我的情況下,這是由於SCCM推送更新,即使我本地禁用了它。訪問文章的全部細節與圖片。作爲參考,這裏的步驟複製/從網站上粘貼:

  1. 按Windows + R鍵打開運行對話框,鍵入eventvwr.msc,然後按Enter。

  2. 如果UAC提示,然後點擊/點擊是(Windows 7/8)或繼續(Vista)。

  3. 在事件查看器的左側窗格中,雙擊Windows日誌中的/點擊以展開它,單擊系統選擇它,然後右鍵單擊 系統,然後單擊/點擊過濾器當前日誌。

  4. 請執行以下第5步或第6步,瞭解您希望看到什麼關機事件。

  5. 看電腦

    A的所有用戶停機的日期和時間)點擊/點的下拉箭頭的事件源, 檢查USER32框的右側,然後單擊/ TAP在該領域。

    B)在字段中輸入1074,然後點擊/點擊確定。

    C)這會給你一個關閉電源(關機)並重新啓動的列表 關閉事件查看器中間窗格頂部的事件類型。 D)您可以滾動查看這些列出的事件,以查找關閉電源時的事件 作爲關閉類型。您將注意到日期和 時間,以及用戶負責關閉計算機的每個 關機事件。

    E)轉到步驟7

  6. 看電腦

    A的所有意外停機)在現場的日期和時間,鍵入6008,然後點擊/點就OK了。

    B)這會給你一個事件查看器中間窗格頂部的 意外關閉事件列表。您可以滾動瀏覽列出的這些事件以查看每個日期和時間。

  7. 完成後,您可以關閉事件查看器。

+0

完美。我在USER32中使用了事件源過濾器,並發現Dell恢復正在重新啓動我的系統。 – max 2015-12-09 18:23:47

+0

謝謝!過濾事件ID爲** 6008 **的系統事件,列出導致關機的關鍵事件。 – 2016-02-02 14:16:46

+0

這實質上是一個僅鏈接的答案。萬一鏈接變得無法訪問,這個答案變得沒有任何有用的信息。此外,OP正在要求進行API調用。您的鏈接通過一系列手動步驟導航用戶來提供答案。這並不構成解決問題的方法。 – IInspectable 2017-07-26 12:40:46

相關問題