Здравствуйте, давно мучался как прочитать eventlog(Панель управления->Администрирование->Просмотр событий),дабы выдрать оттуда когда комп включили и выключили, но забил на это дело.
Сейчас решил всетаки доделать. Нашел что при запуске компьютера и при выключение возникает событие типа EventLog, и могут они быть 3 типов:
при запуске вылезает сообщение с описанием:
"Microsoft (R) Windows 2000 (R) 5.01. 2600 Service Pack 3 Multiprocessor Free."
и
"Запущена служба журнала событий."
а при выключение:
"Служба журнала событий остановлена."
Дальше ориентируемся на них, статей на эту тему в интернете довольно мало, поэтому после копания в функциях ковырянения, танцов с delphi, и т.п. телодвижейний сумел сделать чтение всех записей типа eventlog, сумел узнать их дату, и перевести дату в нормальный вид:
PHP код:
type
TEventLogRecord = record
Length: dword;
Reserved: dword;
RecordNumber: dword;
TimeGenerated: dword;
TimeWritten:dword;
EventID: dword;
EventType: word;
NumStrings: word;
EventCategory: word;
ReservedFlags: word;
ClosingRecordNumber: dword;
StringOffset: dword;
UserSidLength: dword;
UserSidOffset: dword;
DataLength: dword;
DataOffset: dword;
end;
PTEventLogRecord = ^TEventLogRecord;
procedure TForm14.Button1Click(Sender: TObject);
var
h, dwread, dwneeded: dword;
p, src:pointer;
b:PTEventLogRecord;
s:string;
begin
h:=OpenEventLog(nil, PChar('System'));
if h<>INVALID_HANDLE_VALUE then
begin
p:=AllocMem(1024*64);
src:=p;
while ReadEventLog(h, 4 or 1, 0, p, 1024*64, dwread, dwneeded) do
begin
while dwread>0 do
begin
begin
b:=p;
if PChar(integer(b)+sizeof(TEventLogRecord))='EventLog' then
begin
s:='record number: '+IntToStr(b^.RecordNumber)+#13#10 +'source: '+PChar(integer(b)+sizeof(TEventLogRecord))+#13#10 + ' event id: ' + IntToHex(b^.EventID,8) +#13#10 + ' event date: ';
s:=s+DateTimeToStr(UnixToDateTime(b.TimeWritten));
Memo1.Lines.Add(s);
end;
end;
dwread:=dwread-b^.Length;
p:=pointer(integer(p)+b^.Length);
end;
p:=src;
ZeroMemory(p, 1024*64);
end;
FreeMem(src);
CloseEventLog(h);
end;
end;
Тут все нормально работает, знаю что код не идеальный, но это единственное что я смог, и вот чтобы различить включение и выключение мне нужно получить описание событий, а как это сделать ума не приложу. Буду рад любой помощи, просьба не писать сообщения типа: иди в гугл, был ничего не нашел.