金年会 金字招牌诚信至上,金年会 金字招牌诚信至上,金年会 金字招牌诚信至上,金年会 金字招牌诚信至上

91手機維修論壇

標題: 用BCB自己打造QQ炸彈 [打印本頁(yè)]

作者: tianshiren    時(shí)間: 2008-11-6 18:55
標題: 用BCB自己打造QQ炸彈
俗話(huà)說(shuō)的好。翰粫(huì )編程的黑客就不是好黑客(我會(huì )編程,但我也不是黑客,因為我是個(gè)——程序員,哈哈)。今天呢我們就來(lái)親自動(dòng)手打造一個(gè)專(zhuān)屬于自己的小工具。    我們要做的是一個(gè)QQ炸彈,這年頭用QQ的人實(shí)在多。這林子大了可是什么鳥(niǎo)都有,當然其實(shí)我們今天做這個(gè)工具的威力并不是很大,頂多只能和好友聊天的時(shí)候騷擾一下。思路很簡(jiǎn)單,就是通過(guò)程序不停地模擬按鍵Ctrl+Enter自動(dòng)發(fā)送消息,不過(guò)當我們做成的時(shí)候心里自然也會(huì )有那么一種滿(mǎn)足和喜悅。
    編程工具的選擇其實(shí)很重要,像這樣的小東東如果用VC來(lái)做那真不是一般地麻煩,什么?你說(shuō)delphi很快?那倒是,不過(guò)會(huì )pascal的肯定沒(méi)會(huì )C的人多吧。就拿我們學(xué)校來(lái)說(shuō),基本對于所有的理工專(zhuān)業(yè)C語(yǔ)言都是必修課。對于快速的可視化開(kāi)發(fā)BCB當然是第一選擇,大伙們請安靜,因為,兼具了VC與 delphi共同優(yōu)點(diǎn)的武林第一神兵利器要隆重出場(chǎng)了,讓我們用熱烈的掌聲歡迎:Borland C++ Builder 6.0 (簡(jiǎn)稱(chēng)BCB)。
    程序詳細思路:首先打開(kāi)與好友的聊天窗口,程序通過(guò)窗口名搜索得到窗口句柄,下一步是自動(dòng)將要發(fā)送的語(yǔ)句拷貝到剪貼板中,然后激活聊天窗口讓其得到鍵盤(pán)輸入焦點(diǎn),最后就是通過(guò)循環(huán)不斷地模擬按鍵Ctrl+V和Ctrl+Enter了。
    啟動(dòng)BCB 6.0,它會(huì )默認自動(dòng)新建一個(gè)Application,在窗體上放一個(gè)PageControl控件(在Win32頁(yè)中),將其Align屬性設置為 alClient,新建一個(gè)TabSheet(很多人都說(shuō)怎么也找不到這個(gè)控件,其實(shí)新建它的方法是右鍵點(diǎn)擊PageControl,然后New Page就OK了),將其Caption屬性設置為“轟炸好友”,其余控件就根據我的圖片(沒(méi)法傳圖,不放了,看黑防吧)來(lái)放吧,當然您也可以自己發(fā)揮創(chuàng )造性弄個(gè)更漂亮的界面。
     從上到下三個(gè)編輯框(Edit控件)的Name屬性依次為NcikNameEdit,FrequentEdit,TimesEdit,最下面是個(gè)Memo 控件,Name屬性設置為WordMemo,好了,下面就用代碼說(shuō)話(huà)吧。(代碼側重程序實(shí)現原理,有所刪減,完整工程及代碼文件已經(jīng)打包)
首先我們要找到聊天窗口:
char WindowBuffer[MAX_PATH]; //存放窗口名的緩沖區
sprintf(WindowBuffer,"與 %s 聊天中",NickNameEdit->Text);
HANDLE hWindow = FindWindow(NULL,WindowBuffer); //查找窗口
if( hWindow == NULL )
{
ShowMessage("抱歉,沒(méi)有找到此聊天窗口!");
return;
}
這樣我們得到了聊天窗口的句柄hWindows,然后就可以開(kāi)工編寫(xiě)轟炸的代碼了。
this->Hide(); //隱藏窗口,沒(méi)必要顯示
for(int i=1;i<=StrToInt(TimesEdit->Text);i++)
{ //因為編輯框里面默認都是String類(lèi)型,所以我們要通過(guò)StrToInt將
//轟炸次數轉換成int型才能在循環(huán)中使用它
WordMemo->SelectAll(); //選中全部語(yǔ)句
WordMemo->CopyToClipboard; //將其拷貝到剪貼板
SetForegroundWindow(hWindow); //將聊天窗口激活使其得到鍵盤(pán)焦點(diǎn)
StartBomb(); //調用炸彈函數開(kāi)始轟炸
Sleep(StrToInt(FrequentEdit->Text)); //暫停一段時(shí)間后繼續下一個(gè)循環(huán)
}
this->Show(); //執行完畢后顯示窗口
其中StartBomb()函數的代碼如下:
void __fastcall TMainForm::StartBomb(void)
{
keybd_event(VK_CONTROL,0,0,0); //模擬按下Ctrl鍵
keybd_event('V','V',0,0); //模擬按下V鍵,必須為大寫(xiě)
keybd_event('V','V',KEYEVENTF_KEYUP,0); //模擬放開(kāi)V鍵
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); //模擬放開(kāi)Ctrl鍵
keybd_event(VK_CONTROL,0,0,0);
keybd_event(VK_RETURN,0,0,0); //模擬按下Enter鍵
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
}
關(guān)于keybd_event()的詳細用法網(wǎng)上有很多,還有模擬鼠標事件的相關(guān)函數。
    這樣一個(gè)QQ炸彈的模型就已經(jīng)出爐了,記。核皇莻(gè)模型。如果要做好一個(gè)軟件的話(huà),絕不僅僅是可以用了就成,我們更需要考慮用戶(hù)的友好性、程序的完善性等等,限于篇幅就不多廢話(huà)了。由于時(shí)間限制,我做這個(gè)測試炸彈的時(shí)候也沒(méi)有更多地進(jìn)行優(yōu)化,對于“炸QQ群”的功能與以上原理是一樣的,只要能找到其窗口就可以了。關(guān)于托盤(pán)圖標,我們可以使用BCB自帶的TrayIcon控件(在Samples頁(yè)),然后簡(jiǎn)單設置一下屬性就可以使用了,很方便。
    這個(gè)程序有一個(gè)BUG,是編碼問(wèn)題。如果要發(fā)送的字符是中文的話(huà)它發(fā)送到聊天窗口中就變成了亂碼,限于時(shí)間原因我沒(méi)能找出真正的解決方法。不過(guò)在嘗試解決它的過(guò)程中卻學(xué)到了操作剪貼板的方法,因為那個(gè)CopyToClipboard()只是BCB中的一個(gè)成員函數,在其他地方不能直接使用,我們可以通過(guò)一系列的函數來(lái)實(shí)現這種功能,下面給出一段實(shí)例代碼:
AnsiString buffer; //保存要拷貝的字符
OpenClipboard(NULL); //打開(kāi)系統剪貼板
EmptyClipboard(); //使用之前要先清空剪貼板
HGLOBAL hClipData; //分配一段內存,大小等于要復制的字符串的大小
hClipData = GlobalAlloc(GMEM_DDESHARE,buffer.Length()+1);
char *pchData; //內存控制句柄加鎖
pchData = (char *)GlobalLock(hClipData);
strcpy(pchData,buffer.c_str()); //將變量值賦給全局內存
GlobalUnlock(hClipData); //給內存控制句柄解鎖
SetClipboardData(CF_TEXT,hClipData); //通過(guò)全局內存句柄將數據以相應的格式放進(jìn)剪貼板
CloseClipboard(); //使用完后記得關(guān)閉剪貼板
這段代碼通常用來(lái)完成進(jìn)程間通信等功能,由于其使用簡(jiǎn)單,容易理解,所以用處還是比較廣泛的。
最后說(shuō)一點(diǎn)有關(guān)BCB的小技巧:
1,默認情況下你會(huì )發(fā)現它生成的可執行程序很小,但卻不能在沒(méi)有安裝BCB或delphi的機器上運行,我們需要設置一下:在project-> Options->Compiler中點(diǎn)擊Release,在project->Options->Packages中取消 Builder with runtime packages的勾,在project->Options->Linker中取消Use dynamic RTL前的勾。
2,更換BCB自帶的圖標,Project/Options/Application/LoadIcon,目標圖片必須是ico格式。
3,如果您是BCB的初學(xué)者的話(huà),我推薦《C++ Builder初學(xué)問(wèn)與答》這一系列文章,基本上對BCB中所有的常用控件都做了詳細的說(shuō)明,非常有用。
作者: 精修本本    時(shí)間: 2008-11-9 14:29

作者: hack_r    時(shí)間: 2008-11-10 13:17
提示: 作者被禁止或刪除 內容自動(dòng)屏蔽
作者: tzjsyc    時(shí)間: 2008-11-10 16:53
有沒(méi)有改BCD的最,啟動(dòng)菜單,我的VIST已經(jīng)刪掉了,但是每次默認都是從VIST啟動(dòng)
作者: awfitjh    時(shí)間: 2008-11-20 18:03
好強,有這個(gè)東西,別人不會(huì )罵我吧!
作者: ycjd    時(shí)間: 2009-2-23 19:51
沒(méi)怎么看明白
作者: nconline    時(shí)間: 2009-4-14 17:12
學(xué)習了
作者: wang.362514    時(shí)間: 2009-6-8 11:17
好強,有這個(gè)東西,別人不會(huì )罵我吧
作者: 七葉雪    時(shí)間: 2009-10-24 22:28
看不懂啊  太深奧了




歡迎光臨 91手機維修論壇 (http://www.jstransmit.com/) Powered by Discuz! X3.4
林口县| 五台县| 安宁市| 夹江县| 瑞安市| 陕西省| 凌源市| 莆田市| 涟源市| 中牟县| 柘荣县| 张家口市| 城固县| 当涂县| 屏东市| 马鞍山市| 炉霍县| 和静县| 锡林郭勒盟| 小金县| 冕宁县| 新化县| 全南县| 任丘市| 尖扎县| 临朐县| 武城县| 南投市| 博兴县| 永善县| 武强县| 七台河市| 焦作市| 桓台县| 安福县| 方城县| 吴江市| 中超| 青川县| 平塘县| 敦煌市|