我正在尝试创建一个简单的命令行进程并将其显示给用户(我不希望隐藏进程):
import subprocess
import win32con
kwargs = {}
info = subprocess.STARTUPINFO()
info.dwFlags |= subprocess.STARTF_USESHOWWINDOW
info.wShowWindow = win32con.SW_SHOWMAXIMIZED
ExecuteString = ('process.cmd')
kwargs['startupinfo'] = info
sp = subprocess.Popen(ExecuteString, **kwargs)
它适用于例如notepad.exe但没有简单的process.cmd:
echo "This is a process run from python"
pause
我没有想法,如何实现这一目标。我发现了各种各样的东西,如何隐藏一个过程。但我希望实现相反的目标。 有什么想法吗?
谢谢!
答案 0 :(得分:0)
您似乎混淆了进程和窗口的概念。所有窗口都与进程相关联,但某个进程可能与任何窗口无关。
您的简单批处理脚本是从cmd.exe
进程解释的。如果您在双击打开批处理脚本时习惯了Windows的行为,可能会认为cmd.exe
始终与窗口关联,但事实并非如此。您可以通过在现有命令提示符下运行cmd.exe
来自行检查 - 它不会打开一个新窗口(例如,正在运行notepad.exe
)。
在python中,进程运行“就好像”它们是从命令提示符运行的 - 这就是为什么你没有得到另一个窗口。
这实际上并没有回答这个问题,但它可能有助于理解问题。
答案 1 :(得分:0)
对于Windowed应用程序,您只需使用SW_HIDE
常量而不是SW_SHOWMAXIMIZED
。
如果你还想覆盖启动终端窗口的控制台应用程序,我猜你想要运行这样的东西:
EnumWindowsProc
实施中,这将允许您找到刚刚启动的流程的顶级窗口。从那里,您可以致电ShowWindow()来显示/隐藏窗口。
请注意,这可能会遇到一些时间问题(如果您的搜索在子进程创建窗口之前运行,搜索将不会产生任何结果)以及闪烁(因为您将隐藏窗口后面的窗口)显示器)。