首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启动netsh以获取输出

启动netsh以获取输出
EN

Stack Overflow用户
提问于 2021-07-26 02:27:35
回答 1查看 29关注 0票数 1

我使用以下代码:

代码语言:javascript
复制
proc := TProcess.Create(nil);
strList := TStringList.Create;

proc.Executable := 'netsh.exe';
proc.Parameters.Add('wlan');
proc.Parameters.Add('show');
proc.Parameters.Add('all');
proc.Options := proc.Options + [poWaitOnExit, poUsePipes];

proc.Execute;
strList.LoadFromStream(proc.Output);
proc.Free;
strList.Free;

问题是netsh停留在屏幕上(黑色命令窗口)并且不停止。如果我删除poUsePipes,我可以清楚地看到netsh做了正确的工作,输出是正确的。

EN

回答 1

Stack Overflow用户

发布于 2021-07-26 21:47:39

它与下面的代码一起工作。我已经理解了第一个方法(在我的问题中)在输出中生成许多字节,所以我有一个死锁。仁慈到https://wiki.freepascal.org/Executing_External_Programs (法语版)

代码语言:javascript
复制
const
  READ_BYTES = 2048;
var
  Form1: TForm1;
  proc: TProcess;
  strList: TStringList;
  ms: TMemoryStream;
  n: LongInt;
  br: LongInt;
  i: longint;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  ms:=TMemoryStream.Create;
  br:=0;

  proc := TProcess.Create(nil);
  strList := TStringList.Create;

  proc.Executable := 'netsh.exe';
  proc.Parameters.Add('wlan');
  proc.Parameters.Add('show');
  proc.Parameters.Add('all');
  proc.Options := proc.Options + [poUsePipes];
  proc.ShowWindow:=TShowWindowOptions.swoHIDE;

  proc.Execute;
  while proc.Running do
  begin
    ms.SetSize(br + READ_BYTES);
    n:=proc.Output.Read((ms.Memory + br)^, READ_BYTES);
    if n > 0
    then begin
      Inc(br, n);
    end
    else begin
      //no data: wait 100ms
      Sleep(100);
    end;
  end;
  //read last part
  repeat
    ms.SetSize(br + READ_BYTES);
    n:=proc.Output.Read((ms.Memory + br)^, READ_BYTES);
    if n > 0
    then begin
      Inc(br, n);
    end
  until n <= 0;

  ms.SetSize(br);
  strList.LoadFromStream(ms);
  proc.Free;

  for i := 0 to strList.Count - 1 do
  begin
    memo.Append(CP437ToUTF8(strList.Strings[i]));
  end;
  strList.Free;


end;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68521454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档