サンプルコード

Autoit|バグチェックコードの詳細ページを開くサンプルコード

今回は、Microsoft のバグ チェック コード リファレンスのページから、ページのソースを取得し、正規表現を使用してバグチェックコードの詳細ページを開くサンプルコードを紹介します。

バグチェックコードは、Windows でブルースクリーンになった時に表示される(表示されない場合もある)エラーコードです。

イベントビューアーでエラーコードを探す方法

「ブルースクリーン – バグチェックコード」の仕組み

  • Microsoft のバグ チェック コード リファレンスのページから、ページのソースを取得します。
  • 取得したページのソースから StringRegExp 関数(正規表現)を使用し、バグチェックコードのリストを取得してコンボボックスに表示します。
  • 「選択したコードの詳細を開く」ボタンをクリックすると、コンボボックスに表示されたバグチェックコードのページをブラウザで開きます。

サンプルコード

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $Result
Global $MicrosoftUrl = "https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/"

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("ブルースクリーン - バグチェックコード", 440, 100, 192, 124, -1, $WS_EX_TOPMOST)
$MenuItem1 = GUICtrlCreateMenu("ファイル")
$MenuItem5 = GUICtrlCreateMenuItem("終了", $MenuItem1)
$MenuItem2 = GUICtrlCreateMenu("ヘルプ")
$MenuItem3 = GUICtrlCreateMenuItem("WEBサイトへ", $MenuItem2)
$MenuItem4 = GUICtrlCreateMenuItem("バージョン", $MenuItem2)

$BugCodeList = GetPageSource()
$Combo1 = GUICtrlCreateCombo("", 24, 8, 393, 25)
GUICtrlSetData($Combo1, $BugCodeList)
$Button1 = GUICtrlCreateButton("選択したコードの詳細を開く", 24, 40, 393, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $MenuItem5
            Exit
        Case $Button1
            $BugCode = GUICtrlRead($Combo1)
            If $BugCode Then
                $Url = StringRegExp($Result, '(?s)<td>' & $BugCode & '<.+?<a href="([^"]+)"', 1)
                If Not @error Then ShellExecute($MicrosoftUrl & $Url[0])
            EndIf
        Case $MenuItem3
            ShellExecute("https://autoit.windows-waza.com/")
        Case $MenuItem4
            MsgBox(0, "バージョン", "1.0")
    EndSwitch
WEnd

Func GetPageSource()
    Local $Code = ""
    Local $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $oHTTP.Open('GET', $MicrosoftUrl & 'bug-check-code-reference2/', False)
    $oHTTP.Send()
    $Result = BinaryToString($oHTTP.ResponseText, 4)
    Local $Source = StringRegExp($Result, "<td>(0x[^<]+)", 3)
    If Not @error Then
        For $i = 0 To UBound($Source) - 1
            $Code &= $Source[$i]
            If $i <> UBound($Source) - 1 Then $Code &= "|"
        Next
    Else
        MsgBox(16, "ブルースクリーン - バグチェックコード", "エラーが発生しました。プログラムを終了します。")
        Exit
    EndIf
    Return $Code
EndFunc   ;==>GetPageSource
「選択したコードの詳細を開く」ボタンをクリックすると、Microsoft のページが開きます。

ページソースの取得は Microsoft のページ(JavaScript)を参考にしています。

https://learn.microsoft.com/ja-jp/windows/win32/winhttp/iwinhttprequest-send

今回のサンプルコードを参考に、停止コード(例:APC_INDEX_MISMATCH)の取得など、いろいろと試してみてください。

コメント