如何检测 MS 窗口何时更改用户看到的内容?

科迪·德盖托

我正在使用 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章