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. 備份驅動程式的軟體 
  2. 轉貼張天立(前博客來總經理)公開信之一 
  3. OpenOffice.org擴充的集中站 
  4. [Debug] 紅衫軍「事」威? 「示」威才對吧! (3)
  5. [Trac] 幫Trac裝上WYSIWYG編輯器 (3)
  6. 在Xuite測試 jQuery 
  7. 整合線上功能的翻譯軟體新秀:GoldenDict (4)
  8. 事件處理程式與物件的順序對FireFox很重要 
  9. [Tour] 金山綠峰山莊之旅 
  10. NetBeans的Subversion設定的最後一個步驟 

歷史熱門文章

  1. 如何手動輸入Plurk的表情圖示? (368,216 點擊/2008-09-29)
  2. 啟用&關閉中華電信ZyXEL P874的無線網路連線功能的步驟[修訂] (119,947 點擊/2011-06-01)
  3. Plurk CSS樣式自訂修改全攻略 (89,385 點擊/2009-07-04)
  4. 簡單放大Plurk輸入區的方法[修訂] (88,868 點擊/2008-09-29)
  5. 網路升級光世代50M/3M與設定ZyXEL P874 (71,883 點擊/2011-05-28)
  6. 輕鬆學會彈指神功-揭露AutoHotkey絕技 (50,794 點擊/2008-04-10)
  7. iPad新手入門技巧 (49,255 點擊/2011-02-05)
  8. iPad鍵盤輸入全攻略 (42,712 點擊/2011-01-01)
  9. 分享世博台灣館主題曲『台灣的心跳聲』MV(附歌詞+下載連結+新歌詞) (40,868 點擊/2010-04-27)
  10. 調整Windows 7環境: 加回工作列的「顯示桌面」圖示 (40,753 點擊/2010-01-02)