程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 廣告過濾小程序

廣告過濾小程序

編輯:關於VC++

這幾天,在使用某個軟件試用版的過程中,經常彈出廣告,真是不甚煩惱,如何寫個小程序把他去掉呢?請和我一起來吧!

思路是這樣的:首先需要知道要消滅窗體的標題(比如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

電子郵件:[email protected]

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

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved