wp231957 发表于 2021-3-26 12:12:19

关于自动登录的一个小问题

本帖最后由 wp231957 于 2022-9-7 15:03 编辑

请先看代码
import win32gui,win32con,win32api,os,time,win32com
from pymouse import PyMouse
from ctypes import *
from win32com.client import Dispatch, constants
from pykeyboard import PyKeyboard # 这个绝对不能pip 而是需要pip pyuserinput
# pyuserinput 之后 千万不要 pip pykeyboard
idx=1
lst=open("yzgb.txt","r")
for zh in lst:
    print("%2d"%idx,"当前登录账号:",zh[:-1],end="")
   #apppath=r'"C:\Program Files (x86)\UleSoft\邮掌柜4\邮掌柜.exe"'
    apppath=r'"E:\360SoftMgrGame\邮掌柜4\邮掌柜.exe"'
    #os.system(apppath) #这个system是拥塞式执行,不适合本程序
    os.popen(apppath)
    time.sleep(1)
    shell = win32com.client.Dispatch("WScript.Shell")
    shell.SendKeys('%')
    win32gui.SetForegroundWindow(win32gui.FindWindow("CefBrowserWindow","邮掌柜"))
    hwnd=win32gui.GetForegroundWindow()
    xypos=win32gui.GetWindowPlacement(hwnd)
    x,y=xypos,xypos
    hight=xypos-xypos
    width=xypos-xypos
    pos_x=x+width*0.71
    pos_y=y+hight*0.455
    #print(pos_x,pos_y)
    time.sleep(1)
    windll.user32.SetCursorPos(int(pos_x),int(pos_y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    into=PyKeyboard()
    into.tap_key(into.backspace_key,n=11,interval=0.1)
    into.type_string(zh[:-1])
    time.sleep(1)
    win32api.keybd_event(9,0,0,0) #9 代表TAB
    win32api.keybd_event(9,0,win32con.KEYEVENTF_KEYUP,0)
    into.type_string(zh[:-1])
    time.sleep(1)
    win32api.keybd_event(13,0,0,0) #13 代表回车
    win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
    time.sleep(5)
    m=PyMouse()
    #scr=m.screen_size()
    #print(scr)
    m.click(1055,561,1)
    time.sleep(8)
    win32api.keybd_event(18,0,0,0) #18 代表ALT
    win32api.keybd_event(115,0,0,0) #115 代表F4
    win32api.keybd_event(115,0,win32con.KEYEVENTF_KEYUP,0)
    win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0)
    time.sleep(2)
    win32api.keybd_event(13,0,0,0) #13 代表回车
    win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
    time.sleep(3)
   
print("..........OK")
    idx+=1


lst=open("yzga.txt","r")
for zh in lst:
    print("%2d"%idx,"当前登录账号:",zh[:-1],end="")
    #apppath=r'"C:\Program Files (x86)\UleSoft\邮掌柜4\邮掌柜.exe"'
    apppath=r'"E:\360SoftMgrGame\邮掌柜4\邮掌柜.exe"'
    #os.system(apppath) #这个system是拥塞式执行,不适合本程序
    os.popen(apppath)
    time.sleep(1)
    shell = win32com.client.Dispatch("WScript.Shell")
    shell.SendKeys('%')
    win32gui.SetForegroundWindow(win32gui.FindWindow("CefBrowserWindow","邮掌柜"))
    hwnd=win32gui.GetForegroundWindow()
    xypos=win32gui.GetWindowPlacement(hwnd)
    x,y=xypos,xypos
    hight=xypos-xypos
    width=xypos-xypos
    pos_x=x+width*0.71
    pos_y=y+hight*0.455
    #print(pos_x,pos_y)
    time.sleep(1)
    windll.user32.SetCursorPos(int(pos_x),int(pos_y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    into=PyKeyboard()
    into.tap_key(into.backspace_key,n=11,interval=0.1)
    into.type_string(zh[:-1])
    time.sleep(1)
    win32api.keybd_event(9,0,0,0) #9 代表TAB
    win32api.keybd_event(9,0,win32con.KEYEVENTF_KEYUP,0)
    into.type_string(zh[:-1])
    time.sleep(3)
    win32api.keybd_event(13,0,0,0) #13 代表回车
    win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
    time.sleep(8)
    win32api.keybd_event(18,0,0,0) #18 代表ALT
    win32api.keybd_event(115,0,0,0) #115 代表F4
    win32api.keybd_event(115,0,win32con.KEYEVENTF_KEYUP,0)
    win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0)
    time.sleep(2)
    win32api.keybd_event(13,0,0,0) #13 代表回车
    win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
    time.sleep(5)
   
print("..........OK")
    idx+=1

print("登录完毕,请按任意键 退出本程序")
os.system("pause")   


上述代码 不用都看,我们只关注标记蓝色字体部分,蓝色字体部分 是什么意思呢    就是打印一条信息,然后执行红色部分代码块   红色代码块执行完毕后,在把print("..........OK")追加到行尾

现在的情况是,这两条蓝色print语句 会一起被执行,而不是断开执行   他都执行完了,然后另一边应用程序也在运行顺序是打印   打印   执行
而我期待的顺序是   打印   执行   打印
页: [1]
查看完整版本: 关于自动登录的一个小问题