精華區beta EzHotKey 關於我們 聯絡資訊
這個程式是某天與朋友閒聊時一時興起所做的。程式的主要目的,就是模擬 逐字輸入的方式,將剪貼簿的文字內容慢慢地張貼到 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
yinjing:這一篇文章值 616 銀 ( ̄y▽ ̄)╭ 11/10 20:13
chweng:聲明一下 我可沒用這個程式來輸入 XD 11/10 21:20
chweng:應該是花了點時間來著色 才會有那麼多錢.. 11/10 21:20
pthuang:謝謝原 PO 但是看樣子著色功能似乎還沒搞定 0.0" 11/11 05:40
kslman:only pcman can do it that too...dont tell any one... 11/12 17:48