[AHK-] [獻醜] 批幣能吃嗎 程式碼分享

看板EzHotKey作者時間16年前 (2008/11/10 00:58), 編輯推噓1(104)
留言5則, 4人參與, 最新討論串1/2 (看更多)
這個程式是某天與朋友閒聊時一時興起所做的。程式的主要目的,就是模擬 逐字輸入的方式,將剪貼簿的文字內容慢慢地張貼到 BBS 上。 這個程式上個禮拜曾經在 EZsoft 發表過(#1926SN9Z),後來似乎有人反 應用了也沒增加批幣(倒)。不過那不是重點 XD 既然都寫出來了,還是分 享一下原始碼,給有心學習的人參考一下。 程式的原理很簡單,我選擇以 AutoHotKey 來實作,因為印象中他主打的就 是鍵盤滑鼠以及流程控制的功能。事實上我之前也沒接觸過這套,不過下載 安裝後,再照著他的文件說明做一次,一些基本功能就可以上手了。 在這個程式範例當中,使用到的技巧,包括簡單的流程控制、以對話框做成 與使用者的互動、對於剪貼簿、字串等等的處理,以及超基本的視窗偵測控 制等等。 為了確保我們要輸入的文字能夠確實地進到 PCMan 的視窗中,我還設計了 一個 _send function,來排除可能的干擾以及後續所造成的錯亂情況。 另外,為了模擬更真實的鍵盤輸入狀況,所以做了一個 _sleep function 來產生一個 500 ~ 1500 毫秒的延遲。其實這個只是做好玩的,感覺可有 可無,因為我不是很瞭解批踢踢評價文章批幣的方式,只知道一個字一個 字慢慢輸入,會比整篇複製貼上賺更多錢,但是至於到底需要多少延遲、 以及是否有必要設計這樣長短不一的延遲,就不是很清楚了。 程式的想法很單純,就是從剪貼簿讀入使用者想輸入的文字,然後透過一些 小技巧,將整篇文章分割成一個一個的文字小單位,然後用迴圈的方式逐一 貼到 PCMan 的視窗裡面,這樣就完成整個流程了。 附上程式碼如下,但是因為限於我對 AutoHotKey 的指令瞭解不算深,加以 思考邏輯上可能有一些盲點,所以程式也許不是那麼漂亮、想法不夠周延, 或是還有可以更加改進之處。這些都歡迎大家多多指教,或是提供更棒的想 法一起討論。 感謝大家耐心收看。 ---程式碼及簡單註解--- AppName = 批幣能吃嗎 ; 程式名稱 If WinExist("ahk_class PCMan") or WinExist("ahk_class PCManCB") { WinActivate MsgBox, 1, %AppName%, 發現 PCMan 視窗!`r`r`r ╮併 請將要張貼的內容複製至剪貼簿,並且確認已處於文章編輯模式之下。`r`r │一 請按下[確定]開始張貼`r或是按下[取消]結束本程式 ╯行 IfMsgBox OK { StringReplace, str, clipboard, `r`n, `r, all i = 1 Loop { check := NumGet(str, i - 1, "UChar") If check = 0 { ; 已經沒有內容要輸出,於是中斷 Break } Else { If check > 128 { ; 認定為全形字,這是 BIG5 編碼的規範 ; 本段參考 Lumania 的中文輸出範例,請見本板 #1901ve0f seg := SubStr(str, i, 2) seg := (check << 8) | NumGet(seg, 1, "UChar") i += 2 } Else { seg := SubStr(str, i, 1) If seg = `r or seg = `n seg = 13 ; PCMan 要這樣才能換行,這是實測經驗 Else seg := Asc(seg) ++i } _send(seg) _sleep() } } MsgBox, 0, %AppName%, 剪貼簿內容全部輸入完畢,按[確定]結束本程式。 } } Else { MsgBox, 0, %AppName%, 沒有發現 PCMan 視窗,請按[確定]結束程式。 } _send(asc) { ; 確認送出時,目標視窗處於前景,否則暫停程序 Global AppName If WinActive("ahk_class PCMan") or WinActive("ahk_class PCManCB") { Send, ^l ; 重新整理畫面(BBS 指令),否則有時候會送不出去,這是實測經驗 Send, {ASC %asc%} } Else { MsgBox, 1, %AppName%, 因為 PCMan 失去焦點,所以打字程序暫停。`r`r ╮併 按[確定]繼續未完成之工作`r │一 按[取消]結束目前工作 ╯行 IfMsgBox OK { WinActivate Send, ^l ; 重新整理畫面(BBS 指令),否則有時候會送不出去,這是實測經驗 Send, {ASC %asc%} } Else { Exit } } } _sleep() { ; 產生 500 ~ 1500 毫秒不等的打字間隔 Random, delay, 500, 1500 Sleep, %delay% } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.165.33.54

11/10 20:13, , 1F
這一篇文章值 616 銀 ( ̄y▽ ̄)╭
11/10 20:13, 1F

11/10 21:20, , 2F
聲明一下 我可沒用這個程式來輸入 XD
11/10 21:20, 2F

11/10 21:20, , 3F
應該是花了點時間來著色 才會有那麼多錢..
11/10 21:20, 3F

11/11 05:40, , 4F
謝謝原 PO 但是看樣子著色功能似乎還沒搞定 0.0"
11/11 05:40, 4F

11/12 17:48, , 5F
only pcman can do it that too...dont tell any one...
11/12 17:48, 5F
文章代碼(AID): #195nRBRh (EzHotKey)
文章代碼(AID): #195nRBRh (EzHotKey)