Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Subscribing to Windows Events / winevt.h API (https://www.delphipraxis.net/125996-subscribing-windows-events-winevt-h-api.html)

SirTwist 16. Dez 2008 09:47


Subscribing to Windows Events / winevt.h API
 
Hallo zusammen,

im MSDN habe ich die Möglichkeit gefunden, sich auf ein EventLog aufzuschalten, um sofort über neue Ereignisse informiert zu werden: MSDN: Subscribing to Windows Events

Ich möchte regelmäßig die neuen Events auslesen und in eine SQL-Datenbank schreiben. Ein regelmäßiges Polling mit GetNumberOfEventLogRecords und Co halte für ungeeignet, deshalb wollte ich über dieses Subscribing gehen.

Ich finde aber keine .dcu oder ähnliches, um z.B. die API-Funtkion EvtSubscribe einzubinden.

In der SuFu habe ich jede Menge Treffer zum Schreiben und Lesen des EventLogs gefunden, aber nichts, was sich direkt mit der Windows Event API beschäftigt. Auch Google schweigt sich in Zusammenhang mit Delphi darüber aus.

Hat sich schonmal jemand damit beschäftigt und weiß evtl. weiter? Vielen Dank schonmal!

Gruß,
SirTwist

jfheins 16. Dez 2008 09:49

Re: Subscribing to Windows Events / winevt.h API
 
Du kannst die Funktion doch einfach selber einbinden oder nicht? :gruebel:

Wenn du aber WinXP unterstützen möchtest, musst du die dll dynamisch einbinden, das ist etwas mehr Schreibarbeit ...

Kurz zusammenkopiert:
Delphi-Quellcode:
function EvtSubscribe(
    Session: Handle;
    SignalEvent: Handle;
    ChannelPath: PAnsiChar;
    Query: PAnsiChar;
    Bookmark: Handle;
    context: Pointer;
    Callback: Pointer;
    Flags: DWORD
  ): Handle; stdcall; external 'Wevtapi.dll' name 'EvtSubscribe';
Ohne Gewähr ;)

nicodex 16. Dez 2008 11:12

Re: Subscribing to Windows Events / winevt.h API
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von SirTwist
Hat sich schonmal jemand damit beschäftigt und weiß evtl. weiter?

Nö, aber ich habe mal schnell den Anfang des aktuellen Headers "übersetzt".

SirTwist 16. Dez 2008 12:04

Re: Subscribing to Windows Events / winevt.h API
 
Zitat:

Zitat von nicodex
Nö, aber ich habe mal schnell den Anfang des aktuellen Headers "übersetzt".

Klasse! Vielen Dank, ich bastel damit mal weiter.

An einer Stelle verwendest Du einen Typ ULONGLONG, der bei mir aber undefiniert ist. Ich habe einen type ULONGLONG = UInt64; gemacht, damit geht es dann.

Ich bin jetzt gerade daran, den Beispielcode von der MSDN-Seite zu übersetzen. Mal gucken, wie weit ich komme. Wenn alles klappt, häng ich das Ergebnis mal hier ran.

Gruß,
SirTwist

nicodex 16. Dez 2008 12:16

Re: Subscribing to Windows Events / winevt.h API
 
Zitat:

Zitat von SirTwist
An einer Stelle verwendest Du einen Typ ULONGLONG, der bei mir aber undefiniert ist. Ich habe einen type ULONGLONG = UInt64; gemacht, damit geht es dann.

Wurde mit Delphi 2007 übersetzt :)

Ich musste die Unit vorhin aktualisieren, da ich TEvtVariant falsch übersetzt hatte (Kommentar "//NOTE:" am Ende von TEvtVariant).
Grundsätzlich ist die Übersetzung sehr strikt/typsicher, was man bei Bedarf anpassen kann/muss (TFoo = type Bar -> TFoo = Bar).


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz