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個分號處的說明。

##

您可能也會有興趣的類似文章

4 則留言 »AutoHotkey輸出中文的方法

  • Bear Unknow Unknow

    發現用方法一常常,輸入快一點,就會有之前剪貼簿的文字出現,如輸入addr’後出現地址,但立刻輸入me’沒有出現我的名字,而是地址,但如果用方法二,每輸入一個字詞都要用那麼長串的程式碼嗎?我用兩個字詞以上,reload時就會說錯誤…..不知這樣說,版大了解嗎?

  • yehmy Windows XP Firefox 3.0.8

    請問版主,如果要做一個螢幕小鍵盤,用來輸入"任意"的中文字,不是特定幾個字,
    是否變成要設計一套中文輸入法?
    那就工程浩大,我也頭大了!

    • 簡睿: Windows Vista Firefox 3.0.8

      這現有的輸入法不就可以了嗎?

      或者顯示注音符號或倉頡字根,可以讓使用者用點選的來組字,就像Windows Mobile上的輸入法。

      不過,組字還需要更多系統API,單純的Autohotkey應該是無能為力。

  • yehmy Windows XP Firefox 3.0.8

    現有的輸入法用到真實keyboard,我希望改變鍵盤的按鍵排列,所以想改用螢幕小鍵盤.

填寫回應

 

 

 

您可使用這些HTML標籤

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

隨機文章

  1. [Xuite] 文章標題列樣式的簡單變化 
  2. [Tools] 7-Zip的命令列指令 (4)
  3. 把文章的分類當做HEMiDEMi的標籤:Xuite自動書籤按鈕 V1.3 (2)
  4. [WordPress 3] 修改Twenty Eleven佈景主題在iPad瀏覽側邊欄的問題 (1)
  5. 旅遊前的設備準備: Sony CyberShot與OTG 
  6. 用JumpBox輕鬆安裝Subversion+Trac雙系統 
  7. [Subversion] 尋找Subversion Client工具 
  8. ThunderBird: 設定擴充套件的選項 
  9. 具有分析功能的短網址服務:cli.gs(音同clicks) 
  10. Taskbar Shuffle:工作列按鈕乾坤大挪移 

歷史熱門文章

  1. 如何手動輸入Plurk的表情圖示? (352,911 點擊/2008-09-29)
  2. 簡單放大Plurk輸入區的方法[修訂] (86,912 點擊/2008-09-29)
  3. 啟用&關閉中華電信ZyXEL P874的無線網路連線功能的步驟[修訂] (83,712 點擊/2011-06-01)
  4. Plurk CSS樣式自訂修改全攻略 (83,041 點擊/2009-07-04)
  5. 網路升級光世代50M/3M與設定ZyXEL P874 (53,128 點擊/2011-05-28)
  6. 輕鬆學會彈指神功-揭露AutoHotkey絕技 (43,111 點擊/2008-04-10)
  7. iPad新手入門技巧 (40,344 點擊/2011-02-05)
  8. 分享世博台灣館主題曲『台灣的心跳聲』MV(附歌詞+下載連結+新歌詞) (38,131 點擊/2010-04-27)
  9. 把HTC Touch HD操作介面換成Spb Mobile Shell,美觀又便利! (37,943 點擊/2009-02-18)
  10. 另一套適用手機的影片轉檔工具:WinAVI 3GP/MP4/PSP/iPod Video Converter (35,894 點擊/2009-04-18)