Win32gui: Windows图形界面接口模块。主要负责操作窗口切换以及窗口中元素id标签的获取
Win32api: Windows开发接口模块。主要负责模拟键盘和鼠标操作,对win32gui获取的标签进行点击/获取值/修改值等操作
Win32con:全面的库函数,提供Win32gui和Win32api需要的操作参数
hld=win32gui.FindWindow(ClassName,Title)
ClassName:窗口的类名
Title:窗口的标题名称,即左上角的文字描述信息
hld:返回结果为当前窗口的句柄信息,
以下是使用AutoItv3抓取的Windows【另存为】窗口信息:
Handle: 0x001E03A0 #这里就是上面函数返回值
win32gui.SetForegroundWindow(hld)
hld:为上面获取到的窗口句柄信息
主要用于激活该窗口,此时窗口会是最前面一层
在找到窗口句柄后,需要先将窗口设置为最前面一层才能模拟鼠标键盘操作当前窗口上的元素。
win32gui. FindWindowEx(hld,Child, ClassName, Title)
hld:目标窗口的父窗口,也是上面获取到的窗口句柄信息。通过父向下找子
Child:目标窗口的子窗口。通过子向上找父,从而找到目标窗口
ClassName:目标窗口的类名
Title:目标窗口的标题名称,即文字描述信息
以下是使用AutoItv3抓取的Windows【另存为】窗口的【保存】按钮信息:
button=win32gui.GetDlgItem(hld,ID)
hld:目标窗口的父窗口,也是上面获取到的窗口句柄信息。通过父向下找子
ID: 目标窗口ID
上面的例子,使用ID来抓取Windows【另存为】窗口的【保存】按钮信息为:
button=win32gui. GetDlgItem (hld,1)
注:需要确保,多次打开窗口时目标窗口ID是不变的,才能准确获取目标窗口句柄
SendMessage(hWnd, Msg, wParam, lParam)
hWnd:接收消息的窗体句柄
Msg:要发送的消息,这些消息都是windows预先定义好的,可以参见系统定义消息(System-Defined Messages)
wParam:消息的wParam参数
lParam:消息的lParam参数
注:系统定义消息中不同消息分别有相应的参数:wParam和lParam,可查询官网参数详情:
以 WM_KEYDOWN消息 为例:
wParam:虚拟键参数
lParam:重复次数
win32gui.SendMessage(hld,win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
Enter键 重复0次
【另存为】窗口点击【保存】按钮的方法:
1)方法1:发送消息目标à【保存】按钮;动作à点击
win32gui.SendMessage(button,win32con.BM_CLICK) # win32con后面会解释
2)方法2:发送消息目标à整个窗口;动作à按键按下;动作参数àEnter键;前提à窗口聚焦默认在【保存】按钮时
为什么PostMessage成功了SendMessage失败了?
PostMessage(hWnd, Msg, wParam, lParam)
参数和使用方法同SendMessage。
不同的是,PostMessage只将消息放入待执行消息队列,不等待处理和返回,只要放入队列即算执行完毕。而SendMessage需要等待执行处理完后,才继续,返回的是其他程序处理后的返回值。
left,top,right,bottom=win32gui.GetWindowRect(hld)
获取某元素hld位置。left,top分别指与屏幕左上角距离,right,bottom 指长和高。
win32gui.MoveWindow(hld, int X, int Y, int nWidth, int nHeight, BOOL bRepaint )
移动某窗口hld到指定位置。
x,y指与屏幕左上角距离,nWidth, nHeight 指长和高
bRepaint :是否重绘
POS =win32gui. GetCursorPos()
获取当前鼠标点击的窗口元素的坐标
获取包含指定点的窗口句柄,即根据坐标获取元素句柄
以上坐标和鼠标操作应用场景:【另存为】页面修改文件名
以上均定位失败,使用鼠标和坐标位移方法获取文件名输入框的句柄
SendMessage PostMessage GetCursorPos等win32api与win32gui均包含的函数,用法也相同。
keybd_event(bVk, bScan, dwFlags , dwExtraInfo)
bVk:为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab其他键值具体参考如下:

(注意转换16进制)
https://msdn.microsoft.com/en-us/library/dd(v=vs.85).aspx
bScan:为扫描码,一般不用设置,用0代替就行
dwFlags:为选项标志,如果为keydown则置0即可,如果为keyup则设成”KEYEVENTF_KEYUP”
dwExtraInfo:点击键关联的附加数据,一般置0即可
win32api.keybd_event(18,0,0,0) #按下ALT键,按下后不会弹起
win32api.keybd_event(18,0, win32con.KEYEVENTF_KEYUP,0) #手动点上键结束点击
win32api.SetCursorPos(x,y)
将光标移到屏幕坐标(x,y)处
win32api.RegOpenKey(hKey,ipSubKey,phkResult)
打开给定键,一般是打开一个现有的注册表项
hKey :要打开键的句柄,即注册表最外层名称
lpSubKey:要打开的项名,即项具体路径名称
phkResult:指定一个变量,用于装载(保存)打开注册表项的一个句柄
打开endpoint注册表:
endpoint_key=win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE,‘SOFTWAREIxia CommunicationsEndpoint’,0, win32con.KEY_READ) #最后一个参数指权限为读
win32api.RegQueryValueEx(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData)
检索一个已打开的注册表句柄中,指定的注册表键的类型和设置值。
如图最终根据键值名字’ Installation Directory’得到返回值 ‘C:Program FilesIxiaEndpoint’
RegCloseKey(hKey)
不使用时,关闭注册表。
win32api.RegCloseKey(endpoint_key)
Win32con函数一般作为win32gui win32api的参数调用。其参数命名可以这样理解:Obj_Opt
WM_COMMAND
win32api.SendMessage(hld, win32con.WM_COMMAND, (9<<16)+ctrl_id, vHandle)
发送命令(9<<16)+ctrl_id 给窗口hld,命令要操作的窗口对象是vHandle
WM_XXXXXX:Window Message即窗口消息对应的操作

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/202972.html