【问题标题】:How to close a window in python by name如何按名称关闭python中的窗口
【发布时间】:2018-03-31 23:48:52
【问题描述】:

我正在为一个朋友制作一个我的世界控制台客户端脚本 它基于一个txt文件打开控制台客户端

我想出了如何杀死/终止窗口,但这部分并没有物理关闭窗口,它只是将它设置为普通的命令提示符窗口,因为它是使用批处理命令创建的

如何按名称完全关闭程序,就像我按下应用程序右上角的“x”按钮一样。

    os.system("taskkill /f /im MinecraftClient.exe")
 //for proc in psutil.process_iter():
   //  if proc.name() == "MinecraftClient.exe":
   //      proc.terminate()
   //      reap_children()

它们都没有真正关闭 .exe,它只是将其更改为命令提示符窗口。而且我不想为了关闭命令提示符窗口而再次运行 psutil.process_iter() 中的 for proc。

编辑 1:

如何打开 MinecraftClient.exe 请记住它是一个控制台客户端,您可以从 github 下载

def connect(file, directory, executeds):
with open(file) as file:
    for line in file:
        #stdout=PIPE, stderr=PIPE, stdin=PIPE,
        lines = line.split(":")
        login = lines[0]
        password = lines[1]
        IP = lines[2]
    //     CREATE_NEW_PROCESS_GROUP = 0x00000200
   //      DETACHED_PROCESS = 0x00000008
        command = "MinecraftClient.exe {0} {1} {2}".format(login, password, IP)
        executed = Popen("start cmd /K " + command, cwd=directory, shell=True)
        out, err = executed.communicate()
        executeds.append(executed.pid)
        if executed.returncode == 0:
            print("Connected {0} to {1} successfully".format(login, IP))
        else:
            print("Failed to connect {0} to {1}.".format(login, IP))
            print("{0}".format(err))

        time.sleep(3)

有些东西我没有使用,因为它们只是测试

【问题讨论】:

    标签: python taskkill psutil


    【解决方案1】:

    我刚刚检查过,我找不到任何名为 MinecraftClient.exe 的程序正在为我运行。 Minecraft 进程实际上被称为javaw.exe - 尝试杀死它。如果这不是问题,我使用 subprocess 模块管理它:

    import subprocess
    subprocess.call("taskkill /f /im javaw.exe", shell=True)
    

    shell=True 阻止它在您的屏幕上打开命令提示符。

    编辑
    您的屏幕截图显示它最终变成了 cmd.exe - 尝试杀死它吗?
    好的,下载程序后,我成功地使用subprocess.call('taskkill /f /im MinecraftClient.exe & taskkill /f /im cmd.exe', shell=True)杀死了它

    【讨论】:

    • MinecraftClient.exe 是一个下载的应用程序,用于在我的世界上 AFK 农场。我使用以 cmd 启动的批处理命令来打开 .exe,但是当我关闭它时,它会将其更改为常规的旧命令提示符窗口,因此我不想在 psutil.process_iter 中添加另一个 os.system 或 for proc () 也只是为了关闭命令提示符窗口。我将进行编辑以显示连接功能
    • 控制台客户端不是由 minecraft 本身处理的,它是它自己的应用程序,它使用 minecraft 服务连接到 minecraft 服务器。只需 google minecraft 控制台客户端,它将是第一个 github 链接
    • 忘了提及您建议的方式,也将其更改为命令提示符窗口。这是调用关闭函数后的样子gyazo.com/ebbef76853328eef3c130cbb3da27e26 这是调用关闭函数之前的样子gyazo.com/16eb61bbc8c84190c92d75ee7769a930 图片的最后不应该在那里,因为我刚刚被踢了,因为我在VPN上登录时。但如果我不在 VPN 上,就像我在服务器上但无法移动一样。
    • 好的,我想避免结束 cmd 本身,但我想我必须这样做。
    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 2011-11-06
    • 2023-04-06
    • 2020-01-22
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 2017-07-24
    相关资源
    最近更新 更多