设为首页 加入收藏

TOP

win32gui 定位windows另存为输入框异常及处理
2017-10-09 17:34:04 】 浏览:2768
Tags: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")

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

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇%pylab ipython 中文 下一篇CRT自动创建session

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目