[原创]子类应用---保护你的密码框
<P>VB的密码框是很脆弱的,如果操作系统是WIN98时更是如此,一行代码就可以得到星号下的密码.
怎么办?
还好,我们有子类技术!
以下是我写的一个简单例子,使用子类过程把取得密码的消息给过滤了.
其中也包含一个用ASM编写的星号查看器,很好用的哦!!(均有源码)</P>
<P>
</P> <P>好东西就别让它沉了 </P><P>支持!</P> 建议学习一下子类技术,相当有用的 建议学习一下子类技术,相当有用的 <P>但我还是不怎么懂这个字类的含义</P><P>马哥多说点以后让我好好学学</P> <P>每个控件,窗体等,其实都有一个背后的程序负责处理一些标准的事件,如最大化,最小化,关闭等.</P><P>而在VB里,这这个过程被封装了,我们看不到的.</P><P>使用自己定义的过程去代替这个VB默认的过程,就称为子类处理.</P><P>比如,你可以用子类过程代替你的窗体原处理过程,把最大化按钮变成关闭,把最小化按钮变最大化,哈哈.</P> <P>理解拉 哈哈</P> 加油加油,支持in ...........大家多多学习类与子类哦~~~ 呵呵 学习中 ................ 好啊,先做做这个"EXE捆绑机"吧,呵呵. <P>看了马哥关于这个和滚轮的例子,有点明白了!</P><P>其实呢,字类的处理就是通过对windows的消息进行一些处理,而实现我们想达到的效果!! </P><P>其实任何的程序都是这样,系统有n多消息,只要把我们想要的进行个性处理,就会得到想要的效果拉!!</P><P>所以理解了系统的消息机制才是关键··</P><P>呵呵不知道自己理解的对不对 ,大家再帮俺这个小菜菜解释解释哈!!!</P> <P>差不多是这样.</P><P>因为VB对我们的封装太严了,所以搞得VB程序员很多都不知道还有WndProc这个过程.</P><P>其实在窗体,按钮,以及任何的控件里,都有这样一个过程,负责处理控件的各种消息,比如,窗体的最大化,最小化,创建与关闭等.</P><P>而子类方式,就是用我们自己的过程来处理这些消息中的一部分.</P> <P>猫````看不懂~!</P><P></P> <P>我想到了钩子 !!</P> <P>那个功能就需要HOOKAPI了,VB很难做到,效果也不尽人意.</P><P>一般这种程序是用C一类语言写的</P> 马兄:您好!看了您的大作后,有两个疑问:
1、您的这个精品,是否是用来实现屏蔽、不屏蔽"取得文本(WM_GETTEXT)"这个消息的?即:当处于“子类处理状态”时,在 Text1 中输入的字符,不可以在 Text2 中将 Text1 中输入字符显示出来?而处于“正常状态”时,在 Text1 中输入字符时,在 Text2 中将 Text1 中输入字符显示出来?
如果是这样的话,为什么当处于“正常状态”或“子类处理状态”时,在 Text1 中输入的字符,均在 Text2 中将 Text1 中输入字符显示出来?我的环境是win-xp + office 2003
2、WM_GETTEXT 这个消息,是在什么时候发出来的?我在您的代码中,加了一句代码 MsgBox "已截获到 WM_GETTEXT 消息,准备屏蔽这个消息!" ,无论是处于“正常状态”或“子类处理状态”时,在 Text1 中输入的字符,均不见出来这个消息对话框的?换然之,在运行您的精品过程,无论是处于“正常状态”或“子类处理状态”时,根本没有 WM_GETTEXT 这个消息 ,从而也从对这个消息进行屏蔽了。
Public Function SubWndProc(ByVal Hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case MSG '在这里进行过滤.如果知道其他的消息,也可以在这里过滤.
Case WM_GETTEXT '因为"取得文本"都是发的这个消息,所以嘛.....
MsgBox "已截获到 WM_GETTEXT 消息,准备屏蔽这个消息!"
Exit Function '一旦发现从程序外部发来的这个消息,就什么也不做,直接返回!!
End Select
' MsgBox "没有截获到 WM_GETTEXT 消息!"
SubWndProc = CallWindowProc(PrevWndProc, Hwnd, MSG, wParam, lParam) '其它消息不管
End Function
以上两点疑惑,请马兄在百忙中抽空详细解答,谢谢!
[此贴子已经被作者于2005-11-4 17:10:37编辑过] "精品"不敢当.......
其实WM_GETTEXT消息一般并不需要在本程序内使用,从字面上就可以看出,它的功能是"取得文本".
而自己的程序里可以直接用属性嘛~~~
此消息一般是用于得到非本身程序内控件的文本,比如别人密码框里的密码....:)
由于它有这样的功能,所以我就在指定文本框的默认消息处理过程(WndProc)之前,插入一段我自己的消息处理程序,用于处理这个WM_GETTEXT消息,并把它过滤掉.
这样,无论是谁发了这个消息给文本框,我的过程都在它到达默认消息处理过程前把这个消息吃了.....那么此消息就无法达到它的目的了.(默认的处理程序里,应该是一收到这个消息,就把文本内容返回到发消息者那里去.-------不过我也是猜的)
因此,当插入了我的消息处理过程后,看星星一类软件就无效了.
不知道你注意包里的另一个用ASM写成的星号查看器没?当文本框在普通状态时,用它就可以看到星号的内容,而在子类处理状态时,就无效了------------当然,你也可以试一下其它的星号查看器:)
如果你还不是很理解,建议你去了解一下WINDOWS系统里的消息机制,还有就是一个控件工作的过程. 谢谢马兄的详细地解答!“WM_GETTEXT消息一般并不需要在本程序内使用,从字面上就可以看出,它的功能是"取得文本"。此消息一般是用于得到非本身程序内控件的文本,比如别人密码框里的密码”,经您这么一说,我就明白了。
我对这项技术很感兴趣!我如何才能找到详尽的WINDOWS系统里的消息机制有关资料呢?
另外,请马兄能将“用子类过程代替你的窗体原处理过程,把最大化按钮变成关闭,把最小化按钮变最大化”作个示例,以便我们这些菜鸟加深对这方面的理解,谢谢!
[此贴子已经被作者于2005-11-5 12:33:49编辑过] 如果只是想下载代码,请直接使用游客账号就行了~~~~ VC我不太懂,不过如果无法使用子类,在VB的里原因大约就是没有句柄,也就是说,它是一个轻量控件.
而VC中Static控件是否也是这样呢?你看看它有没有句柄吧. 这个我帮不了你了...我也不会那个编辑器 我想,你用这个方法来拦截关闭消息可能不行的吧?
我也没有试过,不太好说
不过我建议你去看看WINDOWS消息机制相关的资料,应该可以找到针对"关闭消息"的应对办法吧. 跨进程子类化是很麻烦.......我也在想办法中
页:
[1]