“QQ反騷擾”開發(fā)手記
呆在家中上網(wǎng)聊天實(shí)在不是一件愜意的事:每一天打開QQ,迎接我的都是一串一串的廣告……國慶黃金周,連廣告也不放過?。海?
無奈,打開Visual C++,開始了我的“反騷擾”之路。
首先我面對的問題是:QQ一共有幾種廣告,我能用什么方法消滅它們?
前半個(gè)問題很好回答,相信所有常Q的朋友都知道。QQ的廣告有三種:第一種是在系統(tǒng)消息中的彈出式Flash廣告,第二種是直接彈出的Flash廣告(窗體非?;ㄉ冢?,第三種是以系統(tǒng)廣播形式出現(xiàn)的文字式廣告。
對于后半個(gè)問題,我給出的答案是:在廣告對應(yīng)的窗體上,都有相應(yīng)的按鈕可以將其關(guān)閉,點(diǎn)擊即可。
不是吧,就這么簡單?也許你要這么問。
是的,不過我是說,讓我的“QQ反騷擾”幫助我點(diǎn)擊這些按鈕。即在取得這些按鈕的句柄后,向該按鈕發(fā)送一個(gè)單擊消息,如下代碼所示:
SendMessage( hButton, BM_CLICK, 0, 0 );
也許會(huì)有朋友問,為什么不直接將對話框消滅掉,即:
EndDialog( hDialog, TRUE );
問得好!具體原因是……呵呵,我也不知道:)但我能告訴你的是,你可以將我的代碼換成上面那一句,效果可能不會(huì)很理想的,因?yàn)槲以囘^。另外,有很多的共享軟件點(diǎn)擊器之所以叫“點(diǎn)擊器”就是這個(gè)道理。單單消滅這個(gè)窗口,很可能由該窗口占用的一些系統(tǒng)資源就會(huì)流失,相比之下,還是使用點(diǎn)擊的方法,讓對話框自己調(diào)用它回調(diào)函數(shù)中的退出部分來消滅對話框,豈不是更加安全?
還有一個(gè)問題:什么時(shí)候讓它去點(diǎn)擊呢?或者說,它怎么知道什么時(shí)候去點(diǎn)擊呢?
我的答案是:時(shí)刻監(jiān)視。
是了,這就是我在軟件的Readme.txt中所說的“計(jì)時(shí)器技術(shù)”了。很簡單,只需在對話框的初始化中加入如下代碼:
SetTimer( hDlg, 1, 100, NULL );
第一個(gè)參數(shù)是需要設(shè)置計(jì)時(shí)器的對話框句柄,使用MFC的朋友可以省略這個(gè)參數(shù);第二個(gè)參數(shù)是計(jì)時(shí)器的ID;第三個(gè)是計(jì)時(shí)器事件的觸發(fā)時(shí)間間隔(以微妙為單位);第四個(gè)參數(shù)可以指定響應(yīng)事件的回調(diào)函數(shù),這里用不著,為NULL。
這樣,便可以實(shí)現(xiàn)初步的功能——時(shí)刻監(jiān)視了。但是在最后處理程序退出部分的代碼時(shí),一定要將先前創(chuàng)建的計(jì)時(shí)器銷毀,即:
KillTimer( hDlg, 1 );
因?yàn)橛?jì)時(shí)器是一個(gè)耗費(fèi)系統(tǒng)資源的東西,所以在程序結(jié)束的時(shí)候,必須銷毀它以釋放系統(tǒng)資源。
下面我來開始介紹如何來在內(nèi)存中尋找QQ的三種廣告窗口。以下的代碼我均摘自“QQ反騷擾”的SDK源代碼,請使用MFC的朋友們自行做出相應(yīng)的改動(dòng)。
在內(nèi)存中有很多窗口,那么“QQ反騷擾”又是如何知道哪一個(gè)窗口是QQ的廣告窗口呢?很簡單,從窗口所具備的眾多特征中取出兩到三個(gè)來作為“過濾器”即可。比如對于系統(tǒng)消息的彈出式廣告,它的“過濾器”就是它的標(biāo)題——“騰訊QQ系統(tǒng)廣播”和它的“關(guān)閉”按鈕。
這樣,在處理計(jì)時(shí)器事件時(shí)的代碼如下:
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信