AutoHotkey輸出中文的方法
由於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個分號處的說明。
##
您可能也會有興趣的類似文章
- [Tools] 常用的AutoHotKey設定 (9則留言, 2005/05/12)
- 改寫AutoHotkey輸出中文字串的寫法 (4則留言, 2009/06/20)
- 幾個AutoHotkey的實用範例:音量控制、滾輪回上層與語音功能(AHK #7) (3則留言, 2019/06/05)
- 輕鬆學會彈指神功-揭露AutoHotkey絕技 (63則留言, 2008/04/10)
- [Tools] 操作熱鍵與熱字串的超便利工具:AutoHotKey (13則留言, 2005/04/29)
- 輕鬆學會AutoHotkey的熱鍵:熱鍵用法實例解說(AHK #4) (2則留言, 2019/05/24)
- AutoHotkey的進階剪貼簿功能:WinClip類別 (0則留言, 2019/10/26)
- 支援Unicode的Autohotkey終於浮上抬面! (3則留言, 2010/10/16)
- 用AutoHotkey輕鬆製作螢幕小鍵盤 (16則留言, 2008/03/16)
- 快速建立個人常用詞庫-AutoHotkey 熱字串小工具:HotString Helper(AHK #3) (0則留言, 2019/05/18)
- [AHK#53] AutoHotkey多行內容輸出時的偏移問題 (0則留言, 2022/07/31)
- AHK63|AutoHotkey V2 語言概述#1-字串、熱字串與變數 (0則留言, 2024/03/30)
- [AHK#58] 擷取豆瓣電影網的超簡單AutoHotkey爬蟲腳本程式 (0則留言, 2023/03/04)
- [AHK#39] 尋找網頁上特定文字並啟動的簡單作法 (0則留言, 2020/12/12)
- AutoHotkey腳本的4種除錯方法(AHK #5) (0則留言, 2019/05/25)
參考這個連結,這是有效解法
https://stackoverflow.com/questions/15635635/how-do-i-use-unicode-in-autohotkey
這篇過時了,AutoHotkey早就支援Unicode了,因此可以直接輸出中文。
果然厲害 測試再度成功 答案非常有用
跳脫字元四個字早就加入個人詞庫裡面
但始終不知道有甚麼用 現在終於明白
已經建立的腳本如下:
1.ahk
2.ahk
3.ahk
我想實現的目標是:
退出目前腳本 1.ahk 便會自動執行腳本 2.ahk
退出腳本 2.ahk 便會自動執行腳本 1.ahk
好想知道有無類似「F12::ExitApp」
這種快捷的方法去呼叫 1.ahk 和 2.ahk
執行 3.ahk 去呼叫 1.ahk 和 2.ahk 時
不想 3.ahk 的圖示出現在桌面的右下角
腳本應該怎樣寫呢
第一個需求範例如下,請自行測試:
1.ahk:
F11::MsgBox 1.ahk, press F11
F12::
run 2.ahk
ExitApp
—-
2.ahk:
F11::MsgBox 2.ahk, press F11
F12::
run 1.ahk
ExitApp
.ahk副檔名關聯到autohotkey.exe
最後的需求:
.ahk開頭加上
#NoTrayIcon
就不會有系統匣圖示。
測試成功
解答得十分到位
第一次看到範例時
的確有點疑惑和不大相信
但測試之後結果是全部命中
心中的難題一掃而空
還有個小小的問題一直困擾著我
就是想把「;」及「’」這兩個鍵的位置互相交換
但始終不得其法 有空再為我傷腦筋吧 不用急 祝好
remapping的說明: [Remapping Keys and Buttons](https://autohotkey.com/docs/misc/Remap.htm)
如下即可:
‘::;
`;::’
分號是Autohotkey script的註解符號,要帶跳脫字元(Escape character) ` 才能讓第二行生效。
如果我想按下Alt不放,鍵入鍵盤九宮格的45408後才放開Alt,這樣輸出個「常」字.我應該怎樣做?
如果在「倉頡輸入」的狀態下,我想鍵入「F」「B」「R」「L」「B」及空白鍵,這樣輸出個「常」字.請問腳本應該怎樣寫呢?
安裝Autohotkey_L即可支援Unicode了,可直接輸出中文,例如下列按Ctrl+Alt+w就輸出 常:
^!w::
send 常
return
簡睿你好,大家都好:
無意中又再發現「注意」「總開支」會出現問題(例如下面的設定),請問應如何解決呢?(不用急)
:*:EYZ::
clipboard = 注意
send ^v
return
:*:VAJZ::
clipboard = 總開支
send ^v
return
Autokey已經有支援Unicode的版本,可以直接使用中文輸出,不必透過剪貼簿了。
請參考支援Unicode的Autohotkey終於浮上抬面!。
sample:
*:EYZ::send 注意
無意中發現「常」字會出現問題(例如下面的設定),請問應如何解決呢?
::,AAJHRF::
clipboard = 日日都笑口常開
Send ^v
return
::,ABYJFB::
clipboard = 閒話家常
Send ^v
return
Autohotkey已經有Unicode的版本了(參考支援Unicode的Autohotkey終於浮上抬面!),請下載Autohotkey_L,以後就能直接 Send 日日都笑口常開
現有的輸入法用到真實keyboard,我希望改變鍵盤的按鍵排列,所以想改用螢幕小鍵盤.
請問版主,如果要做一個螢幕小鍵盤,用來輸入”任意”的中文字,不是特定幾個字,
是否變成要設計一套中文輸入法?
那就工程浩大,我也頭大了!
這現有的輸入法不就可以了嗎?
或者顯示注音符號或倉頡字根,可以讓使用者用點選的來組字,就像Windows Mobile上的輸入法。
不過,組字還需要更多系統API,單純的Autohotkey應該是無能為力。
發現用方法一常常,輸入快一點,就會有之前剪貼簿的文字出現,如輸入addr’後出現地址,但立刻輸入me’沒有出現我的名字,而是地址,但如果用方法二,每輸入一個字詞都要用那麼長串的程式碼嗎?我用兩個字詞以上,reload時就會說錯誤…..不知這樣說,版大了解嗎?