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


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


Форма входа


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


Друзья сайта


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


Приветствую Вас, Гость · RSS 2026-06-14, 5:04 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
Просмотров: 122807 | Комментарии: 4613 | Рейтинг: 5.0 |

Всего комментариев: 2781 2 3 ... 27 28 »
278 LeonelLoomB  
0
Свяжитесь с нами https://norsy.ru/

ТРИКОТАЖ - ПОШИВ ФУТБОЛОК ТОЛСТОВОК https://norsy.ru/

+79855047446 https://norsy.ru/poshiv-hudi

Внесите этот номер в адресную книгу своего телефона:
Мужская одежда https://norsy.ru/poshiv-futbolok

Конкуренты не страшны, если товар вы приобретаете в нашей компании https://norsy.ru/ceny
Воспользуйтесь кнопкой заявки, и мы свяжемся с вами, чтобы принять заказ https://norsy.ru/o-nas

277 CharlesPap  
0
Правильно подобранный крем для лица — основа ежедневного ухода и главный элемент поддержания здоровья кожи https://phytomer.store/product/loson-toniziruyuschiy-dlya-siyaniya-kozhi-phytomer-bio-organic-limited-edition-250-ml
Даже при хорошем очищении и использовании сывороток кожа нуждается в средстве, которое восстановит её барьер, удержит влагу, защитит от агрессивных факторов окружающей среды и поможет бороться с возрастными изменениями https://phytomer.store/product/krem-24-chasa-uvlazhnyayuschiy-matiruyuschiy-phytomer-hydra-matifying-control-cream
В этой статье разберёмся, для чего нужен крем для лица, какие бывают виды кремов, как выбрать хороший крем для лица по составу https://phytomer.store/product/phytomer-advent-calendar

4 https://phytomer.store/collection/ochischenie-i-eksfoliatsiya?page=2
КАКИЕ СЕРВИСЫ МЫ ИСПОЛЬЗУЕМ ДЛЯ СБОРА ФАЙЛОВ COOKIES?
м https://phytomer.store/page/about-us
Каширская - ТРК "Москворечье"
730 р https://phytomer.store/collection/podarochnye-nabory
973 р https://phytomer.store/product/mylo-s-morskimi-vodoroslyami-phytomer-seaweed-soap

для оптимизации работы веб-сайта, в аналитических целях, а также для предоставления персонализированного контента и рекламы https://phytomer.store/product/sprey-dlya-litsa-s-oligomer-uvlazhnyayuschiy-osvezhayuschiy-phytomer-marine-mist-scented-water-with-oligomer
Нажимая «Принять все cookies», Вы даете согласие на использование файлов cookies в соответствии с Политикой об использовании файлов cookies https://phytomer.store/product/cprey-uvlazhnyayuschiy-dlya-tela-i-volos-phytomer-summer-mist-moisturizing-water
Для получения дополнительной информации, настройки и отзыва согласия нажмите «Настроить» https://phytomer.store/product/krem-solntsezaschitnyy-dlya-tela-i-litsa-spf15-phytomer-sun-solution-sunscreen-spf30-face-and-body
Политика об использовании файлов cookies https://phytomer.store/product/cprey-uvlazhnyayuschiy-dlya-tela-i-volos-phytomer-summer-mist-moisturizing-water

м https://phytomer.store/collection/glazakontur-gub
Измайловская - ТЦ "Измайловский"

276 DuaneDycle  
0
В нашем магазине можно купить профессиональную косметику: средства для ухода за лицом и телом, химические пилинги, воски для депиляции и пасты для шугаринга, оборудование (кушетки, столики, аппараты) для кабинета косметологии и расходные материалы (одноразовые простыни, ватные диски, халаты, миски, кисти, шпатели) для мастеров https://sinapple.ru/collection/tkanevye-maski/product/royal-cosmetics-quality-1st-the-derma-vc100

В ассортименте PREMIUM десять различных линеек, решающих весь комплекс косметических задач: от классического ухода до интенсивных процедур, в том числе безинъекционного заполнения морщин https://sinapple.ru/collection/cantabria-labs-ispaniya/product/cantabria-labs-heliocare-ultra-gel-spf90-sunscreen Отдельный бренд для мужчин HisStory Tobbacco, учитывающий особенности мужской кожи https://sinapple.ru/collection/klapp/product/klapp-ochischayuschiy-gel
Выбрать правильную косметику легко!

275 Juuedithvorie  
0
<a href=https://kino.xxx-share.tv/film/id10000274-tiffani-seksualnaya-sekretarsha> смотреть порнофильм Тиффани, Сексуальная Секретарша</a>
<a href=https://kino.xxx-share.tv/film/id10001133-deni-deniels-i-ee-podrugi> смотреть порнофильм Дэни Дэниелс и ее подруги</a>
<a href=https://kino.xxx-share.tv/film/id10000420-oksana-policeiskaya-v-uniforme> смотреть порнофильм Оксана: полицейская в униформе</a>
<a href=https://kino.xxx-share.tv/film/id10000560-film-ot-private-41-chertov-novyi-god> смотреть порнофильм порнофильм от Private 41: Чертов Новый Год</a>
<a href=https://kino.xxx-share.tv/film/id10000480-ya-lyublyu-silviyu-saint> смотреть порнофильм Я Люблю Сильвию Сайнт</a>

274 JeffreyBed  
0
Высокочастотный радиоволновой генератор Surgitron™ ЕMC с ножной педалью - 1 шт https://ellman.ru/diamond
Наконечник для электродов - 1 шт https://ellman.ru/ball
Держатель для наконечника - 1 шт https://ellman.ru/basic
Базовый комплект электродов - 1 шт https://ellman.ru/scalpel
Нейтральный электрод (антенная пластина), стерилизуемый - 1 шт https://ellman.ru/basic
Сетевой шнур - 1 шт https://ellman.ru/scalpel
Инструкция по эксплуатации на русском языке - 1 шт https://ellman.ru/ball
Видеоматериалы - 1 шт https://ellman.ru/plates
ZIP - запасные предохранители - 2 шт https://ellman.ru/scalpel

Для выставления счета юридическим лицам требуются реквизиты организации покупателя https://ellman.ru/scalpel

1 https://ellman.ru/diamond
Высокочастотный хирургический радиоволновой генератор Surgitron DF 120 2 https://ellman.ru/electrodes
Двойная ножная педаль со шнуром 3 https://ellman.ru/ball
Наконечник для электродов 4 https://ellman.ru/round
Трехкнопочный наконечник ручного включения для электродов 5 https://ellman.ru/plates
Держатель для наконечника 6 https://ellman.ru/devices
Биполярный шнур одноразовый – 5 шт https://ellman.ru/accessories
7 https://ellman.ru/tips
Базовый комплект стерилизуемых сгибаемых электродов (7 штук (S10B):
Описание https://ellman.ru/articles

В компании General Meditech Ruscompany вы можете купить генератор радиоволновой 4,0 мгц с доставкой в г https://ellman.ru/
Нижний Новгород и другие города https://ellman.ru/devices
Уточняйте цены и оформляйте заказ по телефону или онлайн https://ellman.ru/basic
Мы работаем круглосуточно https://ellman.ru/electrodes
Покупая оборудование у нас, вы получаете техническое сопровождение и поддержку на весь срок эксплуатации https://ellman.ru/diamond
При необходимости мы покажем как работает оборудование, обучим ваш персонал https://ellman.ru/round
Мы заботимся о своих клиентах!

273 MarioMet  
0
Давно смешиваете научиться зарисовывать, но чаете, что яо вам нет таланта? Со стороны руководящих органов самый-самом деле этюд — это хитрость, яже на худой конец освежить в течение другом возрасте.
Первый фотоурок подсобляет пересилить эфебофобия незапятнанного листка, понять основы равным образом хоть почуять хорошо творчества. Возбудите этапка ко художеству уж теперь хором кот нами

272 Michaelurils  
0
Добро пожаловать в blacksprut Marketplace
Крупнейшее в России сообщество любителей марихуаны и грибов приветствует новых друзей!
?
Сотни магазинов с оптовыми и розничными предложениями рады показать вам новый уровень отношения к каннабису и грибам.
bs2best at
blsp at


<a href=https://bs02.at>blacksprut вход</a>

271 RomanLek  
0
Работаем в общепите. Нужна была автоматизация калькуляции блюд и списания продуктов. Настроили техкарты, теперь себестоимость считается автоматически. Сэкономили время бухгалтера в разы. <a href=https://1upravlenie.ru/>интеграция 1С с маркетплейсами</a>

270 BruceNit  
0
можно проверить ЗДЕСЬ <a href=https://tripscans74.us>сайт трипскан</a>

269 CharlesPap  
0
Тип товара https://phytomer.store/collection/domashniy-uhod-za-litsom?page=2

АО «Л`Ореаль» обрабатывает различные файлы cookies в зависимости от из функции и назначения https://phytomer.store/collection/all?page=5
— Технические файлы cookie Технические файлы cookie необходимы для функционирования веб-сайта, обеспечивая его оптимальное использование https://phytomer.store/product/phytomer-christmas-douceur-marine-beauty-pouch
Эти файлы cookie не могут быть отключены в наших системах, поскольку без них некоторые разделы нашего веб-сайта будут недоступны или их будет сложно использовать https://phytomer.store/product/krem-solntsezaschitnyy-dlya-tela-i-litsa-spf15-phytomer-sun-solution-sunscreen-spf30-face-and-body
Эти файлы cookie не содержат персональной информации https://phytomer.store/product/loson-toniziruyuschiy-ochischayuschiy-rozovaya-voda-phytomer-rosee-visage-toning-cleansing-lotion-500-ml-2
Вы можете настроить свой браузер так, чтобы он блокировал файлы cookie, но это может повлиять на корректную работу веб-сайта, в том числе закрыть доступ к сайту или его отдельным функциям или разделам https://phytomer.store/collection/dlya-tela
— Пользовательские файлы cookie Функциональные файлы cookie помогают улучшить и персонализировать функциональность веб-сайта, а также предоставить дополнительные функции на сайте (например, чат). Данные файлы cookie делают работу на сайте более удобной, позволяя «узнавать» вас при посещении сайта и запоминать Ваши настройки в течение определённого периода времени https://phytomer.store/page/agreement
Если вы не принимаете эти файлы cookie, некоторые или все службы могут работать неправильно https://phytomer.store/product/tonik-emulsiya-dlya-zreloy-kozhi-phytomer-toning-cleansing-emulsion
— Аналитические файлы cookie Аналитические файлы cookie необходимы для определения количества посетителей сайта и статистического анализа его использования, в частности для определения самых посещаемых страницах сайта, о времени, проведенном пользователем на странице сайта, о сбоях, с которыми пользователь сталкивался https://phytomer.store/product/phytomer-advent-calendar
Благодаря данной информации мы оптимизируем работу веб-сайта https://phytomer.store/product/maska-dlya-litsa-omolazhivayuschaya-phytomer-expert-youth-plumping-smoothing-mask
— Маркетинговые/рекламные файлы cookie Маркетинговые/рекламные файлы cookie используются для анализа эффективности наших маркетинговых кампаний и для адаптации контекта и рекламы под ваши интересы https://phytomer.store/collection/eksfoliatsiya

370 р https://phytomer.store/collection/all?page=9
529 р https://phytomer.store/product/maslo-dragotsennoe-dlya-litsa-tela-volos-phytomer-beautifying-oil-face-body-hair-tresor-des-mers

Уход за кожей вокруг глаз https://phytomer.store/collection/frontpage

м https://phytomer.store/product/mylo-s-morskimi-vodoroslyami-phytomer-seaweed-soap
Семеновская - ТЦ "Семеновский"
м https://phytomer.store/product/syvorotka-energeticheskaya-kislorodnaya-phytomer-souffle-marin-energizing-oxygenating-serum
Электрозаводская - ТЦ "Серебряный Дом"

1-10 11-20 21-30 ... 261-270 271-278
Имя *:
Email *:
Код *: