【问题标题】:CMD window minimized for Popen() call?为 Popen() 调用最小化 CMD 窗口?
【发布时间】:2011-02-01 18:03:25
【问题描述】:

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

我使用的是带有 Python 2.6 的 winXP 32。

谢谢!

【问题讨论】:

  • 您是从 CMD 控制台启动应用程序吗?在这种情况下,不应打开新的控制台窗口...
  • 没有。该进程由另一个应用程序触发。

标签: python windows automation pywin32


【解决方案1】:

如果 CMD 控制台有一个明确的标题,您可以获取它的句柄并使用以下命令将其最小化(在进程启动之后):

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

6 代表SW_MINIMIZE(参见MSDN doc for the ShowWindow() function

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

【讨论】:

  • 你可以用win32con.SW_MINIMIZE代替6
【解决方案2】:

您是否将 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.communicatehttp://docs.python.org/library/subprocess.html#popen-objects

【讨论】:

  • 这是一个很好的建议,除了在系统托盘中有最小化的窗口很方便,这样我就可以检查它们在那里写入的各种消息。此外,杀死可以从系统托盘访问的进程更容易。
【解决方案3】:

以下将根据 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)

【讨论】:

    猜你喜欢
    • 2014-06-19
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2011-05-27
    • 1970-01-01
    • 2019-04-02
    相关资源
    最近更新 更多