【问题标题】:What is an alternative to using GetWindow in a loop?在循环中使用 GetWindow 的替代方法是什么?
【发布时间】:2012-10-20 20:05:08
【问题描述】:

MSDN 提到了GetWindow() 函数的以下注释。

EnumChildWindows 函数比调用GetWindow 更可靠 在一个循环中。调用GetWindow 执行此任务的应用程序 有陷入无限循环或引用句柄的风险 已被破坏的窗口。

当只对列出所有窗口感兴趣时,使用EnumChildWindows 效果很好。但是,如果您需要 GetWindow 提供的附加 z 顺序功能怎么办?我无法使用EnumChildWindows 找到按 z 顺序排序的所有窗口。

这是否意味着没有“安全”的方法可以做到这一点?

【问题讨论】:

  • 查看这个已接受的答案 - stackoverflow.com/a/825619/59303
  • @ChrisF GetNextWindowGetWindow 的宏。
  • 确实如此。我应该点击进入 MSDN 页面。

标签: windows winapi z-order


【解决方案1】:

如果您需要 Z 顺序,我会使用 GetWindow(),但要注意注意事项。

如果您多次看到一个窗口,请停止。当随后通过句柄引用返回的窗口时,请做好失败的准备。

【讨论】:

  • 以及如何“为失败做好准备”?检查窗口是否没有先被销毁?
  • 当然,这会起作用 - 例如,尝试 GetParent() 以确保它是真实的。这取决于实际情况。如果该窗口上的下一个 API 调用在同一段代码中,那么您可能只想在错误处理中处理它,无论该调用是什么。如果您正在处理的窗口不是非常动态的(可能会被破坏或 Z 重新排序,您可以忽略警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多