Windows-启动信息中带有wShowWindow的弹出窗口不会影响显示



我正在尝试做一些简单的事情,比如让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提供什么,它都会一如既往地弹出。

我想你已经明白了,但为了其他读者的利益,我的看法是:

这个问题与calc.exe程序有关,与Python和您的代码无关。要证明这一点,请尝试启动"notepad.exe"(或"wordpad.exe"),它会起作用——还请注意,根据目标.exe文件的位置,您可能需要提供该文件的完整路径。

具体错在哪里,是根据STARTUPINFO结构,wShowWindow成员:

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

因此,这意味着,当程序第一次启动并调用ShowWindow()时,它会完全忽略您在STARTUPINFO结构中为wShowWindow传递的内容。然后,在对ShowWindow()进行另一次调用时,如果程序调用ShowWindow()且其nCmdShow参数设置为SW_SHOWDEFAULT,则它将使用您为wShowWindow提供的值。

因此,如果程序本身在ShowWindow()中为nCmdShow提供了自己的值,那么隐藏GUI窗口似乎是不可能的,因此,看看哪些程序能做到这一点似乎是一种尝试和错误,例如notepad.exe允许您隐藏它,而calc.exe则不能。

最新更新