当 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_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;
}
有人可以帮我解决这个问题吗?如果在 window 中更改像素时没有运行具体事件,是否有我可以对其执行 switch-case 表达式的事件列表?
没有消息通知客户端像素颜色的变化。这也不会真正有用:客户负责绘制到 window 的(客户)区域。如果他们需要知道像素何时改变颜色,它可以自行监控状态。
如果您需要在外部进程中监控像素颜色的变化,系统将无法帮助您。您将挂钩所有可能会改变像素颜色的 API 调用,并保留状态信息以确定状态的变化。
我正在尝试使用 SetWindowsHookEx
在 window 中的像素发生变化时执行操作。我可以成功收到 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;
}
有人可以帮我解决这个问题吗?如果在 window 中更改像素时没有运行具体事件,是否有我可以对其执行 switch-case 表达式的事件列表?
没有消息通知客户端像素颜色的变化。这也不会真正有用:客户负责绘制到 window 的(客户)区域。如果他们需要知道像素何时改变颜色,它可以自行监控状态。
如果您需要在外部进程中监控像素颜色的变化,系统将无法帮助您。您将挂钩所有可能会改变像素颜色的 API 调用,并保留状态信息以确定状态的变化。