打开python最小化或隐藏的程序

新手上路,请多包涵

我想要做的是编写一个脚本,它只会在进程列表中打开一个应用程序。意味着它将被“隐藏”。我什至不知道它在 python 中是否可行。

如果不可能的话,我什至会选择一个允许程序在最小化状态下用 python 打开的函数,可能是这样的:

 import subprocess
def startProgram():
    subprocess.Hide(subprocess.Popen('C:\test.exe')) #  I know this is wrong but you get the idea...
startProgram()

有人建议使用 win32com.client 但问题是我要启动的程序没有在该名称下注册的 COM 服务器。

有任何想法吗?

原文由 wtz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 834
2 个回答

您应该使用 win32api 并隐藏您的窗口,例如使用 win32gui.EnumWindows 您可以枚举所有顶级窗口并隐藏您的窗口

这是一个小例子,你可以这样做:

 import subprocess
import win32gui
import time

proc = subprocess.Popen(["notepad.exe"])
# lets wait a bit to app to start
time.sleep(3)

def enumWindowFunc(hwnd, windowList):
    """ win32gui.EnumWindows() callback """
    text = win32gui.GetWindowText(hwnd)
    className = win32gui.GetClassName(hwnd)
    #print hwnd, text, className
    if text.find("Notepad") >= 0:
        windowList.append((hwnd, text, className))

myWindows = []
# enumerate thru all top windows and get windows which are ours
win32gui.EnumWindows(enumWindowFunc, myWindows)

# now hide my windows, we can actually check process info from GetWindowThreadProcessId
# http://msdn.microsoft.com/en-us/library/ms633522(VS.85).aspx
for hwnd, text, className in myWindows:
    win32gui.ShowWindow(hwnd, False)

# as our notepad is now hidden
# you will have to kill notepad in taskmanager to get past next line
proc.wait()
print "finished."

原文由 Anurag Uniyal 发布,翻译遵循 CC BY-SA 3.0 许可协议

这很容易 :)

Python Popen 接受 STARTUPINFO 结构…

关于STARTUPINFO结构: https ://msdn.microsoft.com/en-us/library/windows/desktop/ms686331(v=vs.85).aspx

运行隐藏:

 import subprocess

def startProgram():
    SW_HIDE = 0
    info = subprocess.STARTUPINFO()
    info.dwFlags = subprocess.STARTF_USESHOWWINDOW
    info.wShowWindow = SW_HIDE
    subprocess.Popen(r'C:\test.exe', startupinfo=info)
startProgram()

运行最小化:

 import subprocess

def startProgram():
    SW_MINIMIZE = 6
    info = subprocess.STARTUPINFO()
    info.dwFlags = subprocess.STARTF_USESHOWWINDOW
    info.wShowWindow = SW_MINIMIZE
    subprocess.Popen(r'C:\test.exe', startupinfo=info)
startProgram()

原文由 Tomer Zait 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题