由於AutoHotkey無法直接送出Unicode的中文,以前使用剪貼簿來輸出中文,現在找到直接輸出的新方法了。
方法一:使用剪貼簿的方法
::,tw:: oldClip = %Clipboard% ;; 把目前的剪貼簿內容先存起來 clipboard = 台灣 ;; 把要輸出的文字存入剪貼簿 Send ^v ;; 送出Ctrl+V貼上剪貼簿內容 Clipboard = %oldClip% ;; 再把剪貼簿還原 return
方法二:求出中文字的ASCII碼,直接送出這些碼
- 本方法來自對岸的高手:在脚本中使用Send发送中文
- 我們以「中文」兩個字來說明,首先將這兩個字存成一個文字檔,檔名取為test.txt
- 在DOS視窗下,用
debug test.txt命令進入除錯模式,減號出現後輸入 d 並按Enter鍵 - 開頭4個字元就是「中文」二字的ASCII碼,「中」字是A4 A4,「文」字是A4 E5
- 另外也可以用EmEditor來查閱中文字碼,將游標停在查閱字元前再按〔Ctrl+W〕,EmEditor即顯示該字元的Unicode碼與ASCII碼
- 16進位的A4A4是10進位的42148,A4E5則是42213,若按Alt+42148則輸出「中」字,Alt+42213則輸出「文」字
- 因此寫一個函數(_sendRaw)做上述字碼換算,再用Send送出
_sendRaw程式碼
::/zh::
_sendRaw("中文")
return
_SendRaw(Keys) {
Len := StrLen(Keys) ; 得到字串的長度,注意一個中文字元的長度是2
KeysInUnicode := "" ; 將要發送的字元序列
Char1 := "" ; 暫存字元1
Code1 := 0 ; 字元1的ASCII碼,值介於 0x0-0xFF (即1~255)
Char2 := "" ; 暫存字元2
Index := 1 ; 用於迴圈
Loop {
Code2 := 0 ; 字元2的ASCII碼
Char1 := SubStr(Keys, Index, 1) ; 第一個字元
Code1 := Asc(Char1) ; 得到其ASCII值
if(Code1 >= 129 And Code1 <= 254 And Index < Len) ; 判斷是否中文字元的第一個字元
{
Char2 := SubStr(Keys, Index+1, 1) ; 第二個字元
Code2 := Asc(Char2) ; 得到其ASCII值
if(Code2 >= 64 And Code2 <= 254) ; 若條件成立則說明是中文字元
{
Code1 <<= 8 ; 第一個字元應放到高8位上
Code1 += Code2 ; 第二個字元放在低8位元上
}
Index++
}
;; MsgBox %Code1%
if(Code1 <= 255) ; 如果此值仍<=255則說明是非中文字元,否則經過上面的處理必然大於255
Code1 := "0" . Code1
;;; KeysInUnicode = "" ;;; 若發現送出的中文變成ASCII數值,把此行開頭的分號刪掉
KeysInUnicode .= "{ASC " . Code1 . "}"
if(Code2 > 0 And Code2 < 64) {
Code2 := "0" . Code2
KeysInUnicode .= "{ASC " . Code2 . "}"
}
Index++
;;; Send %KeysInUnicode% ;;; 若發現送出的中文變成ASCII數值,把此行開頭的分號刪掉
if(Index > Len)
Break
}
Send % KeysInUnicode ;;; 若發現送出的中文變成ASCII數值,把此行開頭加上分號
Return ""
} ;; _sendRaw
測試
輸入 /zh 則輸出 中文 二字。
下載測試.ahk檔案:zh.ahk
備註
若有發現最後輸出的是類似 中42213 的文字,可能是輸出速度過快造成問題,可試著把Send指令移到迴圈裡,請看3個分號處的說明。
##
您可能也會有興趣的類似文章
- 改寫AutoHotkey輸出中文字串的寫法 (4則留言, 2009/06/20)
- [Tools] 常用的AutoHotKey設定 (9則留言, 2005/05/12)
- 支援Unicode的Autohotkey終於浮上抬面! (0則留言, 2010/10/16)
- 用AutoHotkey防止因按Esc鍵而不慎誤關視窗 (0則留言, 2011/04/01)
- [Tools] 操作熱鍵與熱字串的超便利工具:AutoHotKey (13則留言, 2005/04/29)
- 用AutoHotkey輕鬆製作螢幕小鍵盤 (12則留言, 2008/03/16)
- 如何轉換AutoHotkey的預設分隔字元:冒號 (2則留言, 2008/03/17)
- PhraseExpress:凡人版的AutoHotkey [修訂] (0則留言, 2009/11/28)
- 用AutoHotkey統一不同工具的偵錯功能鍵 (0則留言, 2008/03/19)
- 輕鬆學會彈指神功-揭露AutoHotkey絕技 (38則留言, 2008/04/10)
- [AutoHotkey] 在檔案總管裡按滑鼠滾輪切換到上層資料夾 (3則留言, 2011/06/23)
- 使用Autohotkey開發的熱字串替換工具:Texter (1則留言, 2007/03/06)
- AutoHotkey:在FireFox裡用鍵盤瀏覽網頁 (2則留言, 2008/03/27)
- [Tools] 撰寫AutoHotKey指令以複製檔案 (2則留言, 2005/06/11)
- 用AutoHotkey改造ThinkPad X61按鍵 (2則留言, 2008/03/23)















發現用方法一常常,輸入快一點,就會有之前剪貼簿的文字出現,如輸入addr’後出現地址,但立刻輸入me’沒有出現我的名字,而是地址,但如果用方法二,每輸入一個字詞都要用那麼長串的程式碼嗎?我用兩個字詞以上,reload時就會說錯誤…..不知這樣說,版大了解嗎?
請問版主,如果要做一個螢幕小鍵盤,用來輸入"任意"的中文字,不是特定幾個字,
是否變成要設計一套中文輸入法?
那就工程浩大,我也頭大了!
這現有的輸入法不就可以了嗎?
或者顯示注音符號或倉頡字根,可以讓使用者用點選的來組字,就像Windows Mobile上的輸入法。
不過,組字還需要更多系統API,單純的Autohotkey應該是無能為力。
現有的輸入法用到真實keyboard,我希望改變鍵盤的按鍵排列,所以想改用螢幕小鍵盤.