从Delphi通过命令行启动应用程序后关闭CMD窗口

时间:2017-05-21 14:10:15

标签: delphi delphi-xe5

我正在尝试执行以下操作。它工作但cmd窗口等待acrobat.exe在退出之前完成执行。我必须使用这种启动方法,因为我打算将来传递某些命令行参数。

cmdLineString := Format('/c ""%s" "%s""',['C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat\Acrobat.exe', 'F:\Android-interview\Packt.Android.3.0.Application.Development.Cookbook.Jul.2011.ISBN.1849512949.pdf']);
ShellExecute(Handle, 'open', 'cmd.exe', PChar(CmdLineString), nil, SW_SHOWNORMAL);

2 个答案:

答案 0 :(得分:5)

有很多方法可以改善这一点:

  1. 请勿使用ShellExecute。这样做很诱人,因为打电话很简单。但是,它不是很灵活。请改用CreateProcess
  2. 如果您必须隐藏控制台窗口,请将CREATE_NO_WINDOW标记传递给CreateProcess
  3. 那就是说,这里没有必要使用cmd。您无需创建创建其他流程的流程。实际上这样做会使传递参数变得更加困难。直接创建Acrobat进程。剪出中间人。

答案 1 :(得分:0)

正如大卫回答的那样,在关注if (m.matches()) { // after do below command. I think is always false due to nothing happend editText.setFocusable((!editText.isFocusable())); // below comands makes that afther first click in log is true, after second click false and it repeats. Log.e("isFocusable",String.valueOf(!editText.isFocusable())); return true; } else { editText.setError("BlaBla Error"); editText.setFocusable(true); return false; } 之后的其他一些问题时,解决方案代码最终如下所示。像其他像我这样的初学者。只要想想这段代码可以做到的一切!谢谢Delphi。

CreateProcess