65.9K
CodeProject 正在变化。 阅读更多。
Home

MiniSpy

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (24投票s)

2002年1月13日

3分钟阅读

viewsIcon

260844

downloadIcon

7005

一个动态窗口属性查看器,用来代替 Spy++

Sample Image - MiniSpy.jpg

引言

(版本 2.0)

我经常使用 Spy++ 来追踪窗口消息,但很少用它来查看窗口的属性。

当我使用它时,我发现查找工具非常笨拙,因为它提供了一个静态界面,而我认为这是一个更加动态的活动。

因此,我决定看看是否可以设计一个替代界面,让我能够以最少的麻烦查看窗口的属性。

结果就是 MiniSpy。

它没有什么特别之处,但它确实提供了以下功能

  • 所有属性在一个窗格中可见
  • 当你拖动它时,动态更新
  • 为所有标准窗口和通用控件分别显示控件特定的样式,而不是标准窗口样式。
  • 提供一个过滤器下拉列表,这样,如果你注册了自己的窗口类,并且它基于标准控件类,你可以手动选择基本窗口类来查看控件样式
  • '刷新'按钮,用于刷新当前窗口的属性
  • 提供工具提示以查看长行

历史

新功能 (2.0)

  • '锁定更新'按钮/快捷方式,以防止在移动 MiniSpy 时更新所选窗口。
  • 用于导航到父窗口、第一个子窗口、下一个/上一个窗口的按钮/快捷方式(注意:这些按钮将自动锁定更新,以防止新窗口立即被覆盖)。
  • 垂直工具栏,以便所有按钮都可见。
  • 手动实现 RealWindowFromPoint(),用于 win95 (参见下面的错误修复 (1.2))。
  • 添加了 tooltips_class32 的控件样式。

错误修复 (2.0)

  • 缺少菜单 (#32768)、桌面 (#32769)、图标标题 (#32772)、tooltips_class32、任务切换器 (#32771) 类名已添加到过滤器组合框。

新功能 (1.2)

  • 显示窗口响应 WM_NCHITTEST 消息返回的“命中测试”结果

错误修复 (1.2)

  • 正确选择组框包含的窗口。感谢 Philippe Lhoste (PhiLho@GMX.net)

    以前,MiniSpy 使用方法 ::WindowFromPoint() 来选择窗口。但是,正如 Philippe 指出的那样,这并不总是适用于组框内的控件,特别是当控件在 z 顺序中位于组框后面时。

    为了解决这个问题,我扩展了窗口选择,在完成初始选择后,也使用 ::RealChildWindowFromPoint()。此函数的文档有效地说明它会忽略对 WM_NCHITTEST 消息返回 HTTRANSPARENT 的窗口,而组框就是这样做的。

    这解决了问题,但嵌套组框除外,因为 ::RealChildWindowFromPoint 也会忽略它们,因为它们也返回 HTTRANSPARENT

    文档还表明 Windows 95 不支持 ::RealChildWindowFromPoint(),这就是我动态链接它的原因。

新功能 (1.1)

  • 可以使用它的任何一个角来选择窗口
  • 显示窗口属性(通过 EnumPropsEx
  • 包括 richedit ES_ 样式
  • 包括 richedit ENM_ 样式
  • 包括工具栏和状态栏的通用控件 CCS_ 样式
  • 提供“恢复大小”按钮以返回到启动大小

错误修复 (1.11)

  • 在使用 EnumPropsEx() 枚举属性时,在 XP 下崩溃。感谢 limax (limax@hot.ee)。

关于源代码的一些评论

  • 所有使用的类、窗口、windowEx 和控件样式都位于 *styles.h* 中。如果我遗漏了任何内容,请随时将它们添加到您的版本中,并通过邮件发送给我进行添加
  • 我决定让 MiniSpy“始终位于顶部”,因为我发现它在这种模式下最有用,但是当我在列表控件中打开工具提示时,这些工具提示会出现在 MiniSpy 窗口后面!由于工具提示对于样式行来说是一个非常有用的功能,我想出了一个有趣的解决方法:我处理 WM_ACTIVATEAPP,并在 MiniSpy 不是活动窗口时使其“位于顶部”,而在它是活动窗口时使其“不位于顶部”。
  • 为了检索窗口及其父窗口的窗口标题,我使用了 WM_GETTEXT 而不是 GetWindowText。这仅仅是因为,由于某种原因,在这种情况下,GetWindowText 对于某些窗口似乎不起作用。
© . All rights reserved.