当 window 中的任何像素发生变化时,是否有 Windows 消息?

Is there a Windows Message for when any pixel in the window changes?

我正在尝试使用 SetWindowsHookEx 在 window 中的像素发生变化时执行操作。我可以成功收到 Windows 条消息,但大多数消息在没有屏幕更新时被调用,有些消息在一个像素上被调用不止一次。

// WH_GETMESSAGE doesn't call the callback for some reason...
SetWindowsHookEx(WH_CALLWNDPROC, hhookSysMsg, hinstDLL, GetWindowThreadProcessId(hwnd, NULL));

我尝试监听 WM_PAINTWM_NCPAINTWM_ERASEBKGND,但由于某些原因,它们不会每次都触发 - 例如,在记事本中,它不会触发当滚动条颜色改变时(例如,当光标悬停在滚动条上时)或改变文本本身。

switch (msg->message)
    {
    // doesn't catch all screen updates!
    case WM_PAINT:
    case WM_NCPAINT:
    case WM_ERASEBKGND:
        // Bit-blit the screen to a file/process the screen/etc.
        ...
    default:
        break;
    }

有人可以帮我解决这个问题吗?如果在 window 中更改像素时没有运行具体事件,是否有我可以对其执行 switch-case 表达式的事件列表?

没有消息通知客户端像素颜色的变化。这也不会真正有用:客户负责绘制到 window 的(客户)区域。如果他们需要知道像素何时改变颜色,它可以自行监控状态。

如果您需要在外部进程中监控像素颜色的变化,系统将无法帮助您。您将挂钩所有可能会改变像素颜色的 API 调用,并保留状态信息以确定状态的变化。