Python,Windows – 在启动信息中用wShowWindow打开Popen不影响显示

我试图做一些简单的事情,如获取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,它都会一如既往地popup。

Solutions Collecting From Web of "Python,Windows – 在启动信息中用wShowWindow打开Popen不影响显示"

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

这个问题有特定的calc.exe程序,而不是Python或您的代码。 为了证明它,尝试启动“notepad.exe”(或“wordpad.exe”),它将工作 – 还要注意,您可能需要提供目标.exe文件的完整路径,取决于它在哪里。

具体是什么错,是根据STARTUPINFO结构, wShowWindow成员:

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

因此,这意味着程序第一次启动并调用ShowWindow() ,它完全忽略了在STARTUPINFO结构中为wShowWindow传入的wShowWindow 。 然后,在ShowWindow()另一个调用中,如果程序调用ShowWindow()并将其nCmdShow参数设置为SW_SHOWDEFAULT ,它将使用您为wShowWindow提供的值。

所以,如果程序本身在ShowWindow()nCmdShow提供了自己的值,那么隐藏一个GUI窗口似乎是不可能的,所以看起来像是试验和错误,看看哪些程序这样做,比如notepad.exe允许你隐藏它,而calc.exe你不能。