就这样,这个广告也被我征服了。其实最困扰我的是第三种广告——qq号为10000的广告。我之所以把它称为“qq号为10000的广告”,就是因为我的“过滤器”就是“10000”。这种广告和“用户????????将你列入好友名单”的系统信息是一样的,所以一不小心就会将重要的信息过滤掉。于是我选中了“10000”作为我的过滤器。
起先我从对话框的外观上判断,写有用户qq号的控件是一个只读(es_readonly)的编辑框(edit),后来我如法炮制代码并编译运行,发现无效!于是“qq反骚扰”的版本号定为1.svof.02,共能消除两种的qq广告。于是我似乎消沉了。不过偶然的一天,在我使用exescope研究另一个软件的时候,我才突然想出了用exescope这位专家来研究一下qq的主程序的办法,然而能否成功,我心里没底。
我打开qq的主程序,找到那个对话框,发现有很多的static(静态文本,delphi及c++ builder中的label)!我的天,我怎么没有想到那是改变了风格的static呢?于是乎三下五除二,我的最后一段代码也问世了:
hwnd hwndyw, hbtnclose3, hedit;
hwndyw = findwindow( null,"系统消息" );
if ( hwndyw != null )
{
hbtnclose3 = findwindowex( hwndyw, null, "button", "返回" );
hedit = findwindowex( hwndyw, null, "static", "10000" );
if ( hedit != null && hbtnclose3 != null )
sendmessage( hbtnclose3, bm_click, 0, 0 );
}
你可以看到,在我的代码中,标识那个static的句柄依然叫hedit,那是因为我先前的判断失误。
“qq反骚扰”v1.svof.12的核心代码就讲到这里了,不过还有一点,就是我的“qq反骚扰”中存在着一个不大不小的bug。大家注意到了吗?第三段代码中,如果碰到标题是10000的静态文本,就向“返回”按钮发送单击消息。这也就意味着如果一个昵称是10000的网友加你为好友,那么他的这条系统信息同样有可能被过滤掉。解决的办法是判断“加为好友”按钮的风格是否为可见(ws_visible),若为不可见,则可以向“返回”按钮发送单击消息了。但是由于我个人时间的问题,这段代码还没有来得及实现,就交给大家了,呵呵。
后记:和“反骚扰”说再见
“qq反骚扰”是我的vc sdk处女作,我从去年10月份开始写这个软件,之后又经历了很多次升级,到这个“最终版本”——v1.37为止,我终于决定停手了。
原因很简单,qq的版本不断升级,广告的花样也越来越多,这就决定了我不得不一次次地升级这个软件。而现在网上关于“反骚扰”的技巧又有很多,所以我觉得我这么做就有点多此一举了。既然我的目的——学习——达到了,那么再“升级”下去也就失去意义了。
我仍然感谢很多网友,感谢他们对我的信任和对我的关心。我无以回报,决定将这个处女作的源代码倾囊相授,而不再是“核心代码演示版”。是前我的代码是用c++写成的,主要包括了我封装的checkbox类,现在看来那个类十分丑陋,唯恐给诸位带来误导的副作用,于是我花了一些时间,将它用纯c重写了一遍,希望能够满足和我一样的初学者的需要。顺便说一句,这个v1.37几乎对qq2003无能为力。还有,visual studio中自带的工具spy++比我的“对话框查看器”功能要强得多。
ok,那么再见了,我的“qq反骚扰”。
发表评论