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")

使用位移方法本身不穩定,可先設置主窗口大小,盡量減少不確定因素。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM