4

我正在尝试做一些简单的事情,比如让 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

4

1 回答 1

2

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

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

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

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

所以这意味着,程序第一次启动并调用ShowWindow()时,它会完全忽略你wShowWindowSTARTUPINFO结构中传入的任何内容。然后,在再次调用 时,如果程序调用其参数设置为ShowWindow(),它只会使用您为 wShowWindow 提供的值。ShowWindow()nCmdShowSW_SHOWDEFAULT

nCmdShow因此,如果程序本身为in提供了自己的值,似乎不可能隐藏 GUI 窗口ShowWindow(),因此查看哪些程序执行此操作似乎是反复试验,例如 notepad.exe 允许您隐藏它,而calc.exe 你不能。

于 2012-09-23T18:37:37.197 回答