读取输入后隐藏控制台窗口

3
我有一个带有GUI的脚本,它接收用户数据并将其存储到文本文件中。它运行另一个脚本(一个.exe文件),该脚本等待用户输入,然后执行一些操作。我想要的是,在读取用户输入后,让后面的脚本隐藏控制台窗口,但仍在后台继续工作。
我尝试使用subprocess.call('lastscript.exe', shell=True)subprocess.Popen('lastscript.exe', shell=True)来运行该脚本。但这并不起作用。我必须先获取用户的输入,然后隐藏控制台并让程序在后台工作。

你考虑过使用tk窗口进行输入吗? - R21
是的,我有控制权,它只是一个脚本,等待用户在命令提示符上输入,然后使用该输入处理代码。在接受输入后,我希望它隐藏自己。我尝试了一切但没有成功... - GLHF
如果lastscript.exe是一个Python脚本,在读取输入后,您可以运行以下命令:import ctypes; kernel32 = ctypes.WinDLL('kernel32'); user32 = ctypes.WinDLL('user32'); user32.ShowWindow(kernel32.GetConsoleWindow(), 0) - Eryk Sun
@eryksun,你能把那段代码发布为答案吗?这样我就可以更好地尝试它了,如果它有效的话,我可以接受你的答案。另外,ctypes是第三方模块吗? - GLHF
顺便提一下,运行lastscript.exe时不需要使用shell=True,而且可能不应该使用它。只有在运行需要内置shell命令(例如copydir)或Windows ShellExecuteEx API的命令时才使用cmd.exe shell。您可以直接运行EXE文件,而无需使用shell。我从您的问题中删除了所有关于“cmd”的引用,因为控制台窗口是conhost.exe,而不是cmd.exe。如果lastscript.exe是控制台应用程序,则它会继承或创建一个新的conhost.exe实例来托管其控制台窗口。 - Eryk Sun
显示剩余3条评论
1个回答

7
下面是一个Python脚本的代码片段,可用于隐藏Windows控制台:
import ctypes

kernel32 = ctypes.WinDLL('kernel32')
user32 = ctypes.WinDLL('user32')

SW_HIDE = 0

hWnd = kernel32.GetConsoleWindow()
if hWnd:
    user32.ShowWindow(hWnd, SW_HIDE)

1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - GLHF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接