MiniSpy:窗口属性查看工具

在开发过程中,经常需要查看和跟踪窗口消息,但是传统的查找工具往往界面静态,操作繁琐。为了解决这个问题,设计了MiniSpy,这是一个窗口属性查看工具,它提供了一种更为直观和动态的方式来查看窗口的属性。

MiniSpy的特点包括:

  • 所有属性在一个面板中显示
  • 拖动时动态更新
  • 为标准窗口和常见控件显示特定的控制样式
  • 提供过滤下拉菜单,以便查看基于标准控件类的自定义窗口类样式
  • 提供“刷新”按钮,用于更新当前窗口的属性
  • 提供工具提示,用于查看长行信息

在2.0版本中,MiniSpy增加了以下新特性:

  • “锁定更新”按钮/快捷键,防止在移动MiniSpy时更新选中的窗口
  • 导航到父窗口、第一个子窗口、下一个/上一个窗口的按钮/快捷键(这些按钮会自动锁定更新,防止新窗口立即被覆盖)
  • 垂直工具栏,使所有按钮都可见
  • 手动实现RealWindowFromPoint(),用于win95(见下面的1.2版本修复)
  • 添加了tooltips_class32的控制样式

在1.2版本中,MiniSpy修复了以下问题:

  • 添加了缺失的菜单(#32768)、桌面(#32769)、图标标题(#32772)、tooltips_class32、任务切换器(#32771)类名到过滤组合框中
  • 显示窗口响应WM_NCHITTEST消息时返回的'hittest'结果
  • 正确选择包含在组合框中的窗口。感谢Philippe Lhoste (PhiLho@GMX.net)的贡献

在1.1版本中,MiniSpy增加了以下新特性:

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

1.11版本修复了以下问题:

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

关于源代码的一些评论

所有使用的类、窗口、窗口Ex和控件样式都位于styles.h中。如果遗漏了任何样式,欢迎添加到版本中,并通过邮件发送给以供添加。

决定让MiniSpy始终处于顶部,因为觉得这样最有用。但是当在列表控件中打开工具提示时,它们出现在MiniSpy窗口后面!由于工具提示对于样式行非常有用,想到了一个有趣的解决方法:处理WM_ACTIVATEAPP,当MiniSpy不是活动窗口时使其处于最顶层,当它是活动窗口时使其不是最顶层。

为了检索窗口及其父窗口的标题,使用了WM_GETTEXT而不是GetWindowText。这是因为在某些情况下,GetWindowText似乎对某些窗口不起作用。

代码示例

以下是一些MiniSpy中使用的代码示例:

// 手动实现RealWindowFromPoint(),用于win95 if (GetVersion() & 0x80000000) { // Windows 95 typedef HWND (WINAPI *RealWindowFromPointType)(POINT); HMODULE hUser32 = LoadLibrary("user32.dll"); RealWindowFromPointType RealWindowFromPoint = (RealWindowFromPointType)GetProcAddress(hUser32, "RealWindowFromPoint"); if (RealWindowFromPoint) { POINT pt; GetCursorPos(&pt); return RealWindowFromPoint(pt); } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485