今回は、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 のページ(JavaScript)を参考にしています。
今回のサンプルコードを参考に、停止コード(例:APC_INDEX_MISMATCH)の取得など、いろいろと試してみてください。
コメント