文/崔彥鋒
本人非常喜歡編程,對網絡編程最感興趣,所以就想編個程序到BBS上發帖子,達到提高經驗值的目的。今天把它寫出來,和大家一起分享。
基本知識
剪貼板在Windows中是一個好東東,在VB的編程中同樣有用。在VB中,它其實就是Cli pBoard對象,專門用于處理剪貼板上的文本和圖像。使用之前最好先用Clear方法清除以前的內容。
發送文本還可以利用的就是SendKeys方法。把你要發送的文本放入一個變量,比如MyStr中,然后使用“SendKeys MyStr”語句就可以了。但是SendKeys的功能并不只限于這樣,它最大的作用是發送一個或多個擊鍵動作到其他程序中,想要發送哪個鍵值,只要使用以下語句即可:
SendKeys "該鍵在鍵盤注明的名稱"
這就為我們利用其他程序中的快捷鍵提供了可能,進而我們就可以在自己的程序中控制其他程序的動作。如果我們想發送Ctrl+V這個粘貼的指令,就可以用以下語句:
SendKeys "^c"
其中Ctrl用“^”來代替。類似的組合鍵還有Shift和Alt,分別用“+”和“%”(后面的例子中會用到Shift)。但是在用ClipBoard對象或SendKeys方法之前,還必須先用AppActivate語句激活需要通信程序的窗口。它的用法是:
AppActivate +“所要激活應用程序窗口標題”
比如一個記事本,正在編輯的文件名為my.txt,用以下語句來激活它要保持自己的程序:
AppActivate "my.txt - 記事本" 。
通信中還必須注意的問題就是和被調用程序運行之間的步調一致,也就是所謂的同步控制。那就要用到DoEvents函數,它的作用是轉讓控制權,以便操作系統處理事件。只要有意識地在程序中需要的地方加入DoEvents就可以了。在有多次的循環語句中,相信大家都使用過這個語句。與DoEvents相配合的還有就是一個API函數Sleep(),必須先聲明:
Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
具體的Sleep時間需要自己去實踐。
代碼實現
要用到的基本知識已經講完了,下面讓我們來看看編寫“灌水機”的部分關鍵代碼:(其中DoEvents語句用漢字“返”代替,Sleep()函數用“等”漢字代替)
Private Sub CmdBegin_Click()
On Error GoTo 0
'為字符串變量title和txtfromfile賦值的語句省略了,最好和文本文件結合使用。
Clipboard.Clear
Clipboard.SetText title
AppActivate ("虎踞龍盤") '我用Cterm上的虎踞龍盤東南站,窗口標題為“虎踞龍盤”
等,返,等 '即依次執行語句DoEvents Sleep (100) DoEvents,下同
SendKeys ("^p") 'Cterm程序中發文用的快捷鍵
返 SendKeys "+{insert}" 'Cterm程序中粘貼文本的快捷鍵
返,等,返 SendKeys "{enter}" '發文必須用的回車動作
返SendKeys "{enter}" 返,等,返
'以上語句就實現了向Cterm程序發送文章的標題
Clipboard.Clear
Clipboard.SetText txtfromfile
返,等,返
SendKeys "+{insert}" 返
SendKeys "^w" 'Cterm中的發文動作
返 SendKeys "^w" 返
SendKeys "{enter}" '一篇文章已經發送完畢,在以后的語句中進入下一個循環
End Sub
以上就是一個BBS發文程序的關鍵部分:與Cterm程序反復的進行通信,并進行同步的控制。它進行反復的循環,就會一篇篇地把本地機器上的文本傳到BBS上(其實是僅僅傳給了Cterm),這樣利用程序間的通信,就避免了進行網絡編程。
|