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

高级类探测器

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.48/5 (8投票s)

2004年10月19日

3分钟阅读

viewsIcon

68462

downloadIcon

1008

一个探测窗口类,并枚举所有已加载模块的程序

目录

  1. 介绍
  2. 类探测器
  3. 使用方法 / 帮助
  4. 工作原理
  5. 免责声明

引言

在Windows平台中,每个窗口都是已注册类的一个实例。控件的类存储控件的某些属性,并定义Windows操作系统处理它们的某些标准。

WNDCLASSEX structure:

 
typedef struct _WNDCLASSEX {
    UINT       cbSize; 
    UINT       style;
    WNDPROC    lpfnWndProc;
    int        cbClsExtra; 
    int        cbWndExtra; 
    HINSTANCE  hInstance;  
    HICON      hIcon;      
    HCURSOR    hCursor;    
    HBRUSH     hbrBackground;  
    LPCTSTR    lpszMenuName;  
    LPCTSTR    lpszClassName; 
    HICON      hIconSm;      
} WNDCLASSEX, *PWNDCLASSEX;

类结构存储指向窗口过程的指针、绘制背景的画笔、窗口显示的图标、光标等等……

在Windows平台中,每个控件都是从一个已注册的类派生的,并且类名将它们区分开。内置的Windows控件具有不同的类名,但可以通过宏提供给开发者。

例如:WC_TABCONTROL,它被定义为

#define WC_TABCONTROLA          "SysTabControl32"
#define WC_TABCONTROLW          L"SysTabControl32"

#ifdef UNICODE
#define  WC_TABCONTROL          WC_TABCONTROLW
#else
#define  WC_TABCONTROL          WC_TABCONTROLA
#endif

这确保了避免对类名的依赖。

有时,Windows控件对于特定目的来说是不够的。为此,Windows编程提供了标准Windows控件的“子类化”和“超类化”方法。

但这只提供了非常有限的自定义范围,并且通常以降低性能为代价。 这也为程序引入了新的无法追踪的错误。在实际应用中,100%的自定义控件在设计上提供了更大的灵活性、自定义范围和良好的性能。

类探测器

类探测器是一个用于监视控件类的实用工具。使用它可以检查新控件的注册类名、窗口句柄、线程 ID,并枚举显示控件的进程的所有已加载进程。

使用它可以检查控件是自定义控件还是从标准Windows控件派生的控件。现在你可以窥探一些共享软件,找到表象下的垃圾。是的,大多数容易崩溃的程序都是基于对标准Windows控件的大规模子类化构建的。这有时会导致内存泄漏和不必要的内存加载以及处理器时间浪费。

这也提供了更多关于某些共享软件的知识,这些共享软件显然会加载有时位于System32目录和其他目录中的模块。这为我提供了更多的知识来化解恶意的不请自来的隐形安装(共享软件/免费软件附带的病毒)。

使用方法 / 帮助

高级类探测器提供有关窗口句柄(如果句柄不可用,则显示线程 ID)、启动此窗口的进程、最大内存和当前内存使用情况的信息,并列出进程加载的所有模块。您可以右键单击窗口以停止钩子。然后您可以双击模块名称以查看其属性页。

它是如何工作的!

它使用鼠标钩子来监视所有鼠标消息。事实上,使用鼠标钩子,所有鼠标事件都会通过钩子过程路由。它为所有正在运行的线程安装全局鼠标钩子。为此,它要求钩子过程位于 DLL 中。 Hook.dll 具有钩子过程。它用 Win32 ASM (MASM) 编写,因此它可以工作,并且加载的模块大小保持在最小。DLL 的小尺寸是一项要求,因为每个过程都会加载钩子 dll,当被鼠标钩子探测时。(Windows 98 甚至 windows 2000 我认为在探测的进程终止之前都不会卸载钩子 dll。)

我的 Hook 想法来自 Icezelion MASM32 教程。

免责声明

此代码和可执行文件并不声称是完美的和没有错误的。它也不提供任何保证,甚至不提供任何适用于任何用途(包括“适销性”)的隐含保证。

如果写作中有任何错误,敬请谅解

我目前正在寻找一些人加入我的开源项目。 如果有人想贡献,非常欢迎。 我的项目不是个人的,欢迎大家... 我正在开发一个用于 C/C++ 的多平台 IDE,它有自己的类库、API 和类,使用纯 C/C++。

请访问:http://thunder.sourceforge.net/了解详情

© . All rights reserved.