C++Builder 高手進階 (一)編寫彈出廣告殺手 (轉)
C++Builder 高手進階 :namespace prefix = o ns = "urn:schemas--com::office" />
(一) 編寫彈出廣告殺手
nxyc_twz@163.com
一、分析
作為一名開發人員,必然會經常上網查詢資料,可討厭的廣告真讓人心煩。有沒有辦法自動關閉這些廣告呢?答案是肯定的!也許你會說:“網上這類軟體多的是,隨便找一個不就行了?”,你說的確實不錯,可作為一名軟體開發人員,總不能什麼都靠別人吧?自己動手作一個如何?說幹就幹,首先得找出彈出廣告視窗的工作原理:
1. 使用自己的《系統視窗分析器》(在下一期講述其開發過程),輕易地就發現彈出廣告視窗的特徵:其視窗類是CabWClass或IEFrame。
2. 如果找出視窗類是CabinetWClass或IEFrame的視窗,向其傳送WM_CLOSE不就OK了嗎?心裡不由一陣竊喜!
3. 使用定時器定時進行檢測,找到符合條件的視窗就向其傳送WM_CLOSE訊息。
二、實戰前沿
道理講明瞭,可如何找到視窗類名呢?這就需要使用了:
GetWindowText :取得視窗文字
GetWindow :取得視窗控制程式碼
GetClassName :取得類名
PostMessage :傳送訊息
SetWindowLong :設定方式
具體用法請查閱相關資料。
三、設計流程
1. 啟動C++Builder 5,新建一個Application,將Form的Name設定為Form1,其BoldStyle設定為bsNone,在Form的Icon中設定好圖示。
2. 定義資料變數:
TRAYICON_ID = 1;
ICONEVENT = WM_APP + 100;
TNotifyIconData TrayIcon ;
3. 拖放一個Timer和一個Popmenu控制元件到窗體上。Timer的屬性:Name->Timer1,Interval->1000;Popmenu1上追加三個子項:繼續->ContinueCmd,PauseCmd->暫停,ExitCmd->退出。
4. 使應用進入系統托盤:void TrayIconCmd(void);
TrayIcon.cbSize = sizeof(TNotifyIconData);
TrayIcon.hWnd = Handle;
TrayIcon.uID = ID_TRAYICON;
TrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
TrayIcon.uCallBackMessage = ICONEVENT;
TrayIcon.hIcon = Form1->Icon->Handle;
TrayIcon.szT= “廣告視窗殺手”;
_NotifyIcon(NM_ADD, &TrayIcon);
5. 使應用程式退出系統托盤:void TrayIconExit(void);
Shell_NotifyIcon(NIM_DELETE, &TrayIcon );
6. 使應用程式啟動後直接進入系統托盤:編寫Form1的OnCreate事件
TrayIconCmd(); //在系統托盤中圖示
Width = 0;
SetWindowLong(Application->Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
7. 從系統托盤中解除安裝圖示:編寫Form1的OnClose事件
TrayIconExit();
8. 自定義訊息TrayIconOnClick:
在頭.h中定義:
private:
MESSAGE void __fastcall TrayIconOnClick(Tmessage &message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(ICONEVENT, Tmessage, TrayIconOnClick);
END_MESSAGE_MAP(Tform)
9. 滑鼠點選系統托盤圖示(TrayIconOnClick),則彈出選單:
Tpoint p;
if( message.lParam == WM_LBUTTONDOWN ||
message.lPram == WM_RBUTTONDOWN)
{
PopupMenu1->PopupComponent = Form1;
SetForegroundWindow(Handle);
GetCursorPos(p);
PopupMenu->Popup(p.x,p.y);
}
10. 列舉指定視窗控制程式碼的所有子視窗:void MENumChild(HWND hand);
char tempstr[255];
bool IsPopWindow = true;
HWND h = GetWindow(hand, GW_CHILD);
while(h)
{
GetClassName(h, tempstr, 256);
if( !strcmp(tempstr, “WorkerA”) || !strcmp( tempstr, “WorkerW”))
if( IsWindowVisible(h) ) IsPopWindow = false;
h = GetWindow(h, GW_HWNDNEXT);
}
if( IsPopWindw )PostMessage(hand, WM_CLOSE, 0, 0);
11. 雙擊Timer控制元件,新增其事件OnTimer:
char Text[255];
HWnd h := GetWindow(Handle, GW_HWNDFIRST);
while(h)
{
if (GetWindowText(h, Text, 255) > 0)
if (GetClassName(h,Text , 255)>0)
if ( !strcmp( Text, “CabinetWClass”) || !strcmp(Text, “IEFrame”))
EnumChildWindows(h);
h = GetWindow(h, GW_HWNDNEXT);
}
12.編寫選單響應事件:
ContinueCmd:繼續
Timer1->Enabled = true;
PauseCmd->Checked = false;
ContinueCmd->Checked = true;
PauseCmd:暫停
Timer1->Enabled = false;
PauseCmd->Checked = true;
ContinueCmd->Checked = false;
ExitCmd::退出
Close();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993954/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用 C++Builder 編寫 Tray 程式 (轉)C++UI
- 用VB編寫一個彈出選單類 (轉)
- C++ Builder 高手進階 (五)用BCB編寫多執行緒應用程式 (轉)C++UI執行緒
- 編寫了一個輔助Flutter彈出Toast的PackageFlutterASTPackage
- 用 C++Builder 編寫傳送電子郵件軟體 (轉)C++UI
- 用C++Builder在WINNT下編制一個Service (轉)C++UI
- 前端進階-編寫測試程式碼前端
- C++Builder的編譯超頻 (轉)C++UI編譯
- 分享一下「廣告殺手」帶來的經驗
- 記一次編寫彈框元件元件
- js高手進階之路:underscore原始碼經典(一)JS原始碼
- Linux-高手進階之路Linux
- Redux 進階 -- 編寫和使用中介軟體Redux
- C++Builder下實現埠讀寫 (轉)C++UI
- 「黑科技」無人機殺手——無彈步槍DroneDefender無人機
- win10永久關閉桌面彈出廣告 win10桌面彈出廣告如何取消Win10
- 用JAVA編寫自己的機器人,然後一起“廝殺” (轉)Java機器人
- 程式設計師如何寫出殺手級的簡歷程式設計師
- 攻防世界web高手進階之blgdelWeb
- 攻防世界web高手進階18(mfw)Web
- xctf-web(高手進階區)-supersqliWebSQL
- SCO UNIX--高階進階(一)(轉)
- 利用C++Builder進行精確計時 (轉)C++UI
- 如何寫出殺手級簡歷(針對程式設計師)程式設計師
- 在 VSCode 中編寫 Markdown 的進階指南VSCode
- BCB高手進階 (十)用Sender引數實現程式碼重用 (轉)
- node進階——之事無鉅細手寫koa原始碼原始碼
- 編寫一個 Makefile 檔案,對階段專案一的程式碼進行自動化編譯編譯
- 簡單分析――藍星廣告殺手 V3.20
- win10一直彈出垃圾廣告怎麼辦 win0電腦一直彈垃圾廣告怎麼清除Win10
- 跳槽季必看!程式設計師如何寫出殺手級簡歷程式設計師
- 一個js編寫全選、彈出對話方塊、ajax-json的案例JSON
- win10 彈窗廣告關閉方法 win10 彈出廣告怎麼關閉Win10
- 如何使用 vue + typescript 編寫頁面 (typescript進階-相容篇)VueTypeScript
- 使用Pandaria編寫API自動化測試進階用法API
- c++builder中怎樣進行標準輸入、出C++UI
- C++ Builser 高手進階 (六)在IE工具欄中新增按鈕 (轉)C++UI
- JVM菜鳥進階高手之路十四:分析篇JVM