从具有最小化 window 的 python 代码启动 VBS 脚本?

Starting VBS script from python code with minimized window?

我有 vbs 脚本,我想从 python 代码 运行 Windows 10,但最小化 window,以便 window 不会以展开形式出现在屏幕上。 我尝试将 subprocesses.Popen 与启动信息参数一起使用,例如:

SW_MINIMIZE = 6 
# I also tried SW_HIDE = 0
info = subprocess.STARTUPINFO()
info.dwFlags = subprocess.STARTF_USESHOWWINDOW
info.wShowWindow = SW_MINIMIZE
subprocess.Popen(["C:/Windows/SysWOW64/cscript.exe", "script.vbs"], startupinfo=info)

但我没有得到预期的结果 - 当我 运行 python 脚本时,脚本 window 仍然弹出。

我也试过用cmd命令调用它"start /min script.vbs" - 也不成功。

是否可以启动初始最小化的window?或者至少在开始后立即最小化 window 而无需等待

尝试使用 wscript.exe 而不是 cscript。根据您的 vbs 脚本,这根本不应该显示任何脚本 window。

如果您需要最小化 window,您可以修改 this solution 中的代码并像这样启动您的脚本:

Const MIN_WINDOW = 2

strComputer = “.”

Set objWMIService = GetObject(“winmgmts:\” & strComputer & “\root\cimv2”)

Set objStartup = objWMIService.Get(“Win32_ProcessStartup”)
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = MIN_WINDOW

Set objProcess = GetObject(“winmgmts:\” & strComputer & “\root\cimv2:Win32_Process”)

objProcess.Create “Cscript.exe C:\Scripts\Test.vbs”, null, objConfig, intProcessID

我已经使用 PyQt5 解决了这个问题,这不是我想要的,但它有效

class MainForm(QWidget):
    def __init__(self):
        super().__init__()

    def init_ui(self):
        proc = QProcess()
        command = "C:/Windows/SysWOW64/wscript.exe"
        proc.setProgram(command)
        args = ['C:/work/script.vbs',]
        proc.setArguments(args)
        proc.start()
        
        window_title = 'title'
        # you need to know title of your external app window
        hwnd = win32gui.FindWindowEx(
             0, 0, None, windows_title)
    
        container = self.createWindowContainer(window, self)
        layout.addWidget(container)
        self.setLayout(layout)
        self.setGeometry(500, 500, 450, 400)
        self.setWindowTitle(window_title)
        self.showMinimized()
        # or self.show() if you need pop up window


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mf = MainForm()
    sys.exit(app.exec_())