[AHK-] [獻醜] 批幣能吃嗎 程式碼分享
這個程式是某天與朋友閒聊時一時興起所做的。程式的主要目的,就是模擬
逐字輸入的方式,將剪貼簿的文字內容慢慢地張貼到 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
11/10 20:13, 1F
→
11/10 21:20, , 2F
11/10 21:20, 2F
→
11/10 21:20, , 3F
11/10 21:20, 3F
→
11/11 05:40, , 4F
11/11 05:40, 4F
→
11/12 17:48, , 5F
11/12 17:48, 5F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
EzHotKey 近期熱門文章
PTT數位生活區 即時熱門文章