delphi 获取cmd命令返回并显示(笔记)

本文介绍了如何在Delphi中通过CreateProcess函数创建CMD进程,并执行用户输入的命令,然后利用ReadFile读取命令的返回信息。通过示例代码展示了创建CMD进程、读取返回信息的关键步骤,最终实现将CMD命令的输出显示在 Memo1 控件中。







先新建一个工程。添加控件


Timer1  //用于获取命令输入后的返回信息
Edit1   //用于输入命令
Memo1   //用于显示


如下图:




我们用CreateProcess函数来创建一个cmd进程,如下


  //创建cmd 进程   并且执行 edit1.text  命令
  CreateProcess(nil, PChar(edit1.Text), @Security, @Security, true,NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
 




用TerminateProcess 来释放cmd进程如下


TerminateProcess(ProcessInfo.hProcess, 0); //关闭cmd进程




用ReadFile 来读取命令返回信息  如下


 ReadFile(Pipe, Buffer[0], ReadBuffer, BytesRead, nil);  //读取返回信息






好了,我们来看看  关键的  创建cmd进程函数


var
  Security: TSecurityAttributes;
  StartUpInfo: TStartUpInfo;
begin
  with Security do begin
    nLength := SizeOf(TSecurityAttributes);
    bInheritHandle := true;
    lpSecurityDescriptor := nil;
  end;


  Createpipe(ReadOut, WriteOut, @Security, 0);
  Createpipe(ReadIn, WriteIn, @Security, 0);


  FillChar(StartUpInfo, Sizeof(StartUpInfo), #0);
  StartUpInfo.cb := SizeOf(StartUpInfo);
  with StartUpInfo do
  begin
    hStdOutput := WriteOut;
    hStdInput := ReadIn;
    hStdError := WriteOut;
    dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
    wShowWindow := SW_HIDE;
  end;
  //创建cmd 进程   并且执行 edit1.text  命令
  CreateProcess(nil, PChar(edit1.Text), @Security, @Security, true,NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
 end;




获取命令返回函数


var
  Buffer: PChar;
  BytesRead: DWord;
  ReadBuffer: Cardinal;
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;




运行结果如下:




源码下载
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值