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 Einträge ins Eventlog (https://www.delphipraxis.net/65661-eintraege-ins-eventlog.html)

Codewalker 19. Mär 2006 17:04


Einträge ins Eventlog
 
Weiß jemand, wie ich über mein Programm eigene Einträge in das Eventlog von Windows XP eintrage? Ich möchte gerne Logeinträge teilweise darin eintragen mit einem kurzen Text, was passiert ist. Wie?

Basilikum 19. Mär 2006 17:24

Re: Einträge ins Eventlog
 
dazu gibt es die API MSDN-Library durchsuchenReportEvent und Konsorten...

Codewalker 19. Mär 2006 20:04

Re: Einträge ins Eventlog
 
Das sieht schon gut aus, aber wie benutze ich diese Funktion? Was trage ich denn bei dwEventID ein? Wenn ich das so eintrage gibt es irgendwelche komischen Fehler. Der Eintrag an sich ist vorhanden, aber wie füge ich dazu einen Text ein. Hast du vielleicht einen Beispielaufruf für mich?

Basilikum 19. Mär 2006 21:28

Re: Einträge ins Eventlog
 
der Text wird vom Event-Viewer aufgrund der Event-Source und Event-ID aus einer DLL geladen... in diesem Text kannst du Platzhalter (in der Art von Format()/sprintf()) einbauen, die dann durch die beim Aufruf von ReportEvent angegebenen Strings ersetzt werden...
ich denke mal, du wirst nicht darum herum kommen, dich etwas in das Event-Logging einzulesen... ein guter Start wäre http://msdn.microsoft.com/library/de...nt_logging.asp

(ein Beispiel habe ich leider nicht zur Hand)

generic 20. Mär 2006 00:27

Re: Einträge ins Eventlog
 
ich hatte mal auf meiner hp etwas auf die schnelle dazu geschrieben.

gugst du bitte hier:
http://www.quantendrehung.de/cms/p40.html

Codewalker 20. Mär 2006 16:34

Re: Einträge ins Eventlog
 
Danke für die vielen schnellen Antworten. Damit sollte das hinzubekommen sein! Jetzt muss ich nur noch meinen Grips anstrengen! :gruebel:

Luckie 21. Jul 2006 14:20

Re: Einträge ins Eventlog
 
Wenn ich diese
Code:
LanguageNames=(German=0x407:MSG00407)
MessageId=0
SymbolicName=evt_Demo
Language=German
Demo
.

Testeintrag von %1.
.
Message-Datei mit mc.exe kompilieren will, bekomme ich immer die Fehler:
Zitat:

EvtLogMsg.mc(8) : error : expected keyword - Testeintrag
EvtLogMsg.mc(8) : error : expected keyword - von
Obwohl sie genauso aufgebaut ist, wie in dem Tutorial.

Desweiteren hätte ich da noch ein paar Fragen: Geht das auch ohne den zusätzlichen Eintrag in der Registry für mein Programm? Und geht es eventuell auch ohne diese Ressource?

Luckie 21. Jul 2006 14:58

Re: Einträge ins Eventlog
 
So, habe es hinbekommen: Sie muss so aussehen:
Code:
LanguageNames=(German=0x407:MSG00407)

MessageId=0x1
SymbolicName=CAT_1
Language=German
Kategorie 1
.

MessageId=0x100
SymbolicName=MSG_DEMO_ENTRY
Language=German
Testeintrag von %1.
.
Aber leider funktioniert es immer noch nicht. Meine Registryeinträge sehen so aus:
Code:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\Demo]
"CategoryCount"=dword:00000001
"TypesSupported"=dword:00000000
"EventMessageFile"="E:\\Delphi\\Sourcecodes\\In_Bearbeitung\\MpuWriteEventLog\\Project1.exe"
"CategoryMessageFile"="E:\\Delphi\\Sourcecodes\\In_Bearbeitung\\MpuWriteEventLog\\Project1.exe"
Und mein dazugehöriger Programmcode:
Delphi-Quellcode:
{$R 'EvtLogMsg.res'}

var
  Form1             : TForm1;

implementation

{$R *.dfm}

const
  cSourceName      : string = 'Application'; // wir wollen in das EventLog "Anwendungen" schreiben

procedure LogMessage(typ, kategorienr: word; nachrichtnr: Cardinal; parameter1: string);
var
  log              : THandle;
  pmsgArray        : array[0..0] of PChar;
begin
  log := OpenEventLog(nil, pchar(cSourceName));
  if log > 0 then
  begin
    try
      pmsgArray[0] := PChar(parameter1);
      if not ReportEvent(log, typ, kategorienr, nachrichtnr, nil, 1, 0, @pmsgArray, nil) then
        ShowMessage(SysErrorMessage(GetLastError));
    finally
      CloseEventLog(log);
    end;
  end
  else
    ShowMessage(SysErrorMessage(GetLastError));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LogMessage(EVENTLOG_INFORMATION_TYPE, $1, $100, 'Hallo');
end;
Ich bin etwas ratlos. :gruebel:

Muetze1 21. Jul 2006 15:26

Re: Einträge ins Eventlog
 
Schonmal hier geschaut und verglichen?

Luckie 21. Jul 2006 15:43

Re: Einträge ins Eventlog
 
Da geht es ums auslesen. Ich will aber was reinschreiben. ;)

Klaus01 21. Jul 2006 20:32

Re: Einträge ins Eventlog
 
Hallo Luckie,

vielleicht kann Dir das weiterhelfen: http://groups.google.de/group/comp.l...9c458596e135d4

Grüße
Klaus

Luckie 21. Jul 2006 20:46

Re: Einträge ins Eventlog
 
Ich habe das jetzt ausprobiert:
Delphi-Quellcode:
var
  el: TEventLog;
begin
  el := TEventLog.Create(nil);
  try
    el.Open('Application');
    el.Report(EVENTLOG_INFORMATION_TYPE, 'test');
    el.Close;
  finally
    FreeAndNil(el);
  end;
Aber da erscheint auch kein Einztag im EventLog. :(

Klaus01 21. Jul 2006 20:55

Re: Einträge ins Eventlog
 
Das hilft Dir jetzt nicht weiter, aber bei mir tut es.
OS = w2k SP4

Grüße
Klaus

Luckie 21. Jul 2006 21:03

Re: Einträge ins Eventlog
 
Genau der selbe Aufruf, wie ich ihn gepostet habe? Ich habe hier Windows XP SP2. Dann muss es da noch irgendetwas zu beachten geben. Nur was?

Klaus01 21. Jul 2006 21:09

Re: Einträge ins Eventlog
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, habe Deinen Aufruf einen Button zugeordnet.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Eventlog, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  el: TEventLog;
begin
  el := TEventLog.Create(nil);
  try
    el.Open('Application');
    el.Report(EVENTLOG_INFORMATION_TYPE, 'test');
    el.Close;
  finally
    FreeAndNil(el);
  end;
end;

end.


Sonst habe ich nichts weiteres einstellen müßen.

Grüße
Klaus

Luckie 21. Jul 2006 21:18

Re: Einträge ins Eventlog
 
Liste der Anhänge anzeigen (Anzahl: 1)
Probier doch mal den Code im Anhang bitte aus. In der Exe sind auch die nötigen Ressourcestrings enthalten. Du musst allerdings dann auchg erstmal die Reg-Datei mit den nötigen Informationen in die Registry importieren.

Khabarakh 21. Jul 2006 21:25

Re: Einträge ins Eventlog
 
Tja, bei mir funktioniert dein Programm :? .

Win XP Home SP2

Luckie 21. Jul 2006 22:03

Re: Einträge ins Eventlog
 
Steht da auch ein richtiger Text drinne? Es sollte drinne stehen:
Zitat:

Testeintrag von Test.
Eventuell muss man die Quelle durch 'Demo' ersetzen.

Könnte jemand bitte auch mal den auskommentierten Code probieren?

Was kann das sein?

Luckie 21. Jul 2006 23:27

Re: Einträge ins Eventlog
 
Ich werde irre. Als Administrator geht es. Dabei hatte ich das Programm schon mit "Ausführen als..." gestarte, um es so zu probieren. Und das Eventlog hatte ich auch als Administrator geöffnet, aber nie was gesehen. Jetzt hab eich mich richtig als Admin angemeldt und was sehe ich? Dutzende von meinen Testeinträgen. :wall: Ergo hat es als eingeschränkter Benutzer auch schon geklappt, aber irgendwie werden die Einträge nicht korrekt angezeigt, wenn man das EventLog SnapIn mit "Ausführen als..." als Administrator öffnet. Hmpf. :?

Nachtrag:
Es geht auch, wenn man als eingeschränkter Benutzer eingeloggt ist. Man sieht die Einträge aber nicht, wenn man die Ereignisanzeige mit runas (Administrtorenkonto) öffnet. Öffnet man sie normal, sieht man auch seine Einträge. OK, es funktioniert jetzt also alles bestens. Danke für eure Hilfe. Ich werde das mal alles in einem Artikel zusammenfassen.

RalfOne 3. Apr 2007 10:23

Re: Einträge ins Eventlog
 
Hallo zusammen,

die Ereigniseinträge kriege ich auch hin, jedoch würde ich gerne eine eigene Gruppe haben. Als Beispiel: "MeinProgramm".
Weiß jmd. wie ich das realisieren kann.

Ich habe mal gelesen, dass es keine WINAPI dafür geben soll, und man es nur unter NET machen kann.....stimmt das?


Grüße

Ralf

Codewalker 4. Apr 2007 09:42

Re: Einträge ins Eventlog
 
Ich meine in einer der letzten Ausgaben der Toolbox war genau dazu eine komplette Anleitung. Ich schau mal, ob ich die Ausgabe rausbekomme oder den Artikel in die Finger bekommen kann. Da war eigentlich gar nicht so viel bei (fast nur Registry-Einträge). Ansonsten kannst du ja mal schauen, ich denke die kann man easy nachbestellen.

Luckie 4. Apr 2007 09:51

Re: Einträge ins Eventlog
 
Zitat:

Zitat von RalfOne
Ich habe mal gelesen, dass es keine WINAPI dafür geben soll, und man es nur unter NET machen kann.....stimmt das?

Und wie hat sie Windows vor der .NET Ära dort reinbekommen? ;) Es guibt dafür selbstverständlich auch API-Funktionen. Guck einfach mal im MSDN.

RalfOne 4. Apr 2007 20:27

Re: Einträge ins Eventlog
 
Danke für die Infos, die Toolbox müsste ich auftreiben können, wenn ich die Lösung habe kann ich Sie ja mal posten wenn Ihr wollt.
Morgen direkt mal gucken......

Grüße

Ralf

Luckie 4. Apr 2007 21:59

Re: Einträge ins Eventlog
 
Hier übrigen mein Artikel: http://www.michael-puff.de/Developer...ortEvent.shtml
Such mal im MSDN nach MSDN-Library durchsuchenOpenEventLog und folge den Links am Seiotenende, da müsste was sthen, wie man auch eine Kategorie anlegt.

RalfOne 5. Apr 2007 07:51

Re: Einträge ins Eventlog
 
@Luckie
Danke werde ich mir mal angucken.

In der Toolbox stand nur das drin was ich schon wusste.
Dort werden auch keine Kategoreien angelegt.
Ich habe die Toolbox 4 /2006 (juli/august)

Grüße

Ralf

ste_ett 5. Apr 2007 09:33

Re: Einträge ins Eventlog
 
Zitat:

Zitat von RalfOne
Hallo zusammen,

die Ereigniseinträge kriege ich auch hin, jedoch würde ich gerne eine eigene Gruppe haben. Als Beispiel: "MeinProgramm".
Weiß jmd. wie ich das realisieren kann.

Ich habe mal gelesen, dass es keine WINAPI dafür geben soll, und man es nur unter NET machen kann.....stimmt das?


Grüße

Ralf


Per Win32-Api muss man alles selber machen, für .NET gibts das vorgefertigt. :)

Möglich ist es mit Beidem. :)

Codewalker 5. Apr 2007 11:36

Re: Einträge ins Eventlog
 
Bin fündig geworden: http://www.thedelphimagazine.com/sam...55/article.htm

RalfOne 5. Apr 2007 13:52

Re: Einträge ins Eventlog
 
@Codewalker

Danke, dass passt. Klappt auch soweit ganz gut.

Remko 13. Apr 2007 14:58

Re: Einträge ins Eventlog
 
Link to Delphi Magazine is dead :-(
If the license permits, please post here.

Zitat:

If you were looking for a free sample article from the magazine, please note that as the magazine has now ceased publication these articles have been withdrawn and are no longer available for free access. You can obtain all of the articles ever published by purchasing our Total Collection product: all of the articles on one handy USB Flash Drive.
edit: samples can be still be downloaded here: http://thedelphimagazine.com/disks.php


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 Uhr.

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