看板 C_and_CPP 關於我們 聯絡資訊
這是一份概念、技術、興趣的討論文章。 前言 最近上一些網站看教學影片很容易跳出遊戲廣告視窗, 只要該 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:可以參考http://ppt.cc/gen.php 01/11 23:19
dk3208:或者是patch kernel,如這篇http://ppt.cc/7L;b 01/11 23:21
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