科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件VC++编程实现广告窗口自动关闭

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文对自动关闭网络广告窗口的软件实现原理及具体实现过程作了介绍。

作者:51cto.com整理 来源:51cto.com整理 2007年9月14日

关键字: VC++ 编程 广告窗口

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共19页)

一、 程序设计思路与实现

首先要分析一下广告窗口的一般特性。广告窗口一般是通过主页面里的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发行版本等等。本文所述内容有一定的通用性,可以将其用于监视某项进程,当该进程启动后由程序来触发某个事件来对其进行处理等等。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章