Ключі реєстру, Система, Delphi, статті

Створіть наступний ключ реєстру:

HKEY_LOCAL_MACHINESYSTEM – CurrentControlSet – Services – Eventlog –
Application – <AppName>

Ім’я програми AppName повинно співпадати з ім’ям джерела, використаного при виклику RegisterEventSource, тому що переглядач подій буде використовувати це ім’я для відшукування подій.

Створіть наступні ключі:























Ім’я ключа Тип Опис
CategoryCount (Optional) Integer Кількість категорій подій, які ви збираєтеся використовувати. (Це максимальна величина, і не буде проблем, якщо не всі категорії насправді будуть застосовуватися).
CategoryMessageFile (Optional) String Файл, що містить ресурси рядків категорій.
EventMessageFile String Файл, що містить ресурси рядків подій.
TypesSupported Integer Допустимі типи подій.

Приклад коду для створення необхідних записів в реєстрі:

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 файлів в Windows SDK і на різних сайтах, включаючи MSDN, однак документація не досить проста, тому наводимо мінімально достатня опис для створення файлу таблиці повідомлень:

;//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).

Запис подій з категоріями.


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

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) в переглядачі подій, тексти подій і номери категорій так само зміняться відповідно до ресурсами. Точно так само, якщо файл ресурсів раптом буде видалено або записи в реєстрі будуть знищені або пошкоджені, то журнал не зможе отримати доступ до ресурсів, і відобразить повідомлення з помилкою в вигляді префікса події, як було описано на початку статті. В цьому випадку замість номери категорії події буде відображений індекс категорії.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*