通过python3+win32gui实现自动登录windows应用程序

一、准备工作

pip install pywin32==228

下载应用程序spy++
在这里插入图片描述
在这里插入图片描述

二、拉起要登陆的应用

import os
import win32api
import win32con
import win32gui
import time

def open_exe(vpnPath):
    win32api.ShellExecute(0, 'open', vpnPath, '','',1)  # 拉起登录窗口
    time.sleep(3)

open_exe('xx\FortiSSLVPNclient.exe')

在这里插入图片描述

三、打开spy++,获取句柄

拖动spy++左上角的指针,放到要登录的应用窗口上
在这里插入图片描述
在这里插入图片描述
得到窗口句柄和标题文本,通过它们获取到应用的句柄

loginHandle = win32gui.FindWindow('#32770', 'FortiClient SSLVPN')  # 获取句柄
hwndChildList = []
# 遍历获取子句柄
win32gui.EnumChildWindows(loginHandle, lambda x, y: y.append(x), hwndChildList)
print(hwndChildList)

所有子句柄列表
所有子句柄

四、获取子句柄,进行应用登录

按照上面获取主窗口句柄的方法,将spy++的指针放在要填写数据的地方,获取子句柄,查找该子句柄在上面所有子句柄列表中的索引位置
在这里插入图片描述

def find_window_login(serverAddress, username, password):
    loginHandle = win32gui.FindWindow('#32770', 'FortiClient SSLVPN')  # 获取句柄
    hwndChildList = []
    # 遍历,win32gui获取应用所有子句柄
    win32gui.EnumChildWindows(loginHandle, lambda x, y: y.append(x), hwndChildList)
    # 按照索引位置取到子句柄
    serverAddressHandle = hwndChildList[4]
    usernameHandle = hwndChildList[6]
    passwordHandle = hwndChildList[8]
    connectBtnHandle = hwndChildList[27]
    win32gui.SendMessage(serverAddressHandle, win32con.WM_SETTEXT, None, serverAddress)
    win32gui.SendMessage(usernameHandle, win32con.WM_SETTEXT, None, username)
    win32gui.SendMessage(passwordHandle, win32con.WM_SETTEXT, None, password)
    win32gui.SendMessage(connectBtnHandle, win32con.WM_LBUTTONDOWN, None, None)
    win32gui.SendMessage(connectBtnHandle, win32con.WM_LBUTTONUP, None, None)

find_window_login('xxxx', 'xxx', 'xxx')

登录成功
在这里插入图片描述

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值