1

当窗口中的像素发生变化时,我正在尝试使用SetWindowsHookEx. 我可以成功接收 Windows 消息,但是在没有屏幕更新发生时调用了大多数消息,并且在一个像素上多次调用了一些消息。

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

我尝试听WM_PAINT, WM_NCPAINT, 和WM_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;
    }

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

4

1 回答 1

2

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

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

于 2021-09-11T13:26:28.483 回答