2008年(909)
分类:
2008-05-06 21:57:52
下载源代码
这几天,在使用某个软件试用版的过程中,经常弹出广告,真是不甚烦恼,如何写个小程序把他去掉呢?请和我一起来吧!
思路是这样的:首先需要知道要消灭窗体的标题(比如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,则把这个窗体关闭。
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的工程,通过时间控件实现了对间隔一定时间弹出广告的识别与关闭,仅供参考!