WEB开发网
开发学院软件开发VC 广告过滤小程序 阅读

广告过滤小程序

 2006-07-20 11:38:49 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 这几天,在使用某个软件试用版的过程中,广告过滤小程序,经常弹出广告,真是不甚烦恼,有了这个句柄,就可以象上面那样通过判断这个窗体的句柄决定是否将它关闭:char str[256];::SendMessage(hwnd, WM_GETTEXT, 255, (long)str);if((s

本文示例源代码或素材下载

这几天,在使用某个软件试用版的过程中,经常弹出广告,真是不甚烦恼,如何写个小程序把他去掉呢?请和我一起来吧!

思路是这样的:首先需要知道要消灭窗体的标题(比如MyWindow),然后获取窗体的句柄,判断它的标题是否和需要消灭的窗体的标题一样,如果是的话将它关闭。道理很简单,实现也不难,看看下面的代码:

CPoint MP;
char str[256];
HWND hWnd;
GetCursorPos(&MP);
hWnd = ::WindowFromPoint(MP);
::SendMessage(hWnd, WM_GETTEXT, 255, (long)str);
if((strcmp(str, "MyWindow") == 0))
::PostMessage(hWnd, WM_CLOSE, 0, 0);   

这是我从一个下载的代码中拷贝出来的。分析一下:首先获取当前光标的坐标,然后获取这个光标指向的窗体的句柄,通过这个句柄获取窗体的标题,如果标题等于MyWindow,则把这个窗体关闭。

这段代码基本上达到了我们的要求,但还是觉得烦琐,因为它要求我们把光标指向需要关闭的窗体,而事实上我们想做到的是让这个窗体自动关闭,其实这也不难,把桌面上的所有窗体遍历一遍就行了!有这样一个API可以达到目的,EnumWindows:

BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // pointer to callback function
LPARAM lParam // application-defined value
); 

它需要一个回调函数作为参数,运行过程是这样的:EnumWindows遍历桌面上的窗体,并获取该窗体的句柄,将该句柄传给回调函数lpEnumFunc,EnumWindows结束的条件是:最后一个桌面窗体被找到或者回调函数的返回值是FALSE。这个回调函数要求的定义如下:

BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
);   

hwnd 是由 EnumWindows 传递进来的窗体句柄,有了这个句柄,就可以象上面那样通过判断这个窗体的句柄决定是否将它关闭:

char str[256];
::SendMessage(hwnd, WM_GETTEXT, 255, (long)str);
if((strcmp(str, "MyWindow") == 0))
::PostMessage(hWnd, WM_CLOSE, 0, 0);   

示例代码中创建了一个基于Dialog的工程,通过时间控件实现了对间隔一定时间弹出广告的识别与关闭,仅供参考!

关于文章和代码中的问题请您与作者联系:

通信地址:吉林省长春市西民主大街6号地球探测科学与技术学院 2001 级硕士研究生

邮政编码:130026

电子邮件:forevergis@sina.com

作者主页:http://forevergis.6to23.com

Tags:广告 过滤 程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接