作者tropical72 (藍影)
看板C_and_CPP
標題[討論] 防廣告視窗怎麼做的?
時間Wed Jan 11 21:50:19 2012
這是一份概念、技術、興趣的討論文章。
前言
最近上一些網站看教學影片很容易跳出遊戲廣告視窗,
只要該 web 上有任何 link 被點擊,瀏覽器會再開一個 Instance 跳出來,
我覺得非常不悅、麻煩。
解決概念
我的方法很糟,用 FindWindow 、 SendMessage(hwnd, WM_DESTROY, 0, 0)
方式進行 close,缺點有下述二點
cpu 佔有率 高
一開始用純 main 方式下去做 ( 會先將 console 隱藏),
沒 sleep, cpu 效能被卡住 ( 這結果並不意外), 後來改用 WinMain 設
SetTimer, 變成 polling 時間尷尬,設太大廣告顯示太久;設太小 cpu 佔
有率高。
FindWindow 非治根本之道
用 FindWindow 方式當然必須先知道視窗抬頭,如此下來遇到另二個問題
1. 沒標題的視窗就不能用這方法。
2. 廣告內容變更就又要更新一次關閉之黑名單,
維護的方式便是把黑名單全都列在一個 txt 裡面,以後增加廣告的時候
只要維護該黑名單即可。但建置與維護成本高,不過這應是「判別」
最穩的方式,較不容易誤判。
目前黑名單我只有列不到 20 個視窗標題抬頭。
問題討論
1. Win32 API 有沒有辦法做到,當系統新增某個 process 時, 有辦法
主動通知我的 ap 再去執行嗎? (call back 方式, 非 polling 方式)
或換個問法:Win32 API 能否以 callback 方式監控 processes ?
2. 不知道一般在防廣告視窗時是怎麼處理的?(直覺不會是列標題黑名單)
希望有想法的版友能不吝分享其概念。
初步有想過應該會分成 「崁在網頁裡」 與 「另開瀏覽器」 兩種,
此處比較想知道「另開瀏覽器」的擋法 (有擋內崁網頁的也歡迎分享)。
即使有一點想法、創意、沒實際 run 過,也可以給一點參考意見。
最後先感謝各位版友不吝指導,謝謝各位。
--
世界上有種,
將 不可能 轉換為 無限可能 的強大力量,
我稱它為 - 信念。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.69.239
※ tropical72:轉錄至看板 Programming 01/11 21:54
→ purincess:win32的hook或許可以偵測到process creation @@" (純粹 01/11 21:59
→ purincess:是我的猜測, 但hook確實是關鍵字) 01/11 21:59
→ purincess:又, 如果只是瀏覽器內自己要跳新視窗, 他直接攔截java 01/11 22:00
→ purincess:script的window.open就好了..(我是說瀏覽器內的機制)吧? 01/11 22:00
→ tropical72:先謝謝p大回覆,但若攔java scr. 的話,是否會不只攔到 01/11 22:09
→ tropical72:廣告視窗,連非廣告視窗都會一起攔?(所以才想用api) 01/11 22:10
→ dk3208:user mode的話就像p大說的api hooking,例如 CreateProcess 01/11 23:19
→ dk3208:不過第二種方法要寫driver,在x64上也會被擋 01/11 23:22
推 dk3208:sorry上面網址有問題,用 01/11 23:27
→ dk3208:另外不曉得你用的browser是哪一種?Chrome和FF都有extension 01/11 23:38
→ dk3208:可以block ad,還可以自己設filter rules 01/11 23:39
推 ericinttu:我也會想從browser角度去切入 01/11 23:54
→ ericinttu:然後,就可以自己寫簡單的browser去做一些事情了 01/11 23:56
→ diabloevagto:firefox有套件adblocks plus雖然這是檔網頁廣告的 01/12 00:14
→ diabloevagto:裡面有訂閱條件集的,不知道是否能給t大參考呢? 01/12 00:15
→ tropical72:先先dk3208給的link,讓我為之驚艷,也謝謝diab~給的建 01/12 03:52
→ tropical72:議,那plugin可滿足我的需求,謝謝大家。 01/12 03:52