VC++实现广告窗口自动关闭


一、 引言
我们在上网浏览时,有时访问到某些网站的网页时会自动弹出一些广告窗口,甚至有不少个人主页为了利用网络广告来赚钱一下同时弹出几个甚至十几个广告窗口。这些窗口一个一个的关掉十分麻烦,而且如果不关的话又会占用大量的系统资源,所以不少人对此深恶痛绝,作为程序员可以利用自身技术优势根据自己的实际需要编制一些很适合自己的小工具。因此本文就对如何通过软件编程来实现对广告窗口的自动关闭进行介绍,以期能起到抛砖引玉之效。
二、 程序设计思路与实现
首先要分析一下广告窗口的一般特性。广告窗口一般是通过主页面里的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发行版本等等。本文所述内容有一定的通用性,可以将其用于监视某项进程,当该进程启动后由程序来触发某个事件来对其进行处理等等。


  • VC++瀹炵幇骞垮憡绐楀彛鑷姩鍏抽棴
    绛旓細绋嬪簭鐨勫疄鐜板苟涓嶅鏉傦紝鐢变簬绋嬪簭杩愯璧锋潵鍚庝换鎰忔椂鍒诲脊鍑虹殑骞垮憡绐椾綋閮借闅忔椂鍏抽棴锛鎵浠ュ氨搴斿綋閫氳繃璁剧疆瀹氭椂鍣紝姣忛殧涓娈垫椂闂村氨鎼滃浠ヤ笅褰撳墠鏄惁鏈夊箍鍛婄獥鍙锛屽鏋滄湁灏卞皢鍏跺叧闂紝鍚﹀垯缁х画鐩戣銆傚洜姝ゅ彲浠ュ湪绋嬪簭鐨勫垵濮嬪寲鍏ュ彛鍑芥暟涓敤SetTimer()鍑芥暟鍚姩瀹氭椂鍣ㄣ備笅闈㈠氨缁撳悎瀹為檯浠g爜瀵归儴鍒嗗叧閿唬鐮佽繘琛岃瑙o細浠庣涓涓獥鍙...
  • SetWindowPosVC渚嬪瓙
    绛旓細SetIcon(m_hIcon, TRUE); // 璁剧疆澶у浘鏍 SetIcon(m_hIcon, FALSE); // 璁剧疆灏忓浘鏍 鐒跺悗锛屽紑鍙戣呭骞垮憡绐楀彛鐨勪綅缃繘琛屼簡绮惧績璁捐锛岀洰鐨勬槸璁╁畠娴幇鍦ㄥ睆骞曠殑鍙充笅瑙掋備负姝わ紝鑾峰彇浜嗗睆骞曠殑瀹藉害锛坈x锛夊拰楂樺害锛坈y锛夛紝骞跺畾涔変簡骞垮憡绐楀彛鐨勫昂瀵革紙dx, dy锛夛紝鐒跺悗浣跨敤SetWindowPos鍑芥暟鏉瀹炵幇杩欎釜鐩爣锛歝pp int ...
  • 濡備綍鐢vc鎺у埗涓涓猼pagecontrol
    绛旓細// 鍦绐楀彛鏍囬涓嶈兘纭畾鐨勬儏鍐典笅鍙皢鏍囬璁句负NULL HWND MyFindWindow(){ const int MyMaxParentWinCount = 3;// 鐖剁獥鍙g被鍚嶆暟缁 char *A_szClassName[MyMaxParentWinCount] = { "TForm1 ","TPanel ","TPageControl "};// 鐖剁獥鍙f爣棰樻暟缁 char *A_szWinName[MyMaxParentWinCount] = { "...
  • VC++缂栧啓涓涓璇濇搴旂敤绋嬪簭,鍚姩鍚庡脊鍑轰竴涓敤鎴疯韩浠界‘璁ゅ璇濇,褰撶敤鎴...
    绛旓細鏂板鍔犱竴涓璇濇璧勬簮,鐒跺悗澧炲姞绫,鍦ˋPP绫讳腑鐨処nitInstance鍑芥暟涓殑寮濮嬮儴鍒嗚皟鐢ㄨ繖涓璇濇,鍒ゆ柇杈撳叆鐨勬槸鍚︽纭,涓嶆纭繑鍥瀎alse灏遍鍑虹▼搴忎簡 鐑績缃戝弸| 鍙戝竷浜2011-12-27 涓炬姤| 璇勮 0 0 鑷繁鍐欐拻 lijia6745 | 鍙戝竷浜2011-12-27 涓炬姤| 璇勮 0 4 涓烘偍鎺ㄨ崘: 鍩轰簬瀵硅瘽妗嗙殑搴旂敤绋嬪簭 瀵硅瘽妗嗗簲鐢ㄧ▼搴忚璁...
  • VC6.0涓浐瀹氬瓙绐楀彛鍦ㄥ璇濇涓樉绀轰綅缃
    绛旓細鎴戝湪鍋氫竴涓鎽勫儚澶寸洃鎺х殑绋嬪簭,涓绐楀彛鏄竴涓熀鏈璇濇,3涓洃鎺х殑瀛愮獥鍙(涔熸槸瀵硅瘽妗)闇瑕佸儚澧欎笂瀹夎鐨勭幓鐠冧竴鏍锋寜鐓2*2鐨勬柟寮忔帓鍒楀湪涓诲璇濇涓(鍏朵腑鍙充笅瑙掔殑閭d釜鍋氫负鎵撳紑纭洏涓婅棰戞枃浠剁殑鍥炴斁绐楀彛)銆傝闂庢牱鎵嶈兘瀹炵幇杩欎釜鍔熻兘銆傛垜鐜板湪鍙槸鍦ㄤ富瀵硅瘽妗嗕腑... 灞曞紑 鐢...
  • vc涓璖etTextColor()鍑芥暟鎬庝箞浣跨敤,鍚勭棰滆壊鐨勫弬鏁板兼槸浠涔堝晩?
    绛旓細#009 std::wstring strShow(_T("C++绐楀彛绫荤殑瀹炵幇,2007-08-13")); #010 TextOut(hDC,10,10,strShow.c_str(),(int)strShow.length()); #011 #012 //璁剧疆杈撳嚭瀛楃涓茬殑棰滆壊. #013 COLORREF crOld = SetTextColor(hDC,RGB(255,0,0)); #014 TextOut(hDC,10,30,strShow.c_str(),(int)strShow...
  • vC++6.0鑳芥彁绀洪敊璇殑鍦版柟鍚?
    绛旓細涓鑸槸鍏堢敤f10,纭畾鍑芥暟杈撳叆杈撳嚭鏄惁姝g‘(涓鑷繁鎯崇殑涓鏍),濡備笉涓鏍,鍒欑敤f11杩涘叆鍑芥暟浣撲竴姝ヤ竴姝ヨ皟璇曘4,鍦ㄨ皟璇曡繃绋嬩腑,鑲畾寰楃洃瑙嗙▼搴忎腑鐨勫彉閲忋傚湪vc6.0鐨勫彸涓嬭鏈変竴涓獁atch绐楀彛,涓撻棬鐢ㄦ潵璁剧疆鐩戣鍙橀噺銆傚叿浣撴庢牱璁剧疆鑷繁浣撲細鍚с傚湪璋冭瘯杩囩▼涓,榧犳爣杞昏交鏀惧湪鍙橀噺涓婁篃浼氭樉绀鸿鍙橀噺鐨勫5,vc6.0涓撻棬涓鸿皟璇曡缃簡宸ュ叿...
  • VC濡備綍 鍦ㄥ弻鏄惧崱鍒囨崲 澶嶅埗(鍏嬮殕)妯″紡,鎵╁睍妯″紡
    绛旓細绋嬪簭鎺у埗鏄剧ず妯″紡鍒囨崲褰撶劧寰堟湁鐢ㄥ晩锛屾瘮濡備竴涓湇鍔¤涓绐楀彛锛岀敤涓や釜鏄剧ず鍣紝澶栭潰鐨勮緟鏄剧ず鍣ㄦ槸闈㈠瀹㈡埛鐨勶紝骞虫椂鏄剧ず涓浜涘浐瀹氬浼犱俊鎭瓑鍐呭锛屽綋鏈夐渶瑕佺粰瀹㈡埛鍔炰笟鍔$殑鏃跺欏氨瑕佹帶鍒惰緟鏄剧ず鍣ㄧ殑鍐呭鍜屼富鏄剧ず鍣ㄦ樉绀哄悓姝ュ唴瀹癸紝姣斿纭涓浜涗俊鎭紝鐢典俊閫夊彿绛夛紝 瀹屾垚鍚庡氨鍐嶅垏鎹㈠洖鎵╁睍妯″紡锛岀户缁挱骞垮憡銆傝繖涓棶棰樻垜涔熷湪...
  • ...server 2012绯荤粺鍚,杩涘幓鍑虹幇绠$悊鍛榙os绐楀彛,灞忓箷鐩稿綋浜庢槸榛戝睆,鎬庝箞...
    绛旓細dos绐楀彛鐨勭浉鍏崇煡璇2012-01-25 dos绐楀彛閲寃indows鎵句笉鍒版枃浠舵庝箞鍔 2010-05-20 dos绐楀彛鑰佹槸鑷姩鍏抽棴,鍒氭墦寮灏卞叧闂 3 2013-10-10 dos绐楀彛鍏ㄥ睆鐨刣os鍛戒护鏄暐 3 2009-07-17 鍦╓INDOWS涓墦寮DOS绐楀彛鏃朵粈涔堟剰鎬?鎬庢牱鎵撳紑? 28 2008-04-16 VC缂栫▼鏃禗OS绐楀彛鑷姩鍏抽棴鎬庝箞鍔 19 ...
  • 鎴戠敤VC++6.0鍐欑殑涓滆タ澶嶅埗鍑烘潵姹夊瓧灏卞彉鎴愪簡涔辩爜 , 鑰屼笖浠庡叾浠栧湴鏂瑰鍒...
    绛旓細2銆佸湪VC绐楀彛涓紑濮嬪鍒朵箣鍓,灏嗚緭鍏ユ硶鍒囨崲涓轰竴绉嶄腑鏂囪緭鍏ユ硶,鐒跺悗杩涜澶嶅埗;鍦╳ord涓矘璐存椂,杈撳叆娉曞彲浠ヤ负浠绘剰涓绉嶃傚彟澶栬繕鏈夊氨鏄湪vc++6.0涓墦姹夊瓧鐨勬椂鍊,鎵撳嚭鏉ョ殑姹夊瓧绐佺劧鍙樻垚涔辩爜,浣嗕粠寮濮嬫墦涓婄殑姹夊瓧娌¢棶棰,澶嶅埗鍒氭墠鎵撶殑涔熸病闂,杩欑鎯呭喌涔熷父鍙戠敓,淇濆瓨涓涓鍏抽棴vc鍐嶆鎵撳紑灏卞ソ浜,杩樻湁鍏朵粬鐨勪竴浜涙儏鍐,姣斿绐佺劧鏃犳硶...
  • 扩展阅读:i管家弹出广告怎么办 ... 永久关闭手机弹出广告 ... 广告投放 ... 手机频繁自动弹出广告 ... 手机广告怎么彻底清除 ... oppo手机莫名弹出广告 ... 手机总弹出广告怎么办 ... 手机屏幕自动弹出广告 ... 手机频繁自动跳出广告满屏 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网