我现在想做个程序,点击确定后,可以memo里把系统的安全。
程序等等日志全部读出来,包括时间等,现在就是没头绪,请大家帮帮忙,
给个读取日志的例子,跪谢!
程序等等日志全部读出来,包括时间等,现在就是没头绪,请大家帮帮忙,
给个读取日志的例子,跪谢!
解决方案 »
- Undeclared identifier: 'CB_GETTEXTLEN'
- 句柄问题
- 一个收邮件时发生的内存错误(解决给300)
- 在QUICKREP里设计了一个报表,其中一个数据库字段比较长,我想让它分成两行写,这个要怎么实现?
- :请推荐一个比较好的DBNavigator
- 欲找美眉做女友
- 急!!!,哪里有delphi免费控件下载?多谢!!!
- Delphi程序员有多少个抽烟的?昨天抽了我两包...
- ADO是免费的吗,ADO哪儿可以下载
- 如何通过编程或SQL语句导入文本文件内容到Access数据库中?
- 定义一个常量问题。。弱智题。。。
- listview如何根据自己宽度,来自动的调整每行显示的ICON个数,
{* |<PRE>
实现Windows NT/2K/XP系统日志类型的管理。
|<BR>
通常情况下系统中只包含三种类型的日志文件:应用程序(Application)日志,安全
(Security)日志和系统(System)日志。本单元提供的日志类型管理类可以在系统中添
加其它类型的日志系统。
|<BR>
Author: Licwing Zue
This software is free
|<BR> 修订:
1. 2002/11/29 建立日志类型管理单元|</PRE>}interfaceuses Windows, SysUtils, Classes, Registry;type
TEventLog = class(TObject)
{* 日志类型对象,负责日志类型的信息读写}
private
FDisplayNameFile: string;
FDisplayNameID: Cardinal;
FLogFile: string;
FMaxsize: Cardinal;
FName: string;
FPrimaryModule: string;
FRetention: Cardinal;
procedure SetDisplayNameFile(Value: string);
procedure SetName(Value: string);
public
constructor Create(const hName: string);
{* 日志类型对象构造器,用于产生一个该类的实例
|<BR> hName: 日志类型名称}
destructor Destory;
procedure LoadFromRegistry;
{* 读取日志类型信息}
procedure SaveToRegistry;
{* 保存日志类型信息}
property DisplayNameFile: string read FDisplayNameFile write SetDisplayNameFile;
{* 存储日志类型显示名称的文件名称}
property DisplayNameID: Cardinal read FDisplayNameID write FDisplayNameID;
{* 日志类型显示名称在存储文件中的资源序号}
property LogFile: string read FLogFile write FLogFile;
{* 日志文件名,包含路径。可以使用系统环境变量:%SystemRoot%等}
property Maxsize: Cardinal read FMaxsize write FMaxsize;
{* 日志文件最大尺寸}
property Name: string read FName write SetName;
{* 日志类型名称}
property PrimaryModule: string read FPrimaryModule;
{* 日志类型控制模块,同日志类型名称}
property Retention: Cardinal read FRetention write FRetention;
{* 日志保存时间}
end; TEventLogManager = class (TObject)
{* 日志类型管理对象,负责对日志类型的添加、删除和检索等}
private
fEventLogList: TStrings;
fReg: TRegistry;
function DeleteFromRegistry(hEventLogName: string): Boolean;
function GetCount: Integer;
function GetItems(Index: Integer): TEventLog; public
constructor Create(const AutoRefresh: boolean=true);
{* 日志类型对象构造器,用于产生一个该类的实例
|<BR> AutoRefresh: 自动更新开关,默认打开}
destructor Destory;
function Add(hEventLogName: string): TEventLog;
{* 添加日志类型,返回添加的日志对象
|<BR> hEventLogName: 日志类型名称}
procedure Clear;
{* 清除读取的日志类型纪录,但不清除保存的日志类型纪录}
function Delete(const hEventLogName: string): Boolean;
{* 删除指定的日志类型
|<BR> hEventLogName: 日志类型名称}
procedure Refresh;
{* 更新日志类型}
property Count: Integer read GetCount;
{* 日志类型数量}
property Items[Index: Integer]: TEventLog read GetItems;
{* 日志类型队列}
end;
implementation
const
EVENT_SAVE_PATH = '\SYSTEM\CurrentControlSet\Services\Eventlog\';
{ 日志类型保存位置} Event_File = 'File';
{ 日志文件保存的绝对位置,通常是在系统目录中。
如:C:\Winnt\System32\Config\Sample.EVT }
Event_MaxSize = 'MaxSize';
{ 日志文件最大尺寸,默认512K}
Event_PrimaryModule = 'PrimaryModule'; Event_Sources = 'Sources';
Event_Retention = 'Retention';
Event_DisplayNameFile = 'DisplayNameFile';
Event_DisplayNameID = 'DisplayNameID';
{
********************************** TEventLog ***********************************
}
constructor TEventLog.Create(const hName: string);
begin
SetName(hName); FMaxsize := $80000; // 512K
FRetention := $93A80; FDisplayNameFile := '';
FDisplayNameID := 0; FLogFile := '%SystemRoot%\System32\config\'+hName+'.EVT';
end;destructor TEventLog.Destory;
beginend;procedure TEventLog.LoadFromRegistry;
var
fReg: TRegistry;
begin
fReg := TRegistry.Create;
try
fReg.RootKey := HKEY_LOCAL_MACHINE;
if fReg.OpenKey(EVENT_SAVE_PATH+fName,false) then
begin
if fReg.KeyExists(Event_DisplayNameID) then
fDisplayNameID := fReg.ReadInteger(Event_DisplayNameID); if fReg.KeyExists(Event_DisplayNameFile) then
fDisplayNameFile := fReg.ReadString(Event_DisplayNameFile); if fReg.KeyExists(Event_MaxSize) then
fMaxsize := fReg.ReadInteger(Event_MaxSize); if fReg.KeyExists(Event_Retention) then
fRetention := fReg.ReadInteger(Event_Retention); if fReg.KeyExists(Event_File) then
fLogFile := fReg.ReadString(Event_File);
end;
finally
fReg.CloseKey;
fReg.Free;
end;
end;procedure TEventLog.SaveToRegistry;
var
fReg: TRegistry;
begin
fReg := TRegistry.Create;
try
fReg.RootKey := HKEY_LOCAL_MACHINE;
fReg.OpenKey(EVENT_SAVE_PATH+fName,True); if (fDisplayNameID > 0) and (fDisplayNameFile <> '') then
begin
fReg.WriteInteger(Event_DisplayNameID,fDisplayNameID);
fReg.WriteExpandString(Event_DisplayNameFile,fDisplayNameFile);
end; fReg.WriteInteger(Event_MaxSize,fMaxsize);
fReg.WriteInteger(Event_Retention,fRetention);
fReg.WriteString(Event_PrimaryModule,fPrimaryModule);
fReg.WriteExpandString(Event_File,fLogFile);
finally
fReg.CloseKey;
fReg.Free;
end;
end;procedure TEventLog.SetDisplayNameFile(Value: string);
begin
FDisplayNameFile := Value;
end;procedure TEventLog.SetName(Value: string);
begin
fName := Value;
fPrimaryModule := Value;
end;{
******************************* TEventLogManager *******************************
}
constructor TEventLogManager.Create(const AutoRefresh: boolean=true);
begin
fReg := TRegistry.Create;
fReg.RootKey := HKEY_LOCAL_MACHINE;
fEventLogList := TStringList.Create;
if AutoRefresh then Refresh;
end;destructor TEventLogManager.Destory;
begin
fReg.Free;
fEventLogList.Free;
inherited;
end;function TEventLogManager.Add(hEventLogName: string): TEventLog;
var
aEventLog: TEventLog;
begin
aEventLog := TEventLog.Create(hEventLogName);
fEventLogList.AddObject(hEventLogName,aEventLog);
Result := aEventLog;
end;procedure TEventLogManager.Clear;
var
Idx: Integer;
begin
for Idx:=0 to fEventLogList.Count-1 do
TEventLog(fEventLogList.Objects[Idx]).Free;
fEventLogList.Clear;
end;function TEventLogManager.Delete(const hEventLogName: string): Boolean;
var
Idx: Integer;
begin
Result := false;
for Idx := fEventLogList.Count-1 downto 0 do
begin
if UpperCase(hEventLogName) = UpperCase(TEventLog(fEventLogList.Objects[Idx]).Name) then
begin
Result := DeleteFromRegistry(hEventLogName);
break;
end;
end;
end;function TEventLogManager.DeleteFromRegistry(hEventLogName: string): Boolean;
begin
Result := fReg.DeleteKey(EVENT_SAVE_PATH+hEventLogName)
end;function TEventLogManager.GetCount: Integer;
begin
Result := fEventLogList.Count;
end;function TEventLogManager.GetItems(Index: Integer): TEventLog;
begin
Result := TEventLog(fEventLogList.Objects[Index]);
end;procedure TEventLogManager.Refresh;
var
buf: TStrings;
fEventLog: TEventLog;
Idx: Integer;
begin
Clear; if fReg.OpenKey(EVENT_SAVE_PATH, false) then
begin
buf := TStringList.Create;
try
fReg.GetKeyNames(buf); // 指派信息到类列表
for Idx:=0 to buf.Count-1 do
begin
fEventLog := Add(Buf[Idx]);
fEventLog.LoadFromRegistry;
end;
finally
buf.Free;
fReg.CloseKey;
end;
end;
end;end.
backupeventlog,
cleareventlog,
getoldeventlogrecord,
getnumberofeventlogrecords,
readeventlog,
reportevent,
openeventlog....