Windowsのエラーメッセージの内容を通訳して"日本語で表示する"ツール(コマンド版)

『ErrMsg』はWindowsのエラーメッセージの内容を通訳してくれるツールというのがあったが、
同じようなコマンドを自作していた。日本語で表示できるし、入力は10進数でも16進数でもOKにしている。

ダウンロード先

http://bit.ly/ckaMqS

使い方

  err2msg エラー番号

実行例

[D:\workspace\C_SandBox\02Windows\err2msg]err2msg 2
ERROR:2
MESSAGE:指定されたファイルが見つかりません。

[D:\workspace\C_SandBox\02Windows\err2msg]err2msg 0x1779
ERROR:6009
MESSAGE:指定されたファイルは読み取り専用です。

[D:\workspace\C_SandBox\02Windows\err2msg]err2msg 0
ERROR:0
MESSAGE:この操作を正しく終了しました。

[D:\workspace\C_SandBox\02Windows\err2msg]err2msg 11111
ERROR:11111
MESSAGE:NULL

ソース

自分のためのコマンドなので手抜き。
err2msg.c

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>

int main(int argc, char* argv[]){

    LPVOID lpMsgBuf = NULL;
    long error = 0;
    char buf[128] = {0};

    if(2 != argc ){
        printf("usage: %s ErrorNumber(GetLastError)\n", argv[0]);
        return (1);
    }
    error = atol(argv[1]);
    if( error == 0 ) {
        error = _strtoui64(argv[1], NULL, 16);
    } 
    FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER | 
            FORMAT_MESSAGE_FROM_SYSTEM | 
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            error,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsgBuf,
            0,
            NULL);
    if(lpMsgBuf == NULL){
        lpMsgBuf = "NULL";
    }
    printf("ERROR:%d\nMESSAGE:%s", error, lpMsgBuf);
}

コンパイル方法

cl err2msg.c