應用例項:VC++實現廣告視窗自動關閉(轉)
應用例項:VC++實現廣告視窗自動關閉(轉)[@more@]一、 引言
我們在上網瀏覽時,有時訪問到某些網站的網頁時會自動彈出一些廣告視窗,甚至有不少個人主頁為了利用網路廣告來賺錢一下同時彈出幾個甚至十幾個廣告視窗。這些視窗一個一個的關掉十分麻煩,而且如果不關的話又會佔用大量的系統資源,所以不少人對此深惡痛絕,作為程式設計師可以利用自身技術優勢根據自己的實際需要編制一些很適合自己的小工具。因此本文就對如何透過軟體程式設計來實現對廣告視窗的自動關閉進行介紹,以期能起到拋磚引玉之效。
二、 程式設計思路與實現
首先要分析一下廣告視窗的一般特性。廣告視窗一般是透過主頁面裡的Javascript指令碼或VBScript 指令碼語言來動態彈出的,其實質還是一個IE視窗。但絕大多數視窗在建立出來後是沒有選單,工具條等其它東西的,因此我們可以先搜尋IE視窗,然後判斷其視窗是否有選單和工具條等東西,如果沒有就認為是廣告視窗了,雖然這樣的判斷不是十分的嚴格,但從實際使用情況來看雖然有時會誤關一些正常視窗,但發生的機率是相當小的。完全可以忽略。而且這種情況多發生在聊天室中,所以只需在聊天之前將其關閉,只在瀏覽網頁的時候執行程式就一般不會發生誤操作了。
程式的實現並不複雜,由於程式執行起來後任意時刻彈出的廣告窗體都要隨時關閉,所以就應當透過設定定時器,每隔一段時間就搜尋以下當前是否有廣告視窗,如果有就將其關閉,否則繼續監視。因此可以在程式的初始化入口函式中用SetTimer()函式啟動定時器。下面就結合實際程式碼對部分關鍵程式碼進行講解:
從第一個視窗開始對每一個視窗進行列舉搜尋,如果第一個視窗存在那麼就可以透過在while迴圈裡的GetWindow(GW_HWNDNEXT);來搜尋下一個視窗,並在其內判斷是否是廣告窗體,直至搜尋完最後一個窗體為止:
CWnd* pMainWnd = AfxGetMainWnd()->GetWindow(GW_HWNDFIRST);
while (pMainWnd)
{
……
pMainWnd = pMainWnd->GetWindow(GW_HWNDNEXT);
}
對於判斷是否是廣告視窗,可以用GetClassName()函式獲取視窗型別來判斷是否是IE視窗:
CString strClassName;
GetClassName(pMainWnd->m_hWnd,strClassName.GetBufferSetLength(100),100);
對於那些不是IE型別的窗體根本不用加以考慮,可以將剛才得到的strClassName視窗型別同"IEFrame"進行比較來進行判斷,如果是IE視窗才可以進行下一步的判斷:
//根據控制程式碼獲取子視窗指標
CWnd* pChildWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,NULL,"Worker",NULL));
if(!pChildWnd)
pChildWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,NULL,"WorkerA",NULL));
如果子視窗存在,用類似的方法獲取下一個子視窗指標:
CWnd* pChildNextWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,pChildWnd->m_hWnd,"Worker",NULL));
if(!pChildNextWnd)
pChildNextWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,pChildWnd->m_hWnd,"WorkerA",NULL));
如果該視窗存在,那麼下步只要驗證當前視窗可視就可以斷定其的確屬於廣告視窗,可以透過GetWindowLong()獲取到當前的視窗風格,然後透過邏輯運算可以判斷出當前視窗是否具有WS_VISIBLE可視效果:
if(pChildNextWnd)
{
if(!(GetWindowLong(pChildWnd->m_hWnd,GWL_STYLE)&WS_VISIBLE))
{
pTempWnd=NULL;
pTempWnd=pMainWnd;
//關閉廣告視窗
……
return;
}
}
現在已經可以準確判斷出哪個是廣告視窗了,只需將其關閉即可,前段程式碼已經將我們想關閉的視窗指標儲存到變數pTempWnd中,因此我們可以透過簡單的向其傳送WM_CLOSE訊息就可以徹底將其關閉了:
pTempWnd->PostMessage(WM_CLOSE,0,0);
三、 小結
本文僅對於關閉廣告視窗的核心程式碼作了介紹,在實際程式設計中需要考慮到許多實際的因素,比如為了節省螢幕佔用空間,最好將其做成系統托盤模式;由於需要長期駐留記憶體所以要儘量把程式大小控制好,並且採用Release發行版本等等。本文所述內容有一定的通用性,可以將其用於監視某項程式,當該程式啟動後由程式來觸發某個事件來對其進行處理等等。
我們在上網瀏覽時,有時訪問到某些網站的網頁時會自動彈出一些廣告視窗,甚至有不少個人主頁為了利用網路廣告來賺錢一下同時彈出幾個甚至十幾個廣告視窗。這些視窗一個一個的關掉十分麻煩,而且如果不關的話又會佔用大量的系統資源,所以不少人對此深惡痛絕,作為程式設計師可以利用自身技術優勢根據自己的實際需要編制一些很適合自己的小工具。因此本文就對如何透過軟體程式設計來實現對廣告視窗的自動關閉進行介紹,以期能起到拋磚引玉之效。
二、 程式設計思路與實現
首先要分析一下廣告視窗的一般特性。廣告視窗一般是透過主頁面裡的Javascript指令碼或VBScript 指令碼語言來動態彈出的,其實質還是一個IE視窗。但絕大多數視窗在建立出來後是沒有選單,工具條等其它東西的,因此我們可以先搜尋IE視窗,然後判斷其視窗是否有選單和工具條等東西,如果沒有就認為是廣告視窗了,雖然這樣的判斷不是十分的嚴格,但從實際使用情況來看雖然有時會誤關一些正常視窗,但發生的機率是相當小的。完全可以忽略。而且這種情況多發生在聊天室中,所以只需在聊天之前將其關閉,只在瀏覽網頁的時候執行程式就一般不會發生誤操作了。
程式的實現並不複雜,由於程式執行起來後任意時刻彈出的廣告窗體都要隨時關閉,所以就應當透過設定定時器,每隔一段時間就搜尋以下當前是否有廣告視窗,如果有就將其關閉,否則繼續監視。因此可以在程式的初始化入口函式中用SetTimer()函式啟動定時器。下面就結合實際程式碼對部分關鍵程式碼進行講解:
從第一個視窗開始對每一個視窗進行列舉搜尋,如果第一個視窗存在那麼就可以透過在while迴圈裡的GetWindow(GW_HWNDNEXT);來搜尋下一個視窗,並在其內判斷是否是廣告窗體,直至搜尋完最後一個窗體為止:
CWnd* pMainWnd = AfxGetMainWnd()->GetWindow(GW_HWNDFIRST);
while (pMainWnd)
{
……
pMainWnd = pMainWnd->GetWindow(GW_HWNDNEXT);
}
對於判斷是否是廣告視窗,可以用GetClassName()函式獲取視窗型別來判斷是否是IE視窗:
CString strClassName;
GetClassName(pMainWnd->m_hWnd,strClassName.GetBufferSetLength(100),100);
對於那些不是IE型別的窗體根本不用加以考慮,可以將剛才得到的strClassName視窗型別同"IEFrame"進行比較來進行判斷,如果是IE視窗才可以進行下一步的判斷:
//根據控制程式碼獲取子視窗指標
CWnd* pChildWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,NULL,"Worker",NULL));
if(!pChildWnd)
pChildWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,NULL,"WorkerA",NULL));
如果子視窗存在,用類似的方法獲取下一個子視窗指標:
CWnd* pChildNextWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,pChildWnd->m_hWnd,"Worker",NULL));
if(!pChildNextWnd)
pChildNextWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,pChildWnd->m_hWnd,"WorkerA",NULL));
如果該視窗存在,那麼下步只要驗證當前視窗可視就可以斷定其的確屬於廣告視窗,可以透過GetWindowLong()獲取到當前的視窗風格,然後透過邏輯運算可以判斷出當前視窗是否具有WS_VISIBLE可視效果:
if(pChildNextWnd)
{
if(!(GetWindowLong(pChildWnd->m_hWnd,GWL_STYLE)&WS_VISIBLE))
{
pTempWnd=NULL;
pTempWnd=pMainWnd;
//關閉廣告視窗
……
return;
}
}
現在已經可以準確判斷出哪個是廣告視窗了,只需將其關閉即可,前段程式碼已經將我們想關閉的視窗指標儲存到變數pTempWnd中,因此我們可以透過簡單的向其傳送WM_CLOSE訊息就可以徹底將其關閉了:
pTempWnd->PostMessage(WM_CLOSE,0,0);
三、 小結
本文僅對於關閉廣告視窗的核心程式碼作了介紹,在實際程式設計中需要考慮到許多實際的因素,比如為了節省螢幕佔用空間,最好將其做成系統托盤模式;由於需要長期駐留記憶體所以要儘量把程式大小控制好,並且採用Release發行版本等等。本文所述內容有一定的通用性,可以將其用於監視某項程式,當該程式啟動後由程式來觸發某個事件來對其進行處理等等。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-957336/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Winform MessageBox訊息彈窗如何實現自動關閉ORM
- win10 彈窗廣告關閉方法 win10 彈出廣告怎麼關閉Win10
- 央視曝光APP彈窗廣告三大陷阱:如何監管應用軟體彈窗廣告APP
- rac 正常關閉例項service不會自動漂移,只有在例項異常abort才會發生自動failoverAI
- sweetalert載入彈窗完成自動關閉
- win10系統怎麼關閉廣告彈窗 win10關閉惡意彈窗Win10
- C# winForm 視窗跳轉後關閉上一個視窗的方法C#ORM
- win10總是自動跳出廣告怎麼關閉_win10系統關閉所有廣告的方法Win10
- Flink的滾動視窗、會話視窗、滑動視窗及其應用會話
- 機器視覺應用例項視覺
- 廣告彈窗/小視窗程式碼
- 小米手機怎麼關閉廣告?關閉廣告教程彙總
- Go Qt5 建立空白視窗、視窗居中及關閉視窗事件GoQT事件
- PyQt5 之關閉視窗QT
- mongodb關閉資料庫例項MongoDB資料庫
- 如何在我的應用啟動介面實現「開屏廣告」?
- 附例項!實現iframe父窗體與子窗體的通訊
- win10系統禁止所有彈窗廣告如何設定 win10系統怎麼關閉所有廣告彈窗Win10
- dd應用例項
- 倒數計時5S秒自動關閉彈窗
- 360瀏覽器廣告彈窗怎麼關閉 360瀏覽器怎麼禁止廣告彈出瀏覽器
- win10怎麼關閉視窗移動至邊緣時自動調整大小_win10取消移動視窗到邊緣自動調整大小的方法Win10
- 期待和現實:營銷自動化應用狀況報告
- 代理IP在廣告管理和自動化中的應用
- 在Cucumber中應用 PicoContainer容器實現元件的例項化AI元件
- win10電腦老是彈出廣告如何解決_win10自動跳出廣告怎麼關閉Win10
- 滑動視窗法——Leetcode例題LeetCode
- [Electron] 應用不關閉視窗退出而是保留到後臺執行
- Adsota:越南移動應用廣告報告
- 自己實現一個滑動視窗
- 2020 網路課 智慧樹自動刷課程式碼,自動跳轉,自動答題並關閉彈窗,自動1.5倍速靜音
- 訂單超時自動關閉的實現方案總結
- 0x02. 處理視窗關閉
- PyQT5之訊號關閉視窗QT
- 警惕遊戲融資視窗正在關閉遊戲
- Oracle例項關閉:SHUTDOWN: waiting for active calls to completeOracleAI
- 介面測試平臺-66: 多介面用例實現之 小用例:新增+刪除+關閉+排序排序
- ”innerHTML“的應用例項HTML
- winform 無邊框窗體實現拖動、最大化、最小化、關閉ORM