pywin32模块测试

  • EnumWindows 遍历所有窗口
BOOL EnumWindows(
  WNDENUMPROC lpEnumFunc,
  LPARAM      lParam
);
lpEnumFunc  应用程序定义的回调函数
lParam      传递给回调函数的应用程序定义的值

示例:

from win32gui import *
windows = []
def get_windows(hwnd,param):
    if IsWindow(hwnd) and IsWindowEnabled(hwnd) and IsWindowVisible(hwnd): # 用来过滤
        windows.append(GetWindowText(hwnd))  # 获得窗口标题
EnumWindows(get_windows, 0)
for i in windows:
    print(i)
  • EnumChildWindows 遍历子窗口(包括控件)
BOOL EnumChildWindows(
  HWND        hWndParent,
  WNDENUMPROC lpEnumFunc,
  LPARAM      lParam
);
hWndParent  父窗口句柄
lpEnumFunc  应用程序定义的回调函数
lParam      传给回调函数的应用程序定义的值

示例

from win32gui import *
hwnd = FindWindow(None,'编辑服务器')  # 查找'编辑服务器'这个窗口 
widgets=[]  #存放子窗口控件相关信息
def get_child_windows(child_window,param):
    widget={
        'handle':child_window ,
        'class':GetClassName(child_window),  #得到的HWND获取对应Window的Class属性
        'title':GetWindowText(child_window),  #得到的HWND获取对应Window的标题名
        'pos':GetWindowRect(child_window)
    }
    widgets.append(widget)
EnumChildWindows(hwnd,get_child_windows,None) # 如果没有指定父窗口,则会遍历所有子窗口
for i in widgets:
    print(i)
  • 鼠标点击
SetCursorPos # 设置鼠标位置,参数坐标是个元组
# 点击鼠标
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)  
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)  

示例

def click_widget(widget_title):
    for i in widgets:
        if i['title'].find(widget_title) > 0:
            win32api.SetCursorPos((i['pos'][0] + 5, i['pos'][1] + 5))
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

click_widget('A')
  • 写入文本信息
win32api.SendMessage(‘控件句柄’, win32con.WM_SETTEXT, None,'字符串‘)

示例程序

from win32gui import *
import win32con
import win32api
import time

class monitor:
    def __init__(self,hwnd,vpn_info):
        self.widgets = [] # 存放子窗口控件相关信息
        self.edit=[]    # 文本输入框控件相关信息
        self.info = info  # 存放VPN连接相关信息
        self.hwnd = hwnd  # VPN软件句柄

    # 遍历子窗口
    def get_child_windows(self,child_window, param):
        widget = {
            'handle': child_window,
            'class': GetClassName(child_window),  # 得到的HWND获取对应Window的Class属性
            'title': GetWindowText(child_window),  # 得到的HWND获取对应Window的标题名
            'pos': GetWindowRect(child_window)
        }
        self.widgets.append(widget)

    # 点击指定控件
    def click_widget(self,widget_title):
        for i in self.widgets:
            if i['title'].find(widget_title) > 0:
                win32api.SetCursorPos((i['pos'][0] + 5, i['pos'][1] + 5))
                win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
                win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

    # 获取编辑类控件
    def get_class_edit(self):
        for i in self.widgets:
            if i['class'] == 'WindowsForms10.EDIT.app.0.12ab327_r9_ad1':
                self.edit.append(i)

    # 自动填充信息
    def auto_insert(self):
        i = 0
        for key, value in self.info.items():
            win32api.SendMessage(self.edit[i]['handle'], win32con.WM_SETTEXT, None, value)
            i = i + 1

    # 主程序
    def run(self):
        EnumChildWindows(self.hwnd, self.get_child_windows, None)
        self.get_class_edit()
        self.click_widget('A')
        time.sleep(1)
        self.auto_insert()
        time.sleep(1)
        self.click_widget('D')


# 自动填充的内容
info={
    'agent_port':'1080',
    'comment': '自动化脚本',
    'ip':'138.128.212.67',
    'port':'9555',
    'password':'123456'
}

def main():
    hwnd = FindWindow(None, '编辑服务器')
    if hwnd == 0 :
        print('找不到窗口')
        exit()
    SetWindowPos(hwnd, win32con.HWND_TOPMOST, 600, 300, 600, 600, win32con.SWP_NOSIZE)
    SS=monitor(hwnd,info)
    SS.run()

if __name__ == '__main__':
    main()

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值