Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2096091
  • 博文数量: 909
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 12260
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-06 20:50
文章分类

全部博文(909)

文章存档

2008年(909)

我的朋友

分类:

2008-05-06 21:57:52

一起学习
广告过滤小程序


作者:ForeverGIS

下载源代码


这几天,在使用某个软件试用版的过程中,经常弹出广告,真是不甚烦恼,如何写个小程序把他去掉呢?请和我一起来吧!
思路是这样的:首先需要知道要消灭窗体的标题(比如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
作者主页:
下载本文示例代码


广告过滤小程序广告过滤小程序广告过滤小程序广告过滤小程序广告过滤小程序广告过滤小程序广告过滤小程序广告过滤小程序广告过滤小程序广告过滤小程序广告过滤小程序广告过滤小程序
阅读(192) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~