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


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


Форма входа


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


Друзья сайта


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


Приветствую Вас, Гость · RSS 2026-04-02, 10:19 PM
Начало » Статьи » Функции и процедуры 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
Просмотров: 121660 | Комментарии: 3869 | Рейтинг: 5.0 |

Всего комментариев: 1101 2 3 ... 10 11 »
110 hasan-570  
0
Kaliteli casino deneyimi icin <a href=https://zlotgiris.com.tr/zlo>zlot bahis sitesi</a> tavsiye ederim. Hesap acmak icin <a href=https://zlotgiris.com.tr/>zlot casino giris</a> linkini kullanin. Basarilar!

109 LeonelLoomB  
0
Пошив под ключ https://norsy.ru/kontakty

ПОШИВ ШТОР, ПОСТЕЛЬНОГО БЕЛЬЯ https://norsy.ru/pochemu-my

Ищите производство и пошив одежды оптом ? Звоните!
С нами работают крупные компании https://norsy.ru/ceny

и напишите нам https://norsy.ru/o-nas

Градация 200?/размер https://norsy.ru/poshiv-futbolok

108 RickyMuh  
0
найти это https://vodkabet-play.vodkabet-zerkalo.vodka

107 canada pharmaceuticals online generic  
0
I’m not that much of a online reader to be honest but your sites really nice, keep it up! I'll go ahead and bookmark your website to come back later on. Many thanks

106 Edwardgal  
0
Статическое испытание свай с созданием грузовой платформы до 2000 тонн, а также без грузовой платформы весом до 500 тонн с помощью испытательного стенда https://www.osnovanie-svai.com/politica.html
Динамическое испытание (ELDI) — придерживаемся стандарта ASTMD4945 из США, в России эти испытания пока не стандартизированы https://osnovanie-svai.com/pile.php
Волновой удар (PDA) с несущей способностью до 2000 тонн https://osnovanie-svai.com/pile.php
Штамповые испытания в основании сваи на глубине до 46 м https://osnovanie-svai.com/
Выбуривание кернов на глубину до 6000 мм https://www.osnovanie-svai.com/politica.html
Сейсмоакустические и ультразвуковые исследования — обследуем стволы железобетонных буронабивных свай https://www.osnovanie-svai.com/politica.html

Период «отдыха» сваи https://osnovanie-svai.com/

В соответствие с ГОСТ 5686-2020 Грунты https://osnovanie-svai.com/
Методы полевых испытаний сваями испытания свай статическими нагрузками проводят для решения следующих задач:
Наличие гидравлических станций НРГ-7035, НРГ-7080 Э, НРГ-7080 для проведения испытаний грунтов статическими нагрузками https://osnovanie-svai.com/pile.php

Испытания проводятся приложением вертикальной нагрузки к забитой свае после т https://osnovanie-svai.com/pile.php
н https://osnovanie-svai.com/pile.php
"отдыха", обычно в 6-7 дней https://www.osnovanie-svai.com/politica.html
В зависимости от типа нагрузки, испытания подразделяются на динамические и статические https://osnovanie-svai.com/
Стоит также отметить, что испытываются не сваи, а грунты, поэтому правильно говорить не "испытания свай", а "испытания грунтов сваями".
Тип стенда https://osnovanie-svai.com/

105 LarisaNet  
0
Thanks a million!

104 Josephrag  
0
Ремонт квартир: от Москвы до Подмосковья
<a href=https://designapartment.ru/remont-trehkomnatnoj-kvartiry/>красивый ремонт в квартире 3х комнатной квартиры фото</a>
Ремонт квартиры — важный этап в жизни каждого владельца жилья. Это возможность обновить интерьер, сделать пространство комфортным и функциональным. Сегодня мы рассмотрим особенности ремонта квартир в разных регионах столичного региона: Москве, Московской области, Подмосковье и Новой Москве.

¦ Ремонт квартир в Москве

Москва — город больших возможностей и высоких стандартов качества. Ремонт квартир в столице отличается высоким уровнем требований к материалам и технологиям. Здесь востребованы элитные отделочные материалы, современные системы освещения и инженерные решения. Специалисты по ремонту в Москве предлагают широкий спектр услуг: от косметического ремонта до полного преображения интерьера.
<a href=https://designapartment.ru/dizajn-interera-v-moskve/dizajn-trehkomnatnoj-kvartiry/>дизайн 3 комнатной квартиры</a>
¦ Особенности ремонта в Москве:

- Высокое качество материалов и работ
- Использование современных технологий
- Индивидуальные дизайн-проекты

¦ Ремонт квартир в Московской области
<a href=https://designapartment.ru/dizajn-interera-v-moskve/dizajn-proekt-kvartiry-v-moskve/>сделать проект ремонта квартиры</a>
Московская область — регион с разнообразием архитектурных стилей и типов жилых помещений. Ремонт квартир здесь часто предполагает адаптацию старых домов к современным стандартам комфорта. Жители области предпочитают доступные цены и качественные услуги. Компании, занимающиеся ремонтом в Московской области, предлагают оптимальные решения для любого бюджета.

¦ Особенности ремонта в Московской области:

- Доступные цены
- Адаптация старых зданий
- Широкий выбор отделочных материалов

¦ Ремонт квартир в Подмосковье

Подмосковье — это сочетание природы и городской инфраструктуры. Ремонт квартир здесь направлен на создание уютного пространства, которое сочетает комфорт и эстетику. Владельцы жилья в Подмосковье ценят индивидуальный подход и внимание к деталям. Профессиональные бригады обеспечивают качественное выполнение всех этапов ремонтных работ.

¦ Особенности ремонта в Подмосковье:

- Уют и комфорт
- Индивидуальный подход
- Экологически чистые материалы

¦ Ремонт квартир в Новой Москве

Новая Москва — территория новых возможностей и перспектив. Ремонт квартир здесь характеризуется использованием инновационных решений и передовых технологий. Жилые комплексы в Новой Москве предлагают просторные помещения с возможностью свободной планировки. Ремонт в данном регионе позволяет воплотить самые смелые дизайнерские идеи.

¦ Особенности ремонта в Новой Москве:

- Инновационные технологии
- Свободная планировка
- Просторные помещения


Таким образом, ремонт квартир в столичном регионе имеет свои особенности и преимущества. Выбор подходящего варианта зависит от ваших предпочтений, бюджета и местоположения жилья. Независимо от региона, важно доверять работу профессионалам, которые смогут реализовать ваши мечты о комфортной и красивой квартире.
сделать ремонт загородного дома
https://designapartment.ru/remont-chastnogo-doma/

103 LeonelLoomB  
0
При мелкооптовом пошиве стоимость формируется исходя из объема затрат поставщика на весь перечень оказанных услуг https://norsy.ru/pochemu-my
Факторы, которые могут повлиять на цену, включают в себя:
Почему вам стоит заказать услуги швейного производства в «Амадей Принт»?
Упаковка и продажи https://norsy.ru/otzyvy

Пошив одежды мелким оптом https://norsy.ru/otzyvy

Пошив под ключ https://norsy.ru/voprosy-otvety

Оставьте заявку или позвоните https://norsy.ru/voprosy-otvety

102 shoppers drug mart pharmacy  
0
whoah this blog is great i love reading your articles. Stay up the good work! You recognize, many individuals are looking around for this info, you could help them greatly.

101 Wallacefug  
0
ссылка на сайт <a href=https://krab-2.cc>krab2.at</a>

1-10 11-20 21-30 ... 91-100 101-110
Имя *:
Email *:
Код *: