使用Python3 + win32gui打开桌面应用,自动登录

1.场景:每天开机后都需要点开qq,pl/sql,idea,chrome等应用,觉得很麻烦,于是想到用python做一个程序,实现自动登录这些应用。
2.原理:就是实现 打开应用–等待窗口–点击按钮 这一流程,这边选择使用os+win32模块。本来想获取窗口句柄,然后获取按钮(子控件)的方式来实现点击的,但是发现个别应用只能获取到窗口句柄(spy++查看),无法遍历获取到子控件,所以统一使用像素座标定位按钮,然后模拟鼠标移动和点击。所幸电脑分辨率1920*1080就是默认像素尺寸,并且以上应用打开后的位置固定(不固定也可以通过获取窗口句柄然后移动窗口来固定),所以按钮的像素座标很好获取。
qq登录按钮位置,pl/sql取消按钮位置,idea第一个工程的位置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.代码

import os
import time
import win32gui
import win32api
import win32con


# 设置appdict
pyexe = "E:\...\python.exe"
appdict = {'qq': '"D:\...\QQScLauncher.exe"',
           'pl/sql': '"E:\...\plsqldev.exe"',
           'idea': '"E:...\idea64.exe"',
           'chrome': '"C:\...\chrome.exe"'}
# qq登录按钮位置,pl/sql取消按钮位置,idea第一个工程的位置
coorddict = {'qq': [960, 665], 'pl/sql': [1060, 620], 'idea': [700, 245]}
namedict = {'qq': 'QQ', 'pl/sql': 'Oracle Logon', 'idea': 'Welcome to IntelliJ IDEA'}


# 打开应用并且鼠标点击按钮(获取按钮的像素座标很麻烦)
def open_by_grab():
    pyhd = win32gui.FindWindow(None, pyexe)  # 360会拦截pyexe,可以添加信任或者关闭360
    # 设置pyexe窗口属性和位置,太大会挡住一些窗口
    win32gui.SetWindowPos(pyhd, win32con.HWND_TOPMOST, 0, 0, 500, 500, win32con.SWP_SHOWWINDOW) 
    print("py exe 句柄: %s ..." % pyhd)
    for key in appdict.keys():
        print("启动 %s ..." % key)
        os.popen(r'%s' % appdict[key])  # os.system会阻塞
        time.sleep(3)
        if key == "chrome":
            pass
        else:
            winhd = win32gui.FindWindow(None, namedict[key])  # 根据窗口名获取句柄
            while winhd == 0:
                print("等待获取%s窗口 ..." % key)
                time.sleep(3)
                winhd = win32gui.FindWindow(None, namedict[key])
            print("获取%s窗口成功,开始登录 ..." % key)
            a, b = coorddict[key]
            mouse_click(a, b)
            time.sleep(3)
    print("完毕 ...")
    time.sleep(1)
    win32gui.SendMessage(pyhd, win32con.WM_CLOSE)


# 模拟鼠标点击
def mouse_click(a, b):
    time.sleep(1)
    win32api.SetCursorPos((a, b))
    time.sleep(1)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) # 360会拦截虚拟按键,可以添加信任或者关闭360
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)


open_by_grab()

4.使用bat调用py(没有py环境可以打包做成exe)
在这里插入图片描述
新建一个文本,增加调用py的命令,然后改成bat后缀:

start python "E:\...\openapp.py"

注意要在安全卫士添加信任,不然会拦截,很烦。
其他应用可以自行添加,也可以增加一些后续操作,或者对于pl/sql用获取句柄方式自动填用户密码然后点击确认登录…等等。
现在每天开机后点一下start.bat就可以玩手机了,美滋滋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章