分享
 
 
 

容隐蔽窗口,系统托盘等技术一体的关闭广告程序剖析(源码)

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

广告是叫人深恶痛绝的东东(可能商家不这样想),INTERNET也逃不了它的影子。于是各种KILL广告的软件层出不穷,但它们的原理基本都一样,就是用软件判断弹出是窗口是否是广告,是的话就KILL掉,不是就跳过。实现起来也相当简单,核心部分,几行就可以搞定.当然,这并不包括后面要说的隐蔽窗口和托盘技术的实现。(VC++)

先说核心,关广告。(用于IE浏览器)

因为WINDOWS管理窗口是分层的,像目录树一样。而广告往往是IE浏览器派生的子窗口。所以我们用循环方法找到所有窗口,获得窗口句柄,当得知是IE时,再进一步获得该IE的子窗口,然后判断是否是广告。至于如何判断,我们也用最简单的方法,就是看该窗口风格(比如:是否有工具栏)。

下面是代码实现:

void cmywnd::OnTimer(UINT nIDEvent)

{

先获得WINDOWS中第一个窗口句柄:

CWnd* pMainWnd = AfxGetMainWnd()->GetWindow(GW_HWNDFIRST);

进入循环

while (pMainWnd)

{ 该名字用于判断是否是IE浏览器

CString IEName;

获得该窗口的名字并放入IEName中

GetClassName(pMainWnd->m_hWnd,IEName.GetBufferSetLength(100),100);

IE名字是IEFrame,所以判断该名是否于等于它

if(IEName=="IEFrame"){

是的话,获得子窗口句柄

CWnd* pChildWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,NULL,"WorkerW",NULL));

if(pChildWnd)

{

如果子窗口存在,获得它的风格,如果满足条件,就给它发消息关闭它。

if(!(GetWindowLong(pChildWnd->m_hWnd,GWL_STYLE)&WS_VISIBLE))

{

pMainWnd->PostMessage(WM_CLOSE,0,0);

}

}

}

继续获得下一个窗口句柄

pMainWnd = pMainWnd->GetWindow(GW_HWNDNEXT);

}

CWnd::OnTimer(nIDEvent);

}

核心就是这些,把上面代码加到程序中就可以实现关广告的目的了。

但作为一个关广告程序,我们并不希望该程序太明显,也就是说程序越隐蔽越好,于是我们想到用隐蔽窗口,并用系统托盘管理。实现方法也相关简单,就是自创一个窗口类,并派生于CWnd,定义如下:

class cmywnd : public CWnd

{

public:

托盘图标

HICON m_hicon;

托盘菜单

HMENU menu1;

public:

void create(LPCTSTR pTitle,RECT &rect,unsigned short MaskID,unsigned short BitmapID,HICON hicon,HMENU hmenu);

}

就一个成员函数create,参数也相当明了,不用解释了吧,实现如下:

void cmywnd::create(LPCTSTR pTitle, RECT &rect, unsigned short MaskID, unsigned short BitmapID, HICON hicon, HMENU hmenu)

{

调用API创建一个隐蔽窗口

CreateEx(0,AfxRegisterWndClass(0),pTitle,WS_OVERLAPPEDWINDOW|WS_SYSMENU,rect,NULL,NULL,NULL);

图标与菜单设置

menu1=hmenu;m_hicon=hicon;

SetIcon(hicon,TRUE);

SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);

设置托盘的一些属性

NOTIFYICONDATA nid;

nid.cbSize=sizeof(NOTIFYICONDATA);

nid.hWnd=this->m_hWnd;

nid.uID=1;

nid.uFlags=NIF_TIP|NIF_ICON|NIF_MESSAGE;

nid.uCallbackMessage=WM_SYSCOMMAND;

nid.hIcon=hicon;

strcpy(nid.szTip,"去广告,赵明个人软件!");

Shell_NotifyIcon(NIM_ADD,&nid);

}

以上就是隐蔽窗口和系统托盘的实现,要在程序中使用,也相当简单,调用create函数就可以了,如下:

cmywnd* pFrame=new cmywnd;

其中的参数,视你程序而定

pFrame->create("eyes",rect,IDI_ICON1,IDI_ICON1,hicon,hmenu);

整个"关广告"程序剖析完了,接下来的工作,你只要把它们用到一起就行了。至于你怎么用,就看你了,我这有一个源程序,如果你有兴趣,发E给我啦。

网址:http://h2osky.126.com

赵明

email: papaya_zm@sina.com;zmpapaya@hotmail.com

web: http://h2osky.126.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有