NET HELPMSG で表示されるエラーメッセージ一覧
以前にWindows XP MLに投稿した、NET HELPMSG で表示されるメッセージの一覧を取得するためのプログラム。再利用できそうなので、掲載してみる。
下記例では、C:\err.txtにエラーメッセージの一覧を保存する。0以上のエラー番号すべてについてループしているため、実行に時間がかかる。そのため、夜間などに実行しておくのがよいだろう。
ちなみに、Web 上では
http://msdn.microsoft.com/library/en-us/debug/base/system_error_codes.asp
にエラー番号とそれに対応するメッセージの一覧がある。
テキストファイルに落としたいなら、下記のプログラムをどうぞ。素のVBがなければ、Excel などの VBA 環境で動かしてください。もしかすると WMI でもう少しスマートに書けるのかも知れません。注意点としては、OS によって用意されているメッセージが異なる点と、NET HELPMSG と FormatMessage では番号の対応が必ずしも一致していないことです。
例えば、NET HELPMSG 3871 では NET HELPMSG のヘルプが表示されますが、下記の FormatMessage では 3871 に対応するメッセージは表示されません。
Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000 Private Const FORMAT_MESSAGE_ARGUMENT_ARRAY As Long = &H2000 Private Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" ( _ ByVal dwFlags As Long, _ ByVal lpSource As Long, _ ByVal dwMessageId As Long, _ ByVal dwLanguageId As Long, _ ByVal lpBuffer As String, _ ByVal nSize As Long, _ ByVal Arguments As Long _ ) As Long Private Function ErrorMessage(ByVal dwErrorCode As Long) As String Dim dwLen As Long Dim buf As String buf = String$(512, vbNullChar) dwLen = FormatMessage( _ FORMAT_MESSAGE_ARGUMENT_ARRAY Or FORMAT_MESSAGE_FROM_SYSTEM, _ 0, _ dwErrorCode, _ 0, _ buf, _ Len(buf) - 1, _ 0) If dwLen <> 0 Then ErrorMessage = Left$(buf, InStr(buf, vbNullChar) - 1) Else ErrorMessage = vbNullString End If End Function Public Sub MakeErrorList() Dim iFile As Integer Dim e As Long Dim s As String iFile = FreeFile Open "C:\err.txt" For Output As iFile For e = 0 To &H7FFFFFFF s = ErrorMessage(e) If Len(s) <> 0 Then Print #iFile, e & ":" & s Next Close iFile End Sub