Статьи по Делфи
Меню сайта


Категории каталога
Мои статьи [2]
Функции и процедуры Win Api [20]
Работа с мышью [10]
Реестр и Делфи [11]
Работа с файлами [38]
Делфи и Хакер [10]
Инсталлятор собственными руками [6]
Хитрости в делфи [3]
Работа с системой [19]


Форма входа


Поиск по каталогу


Друзья сайта


Наш опрос
Понравились ли вам треки
Всего ответов: 156


Приветствую Вас, Гость · RSS 2024-04-26, 6:27 AM
Начало » Статьи » Функции и процедуры Win Api

Запись сообщений в журнал событий Windows на Delphi
Приложение может записывать сообщения в журнал используя следующие функции WinAPI. Подробное описание параметров этих функций содержится в документации к API.
RegisterEventSource - Открывает handle для доступа к журналу на локальной или удаленной машине.
ReportEvent - Собственно записывает сообщение.

Для записи сообщений в журнал в упрощенной манере просто произведите вызов RegisterEventSource с именем машины (UNC), в журнал которой вы хотите поместить сообщение (nil для локальной машины), и именем события. Имя события это обычно имя приложения, но может быть чем-то более информативным. Как только источник событий зарегистрирован, можно записывать события при помощи ReportEvent с handle, который вернула RegisterEventSource.

Листинг 1. Пример

VAR EventLog:THandle;
EventLog:=RegisterEventSource(nil,PChar(′MyApplication′));

VAR MyMsg:Array[0..2] of PChar;
MyMsg[0]:=′A test event message′;

ReportEvent(EventLog,EVENTLOG_INFORMATION_TYPE,0,0,nil,1,0,@MyMsg,nil);

Однако текст сообщения, записанного в журнал будет предварен текстом: "The description for Event ID ( 0 ) in Source ( MyApplication ) cannot be found. The local computer may not have necessary registry information or message DLL files to display messages from a remote computer. The following information is part of the event:" (Не найдено описание для события с кодом ( 0 ) в источнике ( MyApplication ). Возможно, на локальном компьютере нет нужных данных в реестре или файлов DLL сообщений для отображения сообщений удаленного компьютера. В записи события содержится следующая информация:) (Замечание: Это сообщение специфично для Windows2000 и может немного отличаться на других версиях). Для предотвращения появления этого текста необходимо внести в реестр некоторые ключи, как показано ниже, и определить строковые ресурсы (это может быть выполнено любым компонентом вашего приложения, не обязательно приложением, которое будет записывать события). Соответствующие записи реестра описаны ниже. Примеры кода предполагают, что строковые ресурсы и категории расположены в том же исполняемом файле, который содержит программу, записывающую события. Ключи категорий являются опциональными. Смысл этих ключей реестра и строковых ресурсов в том, что журнал событий использует строку, а приложение записывает в журнал в виде форматированного аргумента, и журналу необходимо знать, где находится описатель формата для этой строки. Кроме того, в журнале может храниться информация о категории события, полезная для просмотра событий. Это удобнее, чем просто отображать множество однотипный событий "Нет". Самый простой определитель формата это %1, который просто передаст в журнал входную строку. Для более подробного изучения определителей формата см. API документацию для FormatMessage.
Ключи реестра

Создайте следующий ключ реестра:

HKEY_LOCAL_MACHINESYSTEM - CurrentControlSet - Services - Eventlog - Application -

Имя приложения AppName должно совпадать с именем источника, использованного при вызове RegisterEventSource, потому что просмотрщик событий будет использовать это имя для отыскивания событий.

Создайте следующие ключи:

CategoryCount (Optional) - Integer - Количество категорий событий, которые вы собираетесь использовать. (Это максимальная величина, и не будет проблем, если не все категории на самом деле будут применяться).
CategoryMessageFile (Optional) - String - Файл, содержащий ресурсы строк категорий.
EventMessageFile - String - Файл, содержащий ресурсы строк событий.
TypesSupported - Integer - Допустимые типы событий.

Листинг 2. Пример кода для создания необходимых записей в реестре

VAR
Reg:TRegistry;
RegKey:String;
AppPath:String;
AppName:String;
NumCategories:Integer;

Begin
Reg:=TRegistry.Create;
Try
AppPath:=Application.ExeName;
AppName:=′MyApplication′;
NumCategories:=2;
RegKey:=
Format(′SYSTEMCurrentControlSetServicesEventLogApplication%s′,[AppName]);
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey(RegKey,True);
// Собственное имя
Reg.WriteString(′CategoryMessageFile′,AppPath);
// Собственное имя
Reg.WriteString(′EventMessageFile′,AppPath);
// Максимальное количество категорий
Reg.WriteInteger(′CategoryCount′,NumCategories);
// Разрешаем все типы
Reg.WriteInteger(′TypesSupported′,EVENTLOG_SUCCESS or
EVENTLOG_ERROR_TYPE or
EVENTLOG_WARNING_TYPE or
EVENTLOG_INFORMATION_TYPE);
Reg.CloseKey;
EventLog:=RegisterEventSource(nil,PChar(AppName));
Finally
Reg.Free;
End; //try..finally

End;

Сообщение и ресурсы категорий.

Информация, помещаемая в реестр вышеприведенным кодом, информирует журнал событий о том, где искать строки событий и категорий, основываясь на имени источника, которое использует приложение для записи в журнал. И, как мы уже говорили, чтобы журнал событий искал эти строки в нашем исполняемом файле, нам нужно включить эти строковые ресурсы в наш файл. Этот процесс состоит из следующих шагов:
Написание исходного файла таблицы сообщений (файл .mc).
Компиляция .mc файла при помощи Microsoft message compiler.
Подключение получившейся информации к нашему Delphi приложению.

Есть много примеров по написанию .mc файлов в Windows SDK и на различных сайтах, включая MSDN, однако документация не достаточно проста, поэтому приводим минимально достаточное описание для создания файла таблицы сообщений:

Листинг 3. Код Delphi/Pascal

;//Example Message source file exmess.mc
MessageId=0
Language=English
%1
.

MessageId=1
Language=English
Category1
.

MessageId=2
Language=English
Category2
.

Строки, начинающиеся с ;// являются комментариями и не компилируются. Этот пример содержит три строковых ресурса - один определитель формата сообщения и две категории, хотя файл может содержать только первый ресурс. Каждый ресурс отделен одной отдельной точкой на строке, так же, как и в конце файла. Если в конце файла отсутствует перевод строки после точки, то файл не будет скомпилирован. Первая строка каждого ресурса является MessageID (index), при помощи которого приложение будет обращаться к строке. Следующая строка указывает язык ресурса. В нашем случае "English" - означает international English, язык по умолчанию для всех Windows платформ. Информацию по многоязыковым ресурсам см. в справке к компилятору ресурсов. Последняя строка определяет собственно текст сообщения. В случае ресурса 0, строка будет "%1", что означает, что передается сама строка. Если, например, нужен префикс сообщения "An Event Message" (Сообщение события), то строка будет иметь вид: "An Event Message %1". Более полное описание форматов см. в API справке по FormatMessage и компилятору ресурсов. Ресурсы категорий не требуют форматированных аргументов. Как видно в примере, мы определили две категории "Category1" и "Category2". Следующий этап - компиляция .mc файла при помощи Microsoft message compiler (mc.exe), который можно взять у Microsoft (входит в состав Platform SDK). Наш пример, имеющий имя "exmess.mc" может быть скомпилирован из командной строки таким образом:

Mc exmess.mc

В результате получаем три файла: exmess.rc, bin00001.msg и exmess.h. emess.h может быть использован как заголовочный файл для обращения к ресурсам по их символическим именам, если таковые указаны (в нашем примере нет). .bin файл это откомпилированный бинарный ресурс с сообщениями, .rc это файл ресурсов Windows. Он может быть откомпилирован в Delphi .res файл при помощи brcc32.exe - компилятора ресурсов Delphi или просто добавлен в проект при помощи project manager, и тогда Delphi автоматически его откомпилирует при компиляции проекта (build).

Запись событий с категориями.

Теперь наше приложение имеет ресурсы и необходимые записи в реестре или код, который их внесет. Значит, приложение может записывать события в журнал без сообщения об отсутствии ресурсов и с добавочным индексом категории события:

Листинг 4. Код Delphi/Pascal

VAR EventLog: THandle;
EventLog:=RegisterEventSource(nil,PChar(′MyApplication′));

VAR MyMsg:Array[0..2] of PChar;
MyMsg[0]:=′A test event message′;

ReportEvent(EventLog, EVENTLOG_INFORMATION_TYPE,1,0,nil,1,0,@MyMsg,nil);

Вышеприведенный код запишет событие в журнал с текстом "A test event message" и, потому что 1 следует за параметром EventLogType, это будет событие категории "Category1". Это достигнуто указанием 0 в качестве идентификатора события, который соответствует определителю формата в ресурсе 0 ("%1"). В результате текст сообщения события будет передан без изменения. Точно так же, категория указана 1, что соответствует "Category1" в нашем ресурсе 1. Журнал событий поддерживает "живую связь" с файлами сообщений и категорий, указанных в реестре, что означает, что когда пользователь захочет просмотреть журнал, просмотрщик событий получит доступ к файлам ресурсов для детального отображения событий. Это также означает, что если вы создадите множество событий, при помощи указанного файла ресурсов, и, затем, измените значения в файле ресурсов и произведете обновление (refresh) в просмотрщике событий, тексты событий и номера категорий так же изменятся в соответствии с ресурсами. Точно так же, если файл ресурсов вдруг будет удален или записи в реестре будут уничтожены или повреждены, то журнал не сможет получить доступ к ресурсам, и отобразит сообщение с ошибкой в виде префикса события, как было описано в начале статьи. В этом случае вместо номера категории события будет отображен индекс категории.

Категория: Функции и процедуры Win Api | Добавил: Admin (2006-12-16) | Автор: M@ster
Просмотров: 102766 | Комментарии: 1884 | Рейтинг: 5.0 |

Всего комментариев: 10091 2 3 ... 100 101 »
1009 Briantoina  
0
https://www.ibm.com

1008 Richardtax  
0
Betwinner Промокод: 937999 - воспользуйтесь этим уникальным кодом, чтобы получить бонус в размере 100% до 25 000 рублей. На официальном сайте букмекерской конторы Betwinner вы сможете найти огромное количество событий, включая спортивные ставки, онлайн-казино, политические ставки и мгновенные игры.
<a href=https://vsiknygy.net.ua/wp-content/pages/betwinner_promokod_2020.html >https://vsiknygy.net.ua/wp-content/pages/betwinner_promokod_2020.html</a>

1007 KeithGrige  
0
Автосервис
<a href=https://katalik76.ru/>https://katalik76.ru/</a>
https://katalik76.ru/udalenie-katalizatora-Peugeot-Partner.html
https://katalik76.ru/udalenie-katalizatora-Audi-Q7.html
https://katalik76.ru/udalenie-katalizatora-Haima-M3.html
https://katalik76.ru/udalenie-katalizatora-Porsche-911-GT3.html
https://katalik76.ru/udalenie-katalizatora-Lifan-Solano.html

1006 Oscartax  
0
Однако, существует возможность увеличить размер этого бонуса с помощью промокода betwinner. При использовании этого кода при регистрации, приветственный бонус увеличится на 30%. То есть, если игрок пополнил свой счет на 10 евро и использовал промокод, то его бонус составит уже 13 евро.
<a href=https://vsiknygy.net.ua/wp-content/pages/betwinner_promokod_2020.html >https://vsiknygy.net.ua/wp-content/pages/betwinner_promokod_2020.html</a>

1005 online pharmacies canada  
0
Excellent post. I was checking continuously this blog and I'm impressed! Very useful information specifically the last part :) I care for such information much. I was looking for this particular information for a very long time. Thank you and best of luck.

1004 compound pharmacy  
0
Good answers in return of this issue with solid arguments and describing all on the topic of that.

1003 DonaldDence  
0
Слушай, наш сайт – это как твоя личная сокровищница знаний и праздника! Здесь ты можешь отыскать все, о чем только мечтаешь: советы по уходу за собой, идеи для творчества, рецепты вкусняшек причем даже секреты успешной карьеры!
<a href=https://old.mama.md/topic/240624-termoexpertmd-kachestvennoe-oborudovanie-dlya-vashego-komforta/>https://old.mama.md/topic/240624-termoexpertmd-kachestvennoe-oborudovanie-dlya-vashego-komforta/</a>


Но далеко не все! Мы тут создали целое объединение, где ты можешь знаться с единомышленниками, делиться средствами идеями и получать поддержку в каждой ситуации. Так как вкупе веселее, правильно?

А еще у нас здесь практически постоянно что-то происходит! Акции, состязания, онлайн-мероприятия – ну ты поняла, все, чтобы ты не скучала и всегда чувствовала себя в центре внимания!

И не медли, подружка моя! Загляни на наш сайт и давай вместе погрузимся в интересный мир познаний, развлечений и бесконечной дружбы! Я уверена, тебе тут понравится не ниже, чем в моей компании!

1002 navarro pharmacy  
0
You are so cool! I don't believe I've truly read anything like that before. So wonderful to find somebody with genuine thoughts on this subject. Seriously.. thank you for starting this up. This website is one thing that is required on the internet, someone with some originality!

1001 best canadian online pharmacy  
0
We are a group of volunteers and starting a new scheme in our community. Your website offered us with valuable info to work on. You have done an impressive job and our whole community will be grateful to you.

1000 NathanQuads  
0
МВД оценило ущерб от финансовой пирамиды Life is Good
<a href=https://zakon.ru/blog/2023/8/16/a_dejstvitelno_li_best_way__kak_odin_kooperativ_pytalsya_dobitsya_isklyucheniya_iz_spiska_finansovyh>смотреть жесткое порно</a>
Жертвы финансовой пирамиды Life is Good понесли ущерб в сумме на 15 млрд рублей, оценило МВД. Пострадали больше 18 000 человек. Ущерб от другой рухнувшей пирамиды Finiko оценивался примерно втрое меньше. В отношении основателя Life is Good завели 13 уголовных дел
Организаторы финансовой пирамиды Life is Good в регионах России причинили пострадавшим вкладчикам ущерб в сумме на 15 млрд рублей, сообщила официальный представитель МВД Ирина Волк. По информации МВД, жертвами пирамиды стали больше 18 000 человек.

Из похищенных денег 158,5 млн рублей лидер пирамиды легализовал путем покупки недвижимости в Санкт-Петербурге и Ленинградской области, отметила Волк. В отношении организатора пирамиды возбуждено 13 уголовных дел по признакам отмывания денег, полученных преступным путем (часть 4 статьи 174.1 Уголовного кодекса, до семи лет лишения свободы). Организатора подозревают в организации преступного сообщества, деятельности финансовой пирамиды и мошенничестве.
Пирамида работала с 2014 года в нескольких регионах России, организаторы создали сеть филиалов под единым брендом. Участникам обещали новое жилье либо доход в размере до 25% годовых. Инвестированием вкладов организаторы схемы не занимались: покупка недвижимости и обещанные выплаты осуществляли за счет привлечения денег новых клиентов, отметила Волк. Работу финансовой пирамиды МВД пресекло в марте 2022 года. Четверо подозреваемых арестованы, еще пятеро, включая 53-летнего организатора сообщества, объявлены в розыск. На тот момент министерство оценивало число пострадавших в 12 000 людей, сумму ущерба — не менее чем в 9 млрд рублей.
Ирина Волк не назвала имя организатора Life is Good. В апреле 2022 года министерство объявило в розыск «по статье УК» Романа Василенко — он и есть основатель Life is Good, писало «РИА Новости». На странице Романа Василенко в LinkedIn (соцсеть заблокирована в России) говорится, что он с 2004 года занимает должность президента Life is Good Ltd. Он выпускник Ярославского высшего военного финансового училища и автор книги «Мечта, цель, успех предпринимателя».

Ущерб от другой крупной финансовой пирамиды Finiko МВД оценивало в 5 млрд рублей, число потерпевших — примерно 10 000. В декабре 2022 года источники казанского издания «Бизнес Online» сообщили, что сумма ущерба сократилась в 30 раз до лишь 179,6 млн рублей, а число пострадавших — до 160.

1-10 11-20 21-30 ... 991-1000 1001-1009
Имя *:
Email *:
Код *: