为Popen()调用最小化CMD窗口?

时间:2011-02-01 18:03:25

标签: python windows automation pywin32

我正在使用Popen()启动一个Windows应用程序,并且弹出一个Windows CMD控制台,我需要监视标准输入/输出。有没有办法可以立即最小化此CMD窗口?控制台窗口本身干扰了Popen()启动的应用程序,因为它遮挡了可见桌面。

我使用Python 2.6在winXP 32上。

谢谢!

3 个答案:

答案 0 :(得分:2)

如果CMD控制台具有非标题的标题,您可以获取它的句柄并使用以下内容将其最小化(仅在该过程启动后):

import win32gui
handle = win32gui.FindWindow(None, cmd_window_title)
win32gui.ShowWindow(handle, 6)

6适用于SW_MINIMIZE(请参阅MSDN doc for the ShowWindow() function

当然,您应该添加适当的检查,例如等待窗口出现等等。

答案 1 :(得分:0)

您是否正在将python文件的扩展名更改为.pyw ?,使用pyw,python解释器不会显示Windows控制台,关于stdot / stdin,您可以使用subprocess.PIPE和

import subprocess
cmd = subprocess.Popen('program.exe', shell=true,
                        stdout=subprocess.PIPE, stdin=subprocess.PIPE)
 #read stdout
 print cmd.stdout.read()
 #write stdin
 cmd.stdin.write('DATA')

或使用Popen.communicate http://docs.python.org/library/subprocess.html#popen-objects

答案 2 :(得分:0)

以下内容将根据其pid最小化新创建的应用程序。

基于https://stackoverflow.com/a/4875055/3061838https://stackoverflow.com/a/44736622/3061838的答案。

import win32process
import win32gui
import win32con
import time


def minimize_cb(handle, pid):
    ''' Call back function used by minimize'''
    __, processId = win32process.GetWindowThreadProcessId(handle)
    if processId == pid:
        win32gui.ShowWindow(handle, win32con.SW_MINIMIZE)


def minimize(pid):
    '''Minimize window'''
    try:
        win32gui.EnumWindows(minimize_cb, pid)
    except Exception as e:
        print('minimize failed', e)


proc = subprocess.Popen(...)
# you may need to wait a little before the window is created
# sorry I don't have a better method...
time.sleep(1)
minimize(proc.pid)