阻止从命名管道启动的弹出窗口 windows

Prevent pop-up windows launched from named pipe

我有一个 cmd 运行 'via' 一个管道,创建如下:

  console:=TProcess.Create(Nil);
  console.Commandline:='cmd.exe';
  console.Options:=[poUsePipes,poNoConsole,poStderrToOutPut];
  console.CurrentDirectory:=apppath+'data\';
  console.ShowWindow:=swoHIDE;
  console.execute;

现在,我的问题是我正在使用 cmd 通过 adb(这是另一个命令行工具)向 android 设备发送命令。 虽然 cmd window 本身是隐藏的,但每次 adb 调用都会创建新的控制台 window,它会在不久后自动关闭。 我如何完全隐藏所有这些 windows?

每次执行 adb.exe 时,如果尚未被 cmd.exe 调用,则需要启动一个新的 cmd.exe 实例。因此,对于您正在尝试的操作,只需 运行 cmd.exe 一次 并保持会话打开,然后通过使用 TProcess.Input 属性.

的现有 STDIN 管道

更好的是,您可以直接在自己的代码中实现 ADB 协议,communicating over a TCP/USB connection to the device itself。那么你根本不需要 运行 adb.exe

或者,为了使事情更简单一些,您可以 运行 adb.exe 作为本地服务器,然后 communicate with it over a TCP connection 而不是通过 cmd.exe。这就是 adb.exe 作为客户端时 运行 内部所做的事情。