在Delphi中捕获控制台程序的输出

文章作者 100test 发表时间 2011:03:22 18:43:36
来源 100Test.Com百考试题网


  本文实现了在Delphi中运行控制台程序,并将控制台程序的输出在Memo控件中显示出来。
  工作中需要手工编译J2ME的程序,开始编写了一个批处理程序,但是感觉使用中非常繁琐,于是想用Delphi做一个集成编译工具,但是java的编译工具都是console程序,怎么捕获到console程序的输出,并显示在Memo中呢,查了网上的一些资料,反复测试,找到了一个实现的方法,希望对大家有帮助:
  procedure TMainForm.RunDosInMemo(const DosApp: string. AMemo: TMemo).
  const
  {设置ReadBuffer的大小}
  ReadBuffer = 2400.
  var
  Security: TSecurityAttributes.
  ReadPipe, WritePipe: THandle.
  start: TStartUpInfo.
  ProcessInfo: TProcessInformation.
  Buffer: PChar.
  BytesRead: DWord.
  Buf: string.
  begin
  with Security do
  begin
  nlength := SizeOf(TSecurityAttributes).
  binherithandle := true.
  lpsecuritydescriptor := nil.
  end.
  {创建一个命名管道用来捕获console程序的输出}
  if Createpipe(ReadPipe, WritePipe, @Security, 0) then
  begin
  Buffer := AllocMem(ReadBuffer 1).
  FillChar(Start, Sizeof(Start), #0)
  {设置console程序的启动属性}
  with start do
  begin
  cb := SizeOf(start).
  start.lpReserved := nil.
  lpDesktop := nil.
  lpTitle := nil.
  dwX := 0.
  dwY := 0.
  dwXSize := 0.
  dwYSize := 0.
  dwXCountChars := 0.
  dwYCountChars := 0.
  dwFillAttribute := 0.
  cbReserved2 := 0.
  lpReserved2 := nil.

相关文章


2011年3月计算机二级Delphi笔试答案
EXE工程和OCX工程的转化
计算机二级:DELPHI制作半透明窗体
关于读写注册表二进制数据的问题
在Delphi中捕获控制台程序的输出
处理数据栅格的编辑框
如何在程序中实现XP模式
全国计算机等级考试二级笔试样卷Delphi语言程序设计
杀死一个正在运行的程序
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛