广告是叫人深恶痛绝的东东(可能商家不这样想),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: [email protected];[email protected] web: http://h2osky.126.com

|