Skip to content

Instantly share code, notes, and snippets.

@Bill-Stewart
Created April 6, 2020 17:07
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save Bill-Stewart/3b2208bf01d33b4cd3fcbb41821eebbf to your computer and use it in GitHub Desktop.
Save Bill-Stewart/3b2208bf01d33b4cd3fcbb41821eebbf to your computer and use it in GitHub Desktop.
getwinmsgs.pp - FPC program to output Windows error codes and descriptions as CSV
{$MODE OBJFPC}
{$H+}
{$APPTYPE CONSOLE}
program getwinmsgs;
uses
windows;
var
I: longint;
Msg: string;
function GetMessageFromSystem(const MessageId: DWORD): string;
var
MsgFlags: DWORD;
pBuffer: pchar;
Msg, StrID: string;
begin
result := '';
MsgFlags := FORMAT_MESSAGE_MAX_WIDTH_MASK or
FORMAT_MESSAGE_ALLOCATE_BUFFER or
FORMAT_MESSAGE_FROM_SYSTEM or
FORMAT_MESSAGE_IGNORE_INSERTS;
if FormatMessage(MsgFlags, // DWORD dwFlags
nil, // LPCVOID lpSource
MessageId, // DWORD dwMessageId
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // DWORD dwLanguageId
@pBuffer, // LPTSTR lpBuffer
0, // DWORD nSize
nil) > 0 then // va_list Arguments
begin
Msg := string(pBuffer);
LocalFree(HLOCAL(pBuffer));
if Msg[Length(Msg)] = ' ' then
SetLength(Msg, Length(Msg) - 1);
Str(MessageId, StrID);
result := StrID + ',"' + Msg + '"';
end;
end;
begin
WriteLn('"MessageId","Message"');
for I := 0 to 32767 do
begin
Msg := GetMessageFromSystem(I);
if Msg <> '' then WriteLn(Msg);
end;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment