python使用win32*模块模拟人工操作——城通网盘下载器(一)

本文介绍了如何使用Python的win32*模块模拟人工操作,详细讲解了FindWindow和FindWindowEx函数在寻找窗体句柄中的应用,以及SendMessage和PostMessage的区别和使用场景。通过这些技术,实现了城通网盘下载器,包括输入下载链接、点击添加任务、整理任务、解析勾选等步骤,并处理了弹出对话框的关闭问题。
摘要由CSDN通过智能技术生成
上篇讲了,如何使用“ 城通网盘批量下载器 v2.0 ”来下载城通网盘的文件。其主要操作集中在主界面中,所以我们首先使用python来模拟在主界面的操作。
打开城通网盘批量下载器,进入主界面,如图所示:
然后打开spy++,查看该程序的窗口信息。
可以看到,这个程序主窗口的句柄为 00090816(十六进制数),值得注意的是,这个句柄是每次打开程序时,windows随机生成的。故不能直接指定句柄号来操作窗口。在python中可以使用win32*模块来调用windows函数,之前你得安装pywin32。使用win32gui.FindWindow和win32gui.FindWindowEx函数来拿到句柄。具体用法为:
  • FindWindow(lpClassName=None, lpWindowName=None):
    • 描述:自顶层窗口(也就是桌面)开始搜索条件匹配的窗体,并返回这个窗体的句柄。不搜索子窗口、不区分大小写。找不到就返回0
    • 参数:
      • lpClassName:字符型,是窗体的类名,这个可以在Spy++里找到。
      • lpWindowName:字符型,是窗口名,也就是标题栏上你能看见的那个标题。
    • 说明:这个函数我们仅能用来找主窗口。
  • FindWindowEx(hwndParent=0, hwndChildAfter=0, lpszClass=None, lpszWindow=None);
    • 描述:搜索类名和窗体名匹配的窗体,并返回这个窗体的句柄。不区分大小写,找不到就返回0。
    • 参数:
      • hwndParent:若不为0,则搜索句柄为hwndParent窗体的子窗体。
      • hwndChildAfter:若不为0,则按照z-index的顺序从hwndChildAfter向后开始搜索子窗体,否则从第一个子窗体开始搜索。
      • lpClassName:字符型,是窗体的类名,这个可以在Spy++里找到。
      • lpWindowName:字符型,是窗口名,也就是标题栏上你能看见的那个标题。
    • 说明:找到了主窗口以后就靠它来定位子窗体啦。

对于一个窗口下的多个子窗口,可以通过类名和窗口名进行区分,若有多个子窗口的类名和窗口名相同,则只能从第一个开始迭代查找。当然,如果我们知道子窗口的排列顺序,可以对FindWindowEx函数进行简单的封装,通过索引号查找指定窗口的句柄。

1
2
3
4
5
6
7
8
9
10
11
def  find_idxSubHandle(pHandle, winClass, winName  =  None , index = 0 ): 
     """
     已知子窗口的窗体类名,窗口名
     寻找第index号个同类型的兄弟窗口
     """ 
     assert  type (index)  = =  int  and  index > =  0 
     handle  =  win32gui.FindWindowEx(pHandle,  0 , winClass, winName) 
     while  index >  0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值