2013-03-26 90 views
16

我想讓兩個連字符觸發一個短衝刺,三個連字符觸發一個長衝刺;像如何在AutoHotKey中使用Unicode?

:*?:---=::— 
:*?:--=::– 

除了工作。這裏是我已經得到給:

:*?:11:: 

SendLevel 1 

Send 2 

return 



SendLevel 0 

:*?:21::3 

這個作品(11產生2,111產生3)

:*?:--:: 

SendLevel 1 

Send – 

return 



SendLevel 0 

:*?:–-::— 

這是相同的腳本,但 '1' 已被取代的 ' - ' ,'2'被替換爲' - ','3'被替換爲'--'-「 - 」應該產生「 - 」,「---」應該產生「 - 」,但它不會產生「 - 」因爲我在使用的版本中沒有完全支持Unicode(AutoHotKey_L v1.1.09.04 from autohotkey.com)。

+0

你用*它回答了你自己的問題,因爲在我使用的版本中沒有完全支持Unicode,所以你尋找什麼答案? – 2013-04-13 12:43:33

+0

它的版本是 – 2013-04-15 15:36:43

回答

6

Autohotkey_L有unicode支持:http://l.autohotkey.net/。 新版本的Autohotkey提供開箱即用的Unicode支持:http://ahkscript.org/download/

+12

我使用的是AutoHotkey v1.1.22.07,並且unicode字符'❤'的熱鍵最初並不適合我。我最終發現我的'.ahk'文本文件需要用UTF8-BOM編碼而不是UTF8保存。 – Ryan 2016-08-10 05:31:28

1

我複製下面的代碼從AutoHotKey forums

;IMPORTANT, you must save this script as UTF-8 to make it work. 

::!?:: 
::?!:: 
PutUni("‽") 
Return 

::neko:: 
PutUni("貓") 
Return 

:?:damn:: 
PutUni("✩☠#‼") 
Return 

;Paste UTF8 string (Hex encoded or not) as unicode. 
;If you don't use Hex encoding, you must save your script as UTF8 
PutUni(DataIn) 
{ 
    SavedClip := ClipBoardAll 
    ClipBoard = 
    If RegExMatch(DataIn, "^[0-9a-fA-F]+$") 
    { 
     Loop % StrLen(DataIn)/2 
     UTF8Code .= Chr("0x" . SubStr(DataIn, A_Index * 2 - 1, 2)) 
    } 
    Else 
     UTF8Code := DataIn 

    Transform, ClipBoard, Unicode, %UTF8Code% 
    Send ^v 
    Sleep 100 ;Generous, less wait or none will often work. 
    ClipBoard := SavedClip 
    Return 
} 

PutUni功能將「翻譯」所需的輸入到所需的Unicode輸出。

+3

我剛剛使用'發送'命令,但它只在將編碼從UTF8更改爲UTF8 + BOM後才起作用。 – berezovskyi 2014-12-24 18:53:25

1

編輯:不需要閱讀我的答案,按照Udo Klein的說明,它更容易,它的工作原理應該如此。

如何使用最後一個autohotkey版本發送unicode字符? (不需要以前的兼容Unicode版本)

很難找到明確的信息。因此,要清楚的初學者(像我一樣):

  1. 複製/過去的「代碼A」,在你的腳本的末尾(應該在編碼ANSI)
  2. 複製/過去「代碼B」在你的腳本的頂部
  3. 找到你的Unicode字符代碼在這裏http://www.utf8-chartable.de/unicode-utf8-table.pl
  4. 4個數字複製的代碼B的U +
  5. 後(在你的腳本的頂部):更改密鑰你需要(之前的「::」)
  6. 在代碼B(在你的腳本的P):過去你2.找到0X的(而不是「2260」)之後的unicode的
  7. 保存腳本
  8. 雙擊腳本的圖標,它會替換/更新先前版本

代碼A:

SendUnicodeChar(charCode) 
{ 
VarSetCapacity(ki, 28 * 2, 0) 
EncodeInteger(&ki + 0, 1) 
EncodeInteger(&ki + 6, charCode) 
EncodeInteger(&ki + 8, 4) 
EncodeInteger(&ki +28, 1) 
EncodeInteger(&ki +34, charCode) 
EncodeInteger(&ki +36, 4|2) 


DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28) 
} 


EncodeInteger(ref, val) 
{ 
DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val)} 

代碼B:

!+^D:: ; when press CTRL+ALT+SHIFT will output "≠" 
{ 
SendUnicodeChar(0x2260) 
} 
return 

(看太空!)

需要改善:

不知何故這個劇本不適合本網站http://unicode-table.com/給出的所有Unicode工作,但有人會也許是一種足以告訴我們爲什麼一些Unicode的工作和其他唐't,也許如何使它適用於本網站的任何unicode字符。 這一個例如http://unicode-table.com/en/0609/不起作用。任何想法爲什麼?

+0

我希望有人發現爲什麼這個代碼不適用於每個unicode字符並完成此代碼。 – 2015-08-21 19:48:04

22

需要與UTF8-BOM編碼,而不是UTF8保存

正如this comment指出,發佈爲更多的知名度答案的.ahk文本文件。

+1

從我的角度來看,最好的答案。另外,這是設計。校對引用([source](https://www.autohotkey.com/docs/AHKL_ChangeLog.htm#v1.1.08.00)):「將默認腳本代碼頁更改爲ANSI,因爲之前的行爲是混亂,UTF-8文件現在必須有一個字節順序標記(BOM)才能被正確識別。「 – 2017-04-20 03:38:13

+0

非常感謝!保存了我的一天。我厭倦了AHK的「代碼頁」,不會導致任何結果自動更換。 – Dimiano 2017-06-26 13:00:45

+0

如何在Notepad ++中更改文件編碼? – 2017-09-07 13:33:20