win32gui 定位windows另存为输入框异常及处理

使用win32定位Windows 应用程序时,需要自动保存报告,win32gui.FindWindowEx()无法定位到名称输入框。

注:使用python语言

问题描述如下:

代码:

save_w_hld=win32gui.FindWindow(u'#32770',u"另存为")
win32gui.SetForegroundWindow(save_w_hld)
save_name_edit=win32gui.FindWindowEx(save_w_hld,None,u'Edit',None)
print save_name_edit

结果:

为0,即没有找到classname为'Edit'的句柄

分析:

【另存为】窗口属于Windows自带窗口,我尝试了其他种方法。

如:1. GetDlgItem通过ID获取输入框句柄,此窗口ID为1001的句柄不唯一。行不通  

  2. 由于点击另存为之后,光标默认是在命名输入框的,此时如果直接使用SendMessage写入新的名称abc,句柄填save_w_hld,发现文件命名没有改,而是'另存为'弹框变成了'abc'。也行不通

 

问题解决方案:

通过主窗口坐标,按照位移将鼠标移动到命名框,使用GetCursorPos获取点位,再通过WindowFromPoint得到鼠标所点的句柄。

 
  

hld=win32gui.FindWindow(u'#32770',u"另存为")

win32gui.SetForegroundWindow(hld)

#为保证每次打开时目标框所在屏幕坐标不变,在这里将另存为窗口坐标和大小写死。此时文件名输入框坐标就固定为(200,355)

win32gui.MoveWindow(hld,0,0,798,537,False)

edit=win32gui.WindowFromPoint((200,355))

win32api.SendMessage(edit,win32con.WM_SETTEXT,None,"abc")

使用位移方法本身不稳定,可先设置主窗口大小,尽量减少不确定因素。

 

转载于:https://www.cnblogs.com/jiyirain/p/6526804.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值