如何在Python中按名称关闭窗口

rslzwgfq  于 2024-01-05  发布在  Python
关注(0)|答案(1)|浏览(147)

我正在为一个朋友制作一个minecraft控制台客户端脚本它基于txt文件打开控制台客户端
我想出了如何杀死/终止窗口,但这部分并没有物理关闭窗口,它只是将其设置为正常的命令提示符窗口,因为它是使用批处理命令创建的
我如何完全按名称关闭程序,就像我按了应用程序右上角的“x”按钮一样。

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

字符串
这两种方法都不会关闭.exe,它只是将其更改为命令提示符窗口。我不想再次运行psutil.process_iter()中的for proc,只是为了关闭命令提示符窗口。

编辑1:

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

  1. def connect(file, directory, executeds):
  2. with open(file) as file:
  3. for line in file:
  4. #stdout=PIPE, stderr=PIPE, stdin=PIPE,
  5. lines = line.split(":")
  6. login = lines[0]
  7. password = lines[1]
  8. IP = lines[2]
  9. // CREATE_NEW_PROCESS_GROUP = 0x00000200
  10. // DETACHED_PROCESS = 0x00000008
  11. command = "MinecraftClient.exe {0} {1} {2}".format(login, password, IP)
  12. executed = Popen("start cmd /K " + command, cwd=directory, shell=True)
  13. out, err = executed.communicate()
  14. executeds.append(executed.pid)
  15. if executed.returncode == 0:
  16. print("Connected {0} to {1} successfully".format(login, IP))
  17. else:
  18. print("Failed to connect {0} to {1}.".format(login, IP))
  19. print("{0}".format(err))
  20. time.sleep(3)


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

ss2ws0br

ss2ws0br1#

我刚刚检查了一下,我找不到任何名为MinecraftClient.exe的东西在为我运行。Minecraft进程实际上名为javaw.exe-试着杀死它。如果这不是问题所在,我用subprocess模块管理它:

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

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

编辑

你的截图显示,它最终成为xml.exe-尝试杀死,而不是?
好的,下载程序后,我成功地使用subprocess.call('taskkill /f /im MinecraftClient.exe & taskkill /f /im cmd.exe', shell=True)杀死了它。

相关问题