Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.11.2011, 19:50
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию Чтение EventLog

Здравствуйте, давно мучался как прочитать eventlog(Панель управления->Администрирование->Просмотр событий),дабы выдрать оттуда когда комп включили и выключили, но забил на это дело.
Сейчас решил всетаки доделать. Нашел что при запуске компьютера и при выключение возникает событие типа EventLog, и могут они быть 3 типов:
при запуске вылезает сообщение с описанием:
"Microsoft (R) Windows 2000 (R) 5.01. 2600 Service Pack 3 Multiprocessor Free."
и
"Запущена служба журнала событий."
а при выключение:
"Служба журнала событий остановлена."
Дальше ориентируемся на них, статей на эту тему в интернете довольно мало, поэтому после копания в функциях ковырянения, танцов с delphi, и т.п. телодвижейний сумел сделать чтение всех записей типа eventlog, сумел узнать их дату, и перевести дату в нормальный вид:
PHP код:
type
  TEventLogRecord 
record
 Length
dword;
 
Reserveddword;
 
RecordNumberdword;
 
TimeGenerateddword;
 
TimeWritten:dword;
 
EventIDdword;
 
EventTypeword;
 
NumStringsword;
 
EventCategoryword;
 
ReservedFlagsword;
 
ClosingRecordNumberdword;
 
StringOffsetdword;
 
UserSidLengthdword;
 
UserSidOffsetdword;
 
DataLengthdword;
 
DataOffsetdword;
 
end;
 
PTEventLogRecord = ^TEventLogRecord;


procedure TForm14.Button1Click(SenderTObject);
var
hdwreaddwneededdword;
psrc:pointer;
 
b:PTEventLogRecord;
 
s:string;
begin
h
:=OpenEventLog(nilPChar('System'));
if 
h<>INVALID_HANDLE_VALUE then
begin
p
:=AllocMem(1024*64);
src:=p;
while 
ReadEventLog(hor 10p1024*64dwreaddwneeded) do
begin
 
while dwread>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(p1024*64);
 
end;
 
FreeMem(src);
 
CloseEventLog(h);
 
end;
 
end
Тут все нормально работает, знаю что код не идеальный, но это единственное что я смог, и вот чтобы различить включение и выключение мне нужно получить описание событий, а как это сделать ума не приложу. Буду рад любой помощи, просьба не писать сообщения типа: иди в гугл, был ничего не нашел.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter