上篇讲了,如何使用“
城通网盘批量下载器 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
|