本人通过spy++已经找到了某客户端保存文件时调起的保存窗口的标题和类名,但是用python去调win32gui.FindWindow方法时一直报pywintypes.error: (1400, 'GetClientRect', '无效的窗口句柄。'),导致无法识别到窗体,无法进行自动化操作,请问这可能是什么原因呢?
以下是本人代码:
import pyperclip
import pyautogui
import win32con
import win32gui
import os
win = win32gui.FindWindow('OPContainerClass',u'Output Painter Window')
# win = win32gui.FindWindow('WeChatMainWndForPC',u'微信')
#窗口返回值是十进制,如果要跟spy++核对,最好转换成16进制
left,top,right,bottom=win32gui.GetClientRect(win)
win32gui.SetForegroundWindow(win)
win32gui.ShowWindow(win, win32con.SW_MAXIMIZE)
handle=win32gui.FindWindowEx(win,None,'Edit',None)
print(left,top,right,bottom)
Traceback (most recent call last):
File "D:/Working/三一重工/自动化/北京物流平台/win.py", line 29, in <module>
left,top,right,bottom=win32gui.GetClientRect(win)
pywintypes.error: (1400, 'GetClientRect', '无效的窗口句柄。')
我尝试将向日葵和微信窗体的标题和类名放到代码中识别,都是可以正常识别和运行的,但是换这个客户端就不行,请高人指点一二,感激不尽!!
首先检查窗口类名及标题是否正确,其次,窗体应该打开后运行脚本去识别和输出窗口位置信息。
在我的尝试中,虽然不明白具体原因但是对于一些软件窗口似乎需要找到其最终的父窗口才行例如对雷电模拟器进行操作
其中下面两个在突出显示时都会显示雷电的窗口,但是用其类名会产生和你相同的 报错,而使用spy也只会搜索到这两个窗口。所以需要返回寻找其父窗口才可以正常运行。在此处其最上边的窗口类名不会产生报错
# FindWindow(lpClassName=None, lpWindowName=None) 窗口类名 窗口标题名
hwnd = win32gui.FindWindow(None, wdname)