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



当使用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表达式?

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

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

最新更新