■ エラーコードの内容を Excel 用 CSV 形式ファイルで出力
/*
* winerror.c : エラーコードの内容を
* Excel 用 CSV 形式ファイルで出力
*
* Copyright (c) 2006 AOK.
*
* 2006/01/27 - 初版
*
*/
#include <windows.h>
#include <stdio.h>
#define MIN_ERROR_NO 0
#define MAX_ERROR_NO 11999
#define OUTPUT_FILENAME "winerror.csv"
void MakeCsvFormat(LPTSTR lpBuf)
{
LPTSTR lpSave, lpSrc;
lpSave = strdup(lpBuf);
lpSrc = lpSave;
while (*lpSrc != '\0') {
if (*lpSrc == '"') {
*lpBuf++ = '"';
*lpBuf++ = '"';
} else if (*lpSrc != '\r') {
*lpBuf++ = *lpSrc;
}
++lpSrc;
}
*lpBuf-- = '\0';
while (*lpBuf == '\n' || *lpBuf == ' ')
*lpBuf-- = '\0';
free(lpSave);
}
int main()
{
LPVOID lpMsgBuf;
DWORD dwNo, dwCount = 0, dwMax = MIN_ERROR_NO;
int nLen = 0, nLenNew;
TCHAR lpBuf[500];
FILE *fp;
if ((fp = fopen(OUTPUT_FILENAME, "wb")) == NULL) {
puts("ファイルをオープン出来ません。");
return 1;
}
printf("書き出し中 ");
for (dwNo = MIN_ERROR_NO; dwNo <= MAX_ERROR_NO; dwNo++) {
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwNo,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf, 0, NULL);
if (lpMsgBuf != NULL) {
nLenNew = lstrlen((LPCTSTR)lpMsgBuf);
if (nLenNew > nLen) {
nLen = nLenNew;
dwMax = dwNo;
}
strcpy(lpBuf, (LPCTSTR)lpMsgBuf);
MakeCsvFormat(lpBuf);
fprintf(fp, "%lu,\"%s\"\r\n", dwNo, lpBuf);
}
if (dwCount++ % 1000 == 0) putchar('.');
LocalFree(lpMsgBuf);
}
fclose(fp);
printf("\n出力を完了しました。");
printf("最長 %ld バイト(%lu)\n", nLen, dwMax);
return 0;
}