【问题标题】:Start a program using subprocess with all windows hidden使用隐藏所有窗口的子进程启动程序
【发布时间】:2012-10-03 17:00:59
【问题描述】:

我在 Windows 上使用子进程来启动 IrfanView 以使用命令行开关将 TIFF 文件转换为 PDF。

我正在处理几个 TIFF 文件夹,并为每个文件调用命令。保存 PDF 时,IrfanView 会显示一个标题为“保存 PDF”的对话框以显示进度。

该对话框仅显示一瞬间,但会抓住窗口焦点,因此当我的脚本在后台运行时无法使用计算机。我尝试使用 subprocess.STARTUPINFO 值来隐藏窗口,虽然现在隐藏了对话框,但它似乎仍然抓住了焦点。

这是我调用 IrfanView 应用程序的方式。

startup_info = subprocess.STARTUPINFO
startup_info.dwFlags = 1
startup_info.wShowWindow = 0

subprocess.call(['i_view32.exe', 'c:/input.tif', '/convert=c:/output.pdf'], startupinfo=startup_info)

有没有人知道一种方法可以在隐藏窗口且不窃取焦点的情况下启动应用程序?我很乐意尝试一些事情——如果存在这样的程序,即使是随后调用 IrfanView 的包装应用程序也会这样做。我只在 Windows 上需要这个,所以我不需要跨平台的解决方案。

我知道我也可以使用 GraphicsMagick 或类似工具,但 IrfanView 在匹配输入文件的压缩格式方面做得更好,所以理想情况下我希望使用 IrfanView 来实现这一点。

【问题讨论】:

标签: python windows subprocess


【解决方案1】:

这取决于支持非交互模式的应用程序。 subprocess 可以阻止调用在启动应用程序时打开控制台窗口,但不能阻止应用程序本身打开窗口。

谷歌搜索 irfanview 返回一个 article 描述“隐藏”命令行选项 - hide=15 可能会做你想做的事,但有可能泄漏一堆不可见的僵尸窗口。该程序显然没有真正的 /batch 选项,可以避免打开对话框或其他窗口。

【讨论】:

  • 感谢您的回复。我试过了,但hide 命令行选项用于隐藏 IrfanView UI 元素,例如工具栏。我看到的对话框实际上来自 PDF 插件 (ImPDF),似乎没有任何命令行选项可以传递给 IrfanView 来控制其 UI。
猜你喜欢
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 2018-04-14
  • 2010-11-04
相关资源
最近更新 更多