使用子进程启动程序,隐藏所有窗口

时间:2012-10-03 17:01:00

标签: python windows subprocess

我在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来实现这一点。

1 个答案:

答案 0 :(得分:0)

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

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