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


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


Форма входа


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


Друзья сайта


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


Приветствую Вас, Гость · RSS 2020-09-19, 10:17 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
Просмотров: 84177 | Комментарии: 190 | Рейтинг: 5.0 |

Всего комментариев: 701 2 3 ... 6 7 »
0
70 Annofs   [Материал]
Привет, сетевой народ!
Рекомендую симпатичный вебресурс: http://sokolniki8.ru - проектирование храмов. Затем реставрация храмов. И напоследок отделка храмов.
Идея интернет проекта http://sokolniki8.ru/beregnaya_restavracia_hramov_2.htm - бережная реставрация храмов.
Всем счастья .
Владимир

0
69 grenuazominuound   [Материал]
Здравствуйте, народ сетевой!
Загляните в необычный вебсайт: http://stkmagistral.ru - строительство ипподрома. Затем строительство конюшни. И понятно строительство конноспортивных полей.
Идея вебсайта http://stkmagistral.ru - строительство ипподрома. Разумеется строительство конюшни. И конечно строительство конноспортивных полей..
Вернее всего удовлетворительно.
Храни всех Бог, посетители вебсайта.
Тимур

0
68 VadyVusbandonmese   [Материал]
Доброго дня, интернетовский народ!
Советую интересный проект: http://zelbatut.ru/ - Зеленоград детям. Далее батут в Зеленограде. И наконец оригинальный день рождения в зеленограде
Идея сайта http://zelbatut.ru - дети в Зеленограде. Далее спорт для детей в Зеленограде. И напоследок оригинальный день рождения в зеленограде.
Хорошего времени суток.
Леонид

0
67 Lr8veorc   [Материал]
http://gotennpo.com/VersaceSunglasses/versace-pink-sunglasses
http://t1mil.com/IlluminatedMil/centerpoint-illuminated-mil-dot-reticle-scope
http://adaptivehomelifestyle.com/baker-rack-for-kitchen/

0
66 plerrsvd   [Материал]
A powder grinding mill may either perform dry grinding or wet grinding. Dry grinding involves extremely dry raw materials and applies physical crashing or abrasion for grinding. Wet grinding on the other hand involves the use of chemicals for exceptionally fine grinding. Therefore, it is important for one to consider the moisture content and other chemical properties of the raw material before choosing the most appropriate method of grinding to use. For instance, dry grinding requires one to ensure that a moisture content of below 2% is observed before commencing the grinding process. Various drying methods may be used to ensure that this moisture content is achieved. A low moisture content makes it easier for the pieces to break as they collide against the hammers or against themselves. http://fomachine.en.alibaba.com/product/1901089802-222364518/factory_price_multifunction_stainless_stell_chili_crusher.html - sugar grinder The grind: While some cornmeal products may specifically be labeled ¡°polenta,¡± there¡¯s no need to limit your search; medium and coarse-ground cornmeal are best for making polenta, whether it says ¡°polenta¡± on the bag or not. Uses: So many possibilities! Eat it for breakfast with blueberries and almonds; put it under a Short Rib Ragu; form into griddle cakes; top with fried eggs and escarole.
When pepper corn is powdered then it releases some elements which have got all the medicinal values and the aroma. The elements get escaped to the air after grinding. So as to preserve the medicinal value and other benefits of pepper, an electric pepper mill is used. These mills are available in different sizes and have easy functionality. It requires less maintenance and is available in several designs and colors. You just have to go online and search in the internet. There are several such websites which can make the pepper mill available at your door step. http://fomachine.en.alibaba.com/product/1901202370-222364518/superior_quality_herb_to_powder_grinder.html - electric corn grinder There are few formal education requirements for new extraction workers, although a considerable amount of job training and experience is needed before workers can perform most duties or advance to more skilled positions. Skilled maintenance and construction workers usually need several years of vocational training in their field, while workers in professional occupations need at least a bachelor's degree.
Ore dressing has been extensively used in coal industry. The primary mission is to get rid of impurity mixing in original coal, such as gangue, coal gangue and pyrite, thereby reducing the ash and sulphur content in the original coal. The common way for coal dressing is: gravity dressing and floatation. http://fomachine.en.alibaba.com/product/1901202370-222364518/superior_quality_herb_to_powder_grinder.html - rice grinder Classifier milling system industries fortes in grinding systems, spice grinding mill, flour grinding. Our mission is to offer quality production, consumer services and dedication to our specialist. Our products are all established and structured exactly to the customer¡¯s specification. Our key objective is to confer standard grinding system production Toronto business depends on the best quality and superior products to remain on the competition. The production of our grinding systems is carried out by trained and experienced personnel. Our competition is unmatched since we also operate under strict production centered on quality control and standard ratification. We aim to match this level of high-quality products in our services.

0
65 Andrewnomb   [Материал]
Много пересматривал материалы инета, и вдруг к своему удивлению увидел неплохой ресурс. Посмотрите: http://seo-tweet.ru - продвижение в твиттере. Для моих близких вышеуказанный сайт оказался очень полезным. До свидания!

0
64 Anthonyen   [Материал]
Сколько бы я ни бродил по просторам интернета, но такого сайта больше нет нигде. Ведь только тут есть это: http://www.a-servicehome.com - ремонт водонагревателей в архангельске. Удачи всем!

0
63 MKWilliam   [Материал]
look this is very goods.

0
62 vjseilxi   [Материал]
the best option for a scientist for a better choice of translation is to seek a professional translator orwho can help him or her translate the script into a more widely spoken language. http://www.elessars-welt.de/ - Montblanc On the Needles Mom's Color Affection SSK Stripey SocksVarious & Sundry Bump Watch! Go to the His & Hers Ravelry board to get all the info about donating to Meliabella's walk on September 8th! Fourth Podiversary Prizes! -Will Zygopophyes. Or in Capennori a town in Italy where local citizens working with businesses and governments are not just seeking to manage waste better but they're questioning the very inevitability of waste. http://www.lionel-dufour-grands-vins.fr/ - sac lancel bb What should your rule of thumb be when saying thanks or giving recognition to your customers and contacts? If you don't know someone well enough to pick up the phone and call him or to drop a letter in the mail to her. Over time SSIH was a very profitable business and continued to flourish until 1975 when they began to feel the effects a recession and in 1981 they were bailed out by their banks to stay afloat. http://www.web-500.co.uk/ - mbt shoes sale Parasailing means choosing to step out of your ordinary program during a vacation and parasailing Whitsundays will give you the opportunity to see things from another perspective. Often the handmade gift will come with a certificate of authenticity which tells the artist's history and information about the materials used in the crafting of the work of art. http://www.muellerleile-online-dienst.de/ - mont blanc Kugelschreiber Oil to Fry Miriam used Canola 1/4 cup butter 3 Tbs Grated Parmesan 3 Lbs Red or White Potatoes 1 Egg 3 ozs Cracker Meal ½ Lb Picadillo Cuban Style Ground Beef Salt PepperProcessSet aside ½ Lb of left-over Picadillo. Brief history of the present illnessFindingsPertinent laboratory workWorking diagnosis or impressionRecommended course of treatmentA consultation report may be dictated in letter format and transcribed on physician office stationery or the medical facility or on preprinted consultation forms. http://www.restaurantmennecy.fr/ - french flair lancel United States Secretary of State Hillary Clinton still believes that the withdrawel of Karzai's main competitor during a second round of compromised voting would not necessarily de-legitimize the results.

0
61 порекомндуйте адвоката   [Материал]
народ, срочно необходим вменяемый спец по трудвому делу. мучаюсь из пары вариантов http://www.ukrat.ru - http://www.ukrat.ru, http://advofemida.ru - http://advofemida.ru. как вы дцмаете? посоветуете еще кого-нибудь?
пожалуйста не удаляйте тему реально нужно еще вчера, блин, не хнаю даже у кого еще спрашщивать (((

1-10 11-20 21-30 ... 51-60 61-70
Имя *:
Email *:
Код *: