0

我在 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 让它工作。

4

1 回答 1

0

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

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

于 2012-10-03T17:22:49.557 回答