python – Windows – 在startupinfo中使用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提供什么,它都会像往常一样弹出.

解决方法:

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

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

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

For GUI processes, the first time ShowWindow is called, its nCmdshow parameter is ignored wShowWindow specifies the default value. In subsequent calls to ShowWindow, the wShowWindow member is used if the nCmdshow parameter of ShowWindow is set to SW_SHOWDEFAULT.

所以这意味着,当程序第一次启动并调用ShowWindow()时,它完全忽略了你在STARTUPINFO结构中为wShowWindow传递的内容.然后,在另一次调用ShowWindow()时,如果程序调用ShowWindow()并将其nCmdshow参数设置为SW_SHOWDEFAULT,它将仅使用您提供的值为wShowWindow.

因此,如果程序本身在ShowWindow()中为nCmdshow提供了自己的值,那么似乎不可能隐藏GUI窗口,所以看起来似乎是试错了,看看哪个程序可以做到这一点,例如notepad.exe允许你隐藏它,而calc.exe你不能.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...