python - 用os.system打开程序卡在CMD窗口上怎么办?
怪我咯
怪我咯 2017-04-18 09:03:12
0
2
527

这是一个Windos自动登录QQ的一段代码,但是有个问题。(win10, python2.7)

import os
import win32api
import win32con
import time

from ctypes import *
os.system("D:\qq\Bin\QQ.exe")
time.sleep(0.5)

windll.user32.SetCursorPos(969,583)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)

其中,

os.system("D:\qq\Bin\QQ.exe")
time.sleep(0.5)
windll.user32.SetCursorPos(969,583)

这一步是打开QQ,并把鼠标指在账号输入的地方。

可是CMD打开QQ后,CMD窗口依然停留在桌面上,导致接下来的'移动鼠标'不能运行,我手动关闭CMD窗口程序才能继续。请问大家有什么好方法让CMD窗口消失吗?

直接在CMD里用"D:qqBinQQ.exe" & exit可以实现打开qq并退出CMD,
于是我尝试修改成os.system(' "D:qqBinQQ.exe" and exit'),
仍然出现以上问题。希望大家给点意见。

怪我咯
怪我咯

走同样的路,发现不同的人生

reply all(2)
左手右手慢动作

The problem is that os.system is blocked. You must complete the previous step before you can do the next step. You need to call the mouse while opening QQ, so the two are contradictory

Use subprocess

instead
import subprocess
import win32api
import win32con
import time

from ctypes import *

qq_exe = r"D:\qq\Bin\QQ.exe"
subprocess.Popen([qq_exe])
time.sleep(5)//由于非阻塞 sleep时间要增大 或者可以调用其他方法 探测qq的窗口存在吗
windll.user32.SetCursorPos(969, 583)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
黄舟

Because os.system actually creates a cmd.exe process, and then this process creates the qq process. In order to avoid the cmd.exe process, you can directly use a module such as subprocess to open qq directly.

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template