【问题标题】:reading a pixel from an overlapped window (windows xp)从重叠窗口中读取一个像素(windows xp)
【发布时间】:2011-04-14 11:07:50
【问题描述】:

Vista 和 Win7 使用 DWM,因此,我可以从任何顶级窗口读取任何像素,没有问题。 然而,在 XP 中,如果窗口被重叠(被另一个顶级窗口),bye bye - 无法读取任何内容。

所以,选项是 - 使用 WM_PRINT,这有点糟糕,因为我需要每 100 毫秒左右刮屏幕 10 个窗口 - 不酷。

除了 GetPixel 之外,还有其他读取像素的方法,或者其他解决方法吗?

最好, 约翰

【问题讨论】:

  • 我假设您实际上是指 layered 窗口(具有WS_EX_LAYERED 扩展样式的窗口)?您可以在所有版本的 Windows 上正常读取重叠窗口(具有WS_OVERLAPPED 样式的窗口)的像素。
  • 我的意思是,一个顶层窗口至少有一部分与另一个顶层窗口重叠。在这种情况下,您无法从中读取像素(使用 GetPixel)。
  • 啊,不。该像素实际上并不存在于屏幕上。 WM_PRINT 是唯一的解决方法——只有那个窗口知道它应该在那里绘制什么颜色。为什么需要每 100 毫秒轮询特定像素的颜色?
  • 对于speak-poker.com 基本上我需要知道每个扑克桌上是否显示按钮 - 唯一的方法是通过屏幕抓取。

标签: winapi windows-xp


【解决方案1】:

您正在尝试支持十个旧操作系统。摩尔定律从此解决了内存问题。如果你真的想要支持它,那么你必须以不同的方式来做这件事。不完全是一个坏主意,Aero 是可选的,可能会关闭。

【讨论】:

  • 嗯,是的,我认为即使您完全放弃了对 Win XP 的支持,这个问题也值得以不同的方式解决。很多人禁用 Aero,这仍然是受支持的配置。
  • 基本上我想看看是否有一个相当简单的方法来做到这一点。如果没有,我可能完全不支持 WinXP。
  • @cody : 你是在告诉我在 Vista/7 上如果 Aero 掉线了,那么如果窗口重叠,我就无法访问像素?
  • @John:是的。正如您的问题正确指出的那样,允许您在 Vista/7 上执行此操作的是 DWM。当您禁用 Aero 主题并恢复为 Classic 主题时,DWM 将被禁用。当然,听起来这可能只是供您个人使用的一次性项目。如果是这种情况,您可以做出一些商业产品无法做出的让步。就我个人而言,我是在关闭 Aero 主题的情况下运行的,而且我认识很多其他技术人员。但是,如果您喜欢 Aero 并拥有它,那么没有理由为在个人应用程序中支持 Classic 而烦恼。与放弃 XP 支持相同。
  • @cody:不供个人使用。关于 Aero:知道了,谢谢!
猜你喜欢
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 2012-01-31
  • 2015-02-21
相关资源
最近更新 更多