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()
参考链接
- https://blog.csdn.net/loonger_leon/article/details/5737683
- https://blog.csdn.net/qq_34489091/article/details/80244118
- https://blog.csdn.net/qq_16234613/article/details/79155632
还没有评论,来说两句吧...