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

 找回密碼
 注冊

QQ登錄

只需一步,快速開(kāi)始

查看: 2274|回復: 8
打印 上一主題 下一主題

[分享] 用BCB自己打造QQ炸彈

跳轉到指定樓層
1#
tianshiren 發(fā)表于 2008-11-6 18:55:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式 來(lái)自 中國山東青島

馬上注冊,結交更多好友,享用更多功能。

您需要 登錄 才可以下載或查看,沒(méi)有帳號?注冊

x
俗話(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ō)明,非常有用。
2#
精修本本 發(fā)表于 2008-11-9 14:29:07 | 只看該作者 來(lái)自 中國山東青島
頭像被屏蔽
3#
hack_r 發(fā)表于 2008-11-10 13:17:06 | 只看該作者 來(lái)自 中國河北衡水
提示: 作者被禁止或刪除 內容自動(dòng)屏蔽
     
4#
tzjsyc 發(fā)表于 2008-11-10 16:53:09 | 只看該作者 來(lái)自 中國四川遂寧
有沒(méi)有改BCD的最,啟動(dòng)菜單,我的VIST已經(jīng)刪掉了,但是每次默認都是從VIST啟動(dòng)
5#
awfitjh 發(fā)表于 2008-11-20 18:03:21 | 只看該作者 來(lái)自 中國湖南長(cháng)沙
好強,有這個(gè)東西,別人不會(huì )罵我吧!
6#
ycjd 發(fā)表于 2009-2-23 19:51:43 | 只看該作者 來(lái)自 中國天津
沒(méi)怎么看明白
7#
nconline 發(fā)表于 2009-4-14 17:12:58 | 只看該作者 來(lái)自 中國江蘇南通
學(xué)習了
8#
wang.362514 發(fā)表于 2009-6-8 11:17:09 | 只看該作者 來(lái)自 中國廣東深圳
好強,有這個(gè)東西,別人不會(huì )罵我吧
9#
七葉雪 發(fā)表于 2009-10-24 22:28:33 | 只看該作者 來(lái)自 中國湖南邵陽(yáng)
看不懂啊  太深奧了
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

快速回復 返回頂部 返回列表
岳池县| 巨鹿县| 抚松县| 手游| 罗城| 沙湾县| 博罗县| 桃江县| 巧家县| 尖扎县| 卓尼县| 金华市| 张北县| 黎平县| 泰来县| 兴义市| 武邑县| 连江县| 宾阳县| 潞西市| 昌平区| 儋州市| 资兴市| 玉门市| 峡江县| 扎鲁特旗| 当雄县| 玉溪市| 斗六市| 成安县| 浦城县| 如东县| 乌拉特后旗| 阿巴嘎旗| 中超| 中西区| 马公市| 丹寨县| 三门峡市| 藁城市| 枣强县|