Windows - 在startupinfo中使用wShowWindow的Popen不会影响显示

时间:2012-09-20 20:52:15

标签: python windows popen subprocess win32gui

我正在尝试做一些简单的事情,比如让calc.exe开始最小化,但它没有发生。

import subprocess
import win32gui
import win32con

info = subprocess.STARTUPINFO()
info.dwFlags |= subprocess.STARTF_USESHOWWINDOW
info.wShowWindow = win32con.SW_SHOWMINIMIZED
x = subprocess.Popen("calc.exe", startupinfo = info)

无论我为wShowWindow提供什么,它都会像往常一样弹出。

1 个答案:

答案 0 :(得分:1)

我想你已经想到了这一点,但为了其他读者的利益,这是我的看法:

问题与calc.exe程序有关,而不是Python或代码。为了证明这一点,尝试启动“notepad.exe”(或“wordpad.exe”)并且它将起作用 - 还要注意您可能需要提供目标.exe文件的完整路径,具体取决于它的位置。

具体问题是,根据STARTUPINFO结构,wShowWindow成员:

  

对于GUI进程,第一次调用ShowWindow时,将忽略其nCmdShow参数wShowWindow指定默认值。在后续对ShowWindow的调用中,如果ShowWindow的nCmdShow参数设置为SW_SHOWDEFAULT,则使用wShowWindow成员。

所以这意味着,第一次启动程序并调用ShowWindow()时,它会完全忽略您在wShowWindow结构中传入STARTUPINFO的内容。然后,在另一次调用ShowWindow()时,如果程序调用{​​{1}}并将ShowWindow()参数设置为{{1},则将使用您提供的值为wShowWindow }}

因此,如果程序本身在nCmdShow中为SW_SHOWDEFAULT提供了自己的值,那么隐藏GUI窗口似乎是不可能的,所以看看哪些程序执行此操作似乎是试错,例如notepad.exe允许你隐藏它,而calc.exe则不能。