Как писать в EventLog?

19:41
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1139299249&n=5
Lucefer (07.02.06 11:00)
Пишу сервис, соотвтетственно никаких окон об ошибках быть не должно, все перехватываю по exception. Сейчас кидаю сообщения в текстовый файл, а как их записать в журнал событий?
----------------------------------
Игорь Шевченко © (07.02.06 11:40) [1]
RegisterEventSource,ReportEvent

unit eventlog;
 
interface
 
uses
 
Windows, SysUtils;
 
var
 
hEventLog: THandle;
 
procedure LOGWRITE(EventCat: Word; EventType: UINT; EventId: DWORD; const Msg: string); overload;
procedure LOGWRITE(EventCat: Word; EventType: UINT; EventId: DWORD; const Msg: string; Args: array of const); overload;
procedure LOGMESSAGE(const Msg: string); overload;
procedure LOGMESSAGE(const Msg: string; Args: array of const); overload;
procedure LOGWARNING(const Msg: string); overload;
procedure LOGWARNING(const Msg: string; Args: array of const); overload;
procedure LOGERROR(const Msg: string); overload;
procedure LOGERROR(const Msg: string; Args: array of const); overload;
 
function OpenLog(const EventSource: string): Boolean;
procedure SetLogCategory(EventCategory: Word);
procedure CloseLog;
 
implementation
 
const
 
EVT_MY_ERROR = $C0000001;
EVT_MY_WARNING = $80000002;
EVT_MY_INFO = $40000003;
 
var
 
EventCat: Word = 0;
 
function OpenLog(const EventSource: string): Boolean;
begin
if hEventLog = 0 then
hEventLog := RegisterEventSource(nil, PChar(EventSource));
Result := hEventLog <> 0;
end;
 
procedure CloseLog;
begin
if hEventLog <> 0 then begin
DeregisterEventSource(hEventLog);
hEventLog := 0;
end;
end;
 
procedure SetLogCategory(EventCategory: Word);
begin
EventCat := EventCategory;
end;
 
procedure LOGWRITE(EventCat: Word; EventType: UINT; EventId: DWORD; const Msg: string);
var
P: PChar;
begin
P := PChar(Msg);
ReportEvent(hEventLog, EventType, EventCat, EventId, nil, 1, 0, @P, nil);
end;
 
procedure LOGWRITE(EventCat: Word; EventType: UINT; EventId: DWORD; const Msg: string; Args: array of const);
var
S: string;
P: PChar;
begin
S := Format(Msg, Args);
P := PChar(S);
ReportEvent(hEventLog, EventType, EventCat, EventId, nil, 1, 0, @P, nil);
end;
 
procedure LOGMESSAGE(const Msg: string);
begin
LOGWRITE(EventCat, EVENTLOG_INFORMATION_TYPE, EVT_MY_INFO, Msg);
end;
 
procedure LOGMESSAGE(const Msg: string; Args: array of const);
begin
LOGWRITE(EventCat, EVENTLOG_INFORMATION_TYPE, EVT_MY_INFO, Msg, Args);
end;
 
procedure LOGWARNING(const Msg: string);
begin
LOGWRITE(EventCat, EVENTLOG_WARNING_TYPE, EVT_MY_WARNING, Msg);
end;
 
procedure LOGWARNING(const Msg: string; Args: array of const);
begin
LOGWRITE(EventCat, EVENTLOG_WARNING_TYPE, EVT_MY_WARNING, Msg, Args);
end;
 
procedure LOGERROR(const Msg: string);
begin
LOGWRITE(EventCat, EVENTLOG_ERROR_TYPE, EVT_MY_ERROR, Msg);
end;
 
procedure LOGERROR(const Msg: string; Args: array of const);
begin
LOGWRITE(EventCat, EVENTLOG_ERROR_TYPE, EVT_MY_ERROR, Msg, Args);
end;
 
initialization
hEventLog := 0;
finalization
CloseLog;
end.

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1139299249&n=5