【问题标题】:Starting VBS script from python code with minimized window?从最小化窗口的python代码启动VBS脚本?
【发布时间】:2021-05-31 12:14:01
【问题描述】:

我有 vbs 脚本,我想在 Windows 10 上从 python 代码运行,但窗口最小化,因此窗口不会以展开形式出现在屏幕上。 我尝试使用带有启动信息参数的 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 脚本时仍然会弹出脚本窗口。

我也尝试使用 cmd 命令"start /min script.vbs" 调用它 - 也没有成功。

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

【问题讨论】:

  • 尝试改用常量SW_SHOWMINIMIZED = 2
  • 我试过但没用

标签: python windows cmd vbscript


【解决方案1】:

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

如果您需要一个最小化的窗口,您可以修改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

【讨论】:

  • wscript.exe - 给出相同的结果。关于第二个建议,如果我正确的话 - 我应该将它复制到我的 vbs 并用脚本名称修改行?但是我尝试过这样做,并且还创建了单独的脚本。但是有了这个内容,我得到了编译错误。不幸的是,以前从未与 vbs 有过任何业务
【解决方案2】:

我已经使用 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_())

【讨论】:

    猜你喜欢
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2020-09-03
    • 2017-12-25
    相关资源
    最近更新 更多