实现以下功能:自己定一个命令,然后在cmd命令(控制台)下输入比如EventLog -a,然后就能查询到所有的windows事件,并显示到控制台上。我现在找了一些代码,不但功能差的很远,而且就连这仅有的一部分也还不起作用,请各位大虾们务必赐教,我想知道到底该怎么做,多谢,多谢!我现在找到的代码:unit main;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;type
  TFrm_Main = class(TForm)
    Timer: TTimer;
    Memo1: TMemo;
    Button1: TButton;
    cbCmd: TComboBox;
    procedure TimerTimer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);  private
    { Private declarations }
    procedure InitConsole;
function ReadFromPipe(Pipe: THandle): string;
procedure WriteToPipe(Pipe: THandle; Value: string);
  public
    { Public declarations }
  end;var
  Frm_Main: TFrm_Main;implementation{$R *.dfm}procedure TFrm_Main.InitConsole;
var
Security: TSecurityAttributes;
start: TStartUpInfo;
ReadOut,WriteOut,ReadIn,WriteIn:THANDLE; //zxh debug 2008.11.14
  ProcessInfo:   TProcessInformation; //zxh debug 2008.11.14
begin 
with Security do begin
nlength := SizeOf(TSecurityAttributes);
binherithandle := true;
     lpsecuritydescriptor := nil;
end; Createpipe(ReadOut, WriteOut, @Security, 0);
Createpipe(ReadIn, WriteIn, @Security, 0);    with Security do begin
nlength := SizeOf(TSecurityAttributes);
binherithandle := true;
lpsecuritydescriptor := nil;
end;
    
FillChar(Start, Sizeof(Start), #0);
start.cb := SizeOf(start);
start.hStdOutput := WriteOut;
start.hStdInput := ReadIn;
start.hStdError := WriteOut;
start.dwFlags := STARTF_USESTDHANDLES +
STARTF_USESHOWWINDOW;
start.wShowWindow := SW_HIDE;
CreateProcess(nil,
     PChar('cmd'),
@Security,
@Security,
true,
NORMAL_PRIORITY_CLASS,
nil,
nil,
start,
ProcessInfo) 
end; //==============================================================================
function TFrm_Main.ReadFromPipe(Pipe: THandle): string; 
var 
Buffer: PChar;
BytesRead: DWord;
  const   
      {设置AllocMem的大小}
   ReadBuffer   =   2400;
begin 
Result := '';
if GetFileSize(Pipe, nil) = 0 then Exit;
    Buffer := AllocMem(ReadBuffer + 1);
repeat
BytesRead := 0;
ReadFile(Pipe, Buffer[0],
ReadBuffer, BytesRead, nil);
     if BytesRead > 0 then begin
     Buffer[BytesRead] := #0;
OemToAnsi(Buffer, Buffer);
Result := string(Buffer);
end;
until (BytesRead < ReadBuffer);
FreeMem(Buffer);
end;//==============================================================================procedure TFrm_Main.TimerTimer(Sender: TObject);
var 
s: string;
ReadOut:THandle;
begin 
s := ReadFromPipe(ReadOut);
if s <> '' then begin
Memo1.Lines.Text := Memo1.Lines.Text + s;
Memo1.SelStart := Length(Memo1.Lines.Text);
Memo1.SelLength := 0;
end;
end;//==============================================================================
procedure TFrm_Main.WriteToPipe(Pipe: THandle; Value: string); 
var 
len: integer;
BytesWrite: DWord;
Buffer: PChar;
begin 
len := Length(Value) + 1;
Buffer := PChar(Value + #10);
WriteFile(Pipe, Buffer[0], len, BytesWrite, nil);
end;
//==============================================================================
procedure TFrm_Main.Button1Click(Sender: TObject);
var
WriteIn:THandle ;
begin
if Trim(cbCmd.Text) <> '' then begin
WriteToPipe(WriteIn, cbCmd.Text);
if cbCMD.ItemIndex > -1 then
cbCMD.Items.Delete(cbCMD.ItemIndex);
cbcmd.Items.Insert(0, cbCmd.Text);
cbCmd.Text:='';
end;
end;procedure TFrm_Main.FormShow(Sender: TObject);
begin
InitConsole;
end;end.