我正在使用 python ctypes 来控制点击窗口和菜单,但遇到了一个问题,我可以单击窗口中的按钮并且窗口内容发生变化,但我找不到检测这种变化的方法。
我使用 WinSpy 查看是否有任何变化,并注意到 ClassNN 值从 #327701 增加到 #327703。
使用 Windows API,我将如何从窗口获取此信息?
编辑:我尝试了以下代码,但我发现的信息尚无定论。例如,ClassName 返回 '??stBox' 或 '??2770' 甚至 '????\x01'。
def get_window_class_information(handle, class_name):
WNDPROC = ctypes.WINFUNCTYPE(ctypes.c_long, ctypes.c_long, ctypes.c_long, ctypes.c_long, ctypes.c_long)
class WNDCLASSEXW(ctypes.Structure):
""" https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowinfo """
_fields_ = [('Size', ctypes.c_ulong),
('Style', ctypes.c_ulong),
('Procedure', WNDPROC),
('ClassExtra', ctypes.c_long),
('WindowExtra', ctypes.c_long),
('Instance', ctypes.c_void_p),
('Icon', ctypes.c_void_p),
('Cursor', ctypes.c_void_p),
('Background', ctypes.c_void_p),
('MenuName', ctypes.c_wchar_p),
('ClassName', ctypes.c_wchar_p),
('IconSmall', ctypes.c_void_p)]
def __init__(self):
self.Size = ctypes.sizeof(self)
super().__init__()
window_class = WNDCLASSEXW()
user32.GetClassInfoExW(handle, class_name, ctypes.byref(window_class))
return window_class
看起来您正在寻找GetClassName,
检索指定窗口所属的类的名称。
注意:您需要先获取窗口 hwnd。
更新:
经过测试,我发现普通win32 windows的类名重绘后不会改变。所以仅仅依靠类名是不够的。您可能需要使用钩子来检测窗口的绘图 api。详情请参考@valdo 回答。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句