2013-03-26 7 views
16

Sto provando a fare in modo che due trattini attivino un trattino breve e tre trattini attivano un trattino lungo; comeCome utilizzare Unicode in AutoHotKey?

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

eccetto il lavoro. Qui è dove ho ottenuto a:

:*?:11:: 

SendLevel 1 

Send 2 

return 



SendLevel 0 

:*?:21::3 

questo funziona (11 produce 2, 111 produce 3)

:*?:--:: 

SendLevel 1 

Send – 

return 



SendLevel 0 

:*?:–-::— 

Questo è lo stesso copione, ma '1' è stato sostituito da '-' , "2" è stato sostituito da "-" e "3" è stato sostituito da "-'-" - "dovrebbe produrre" - "e" --- "dovrebbe produrre" - ", ma non lavoro perché Unicode non è completamente supportato nella versione che sto usando (AutoHotKey_L v1.1.09.04 da autohotkey.com).

+0

Hai risposto alla tua domanda con * non funziona perché Unicode non è completamente supportato nella versione che sto usando *, quale risposta stai cercando? –

+0

la versione che è –

risposta

6

Autohotkey_L aveva supporto per Unicode: http://l.autohotkey.net/. Nuove versioni di Autohotkey forniscono il supporto per Unicode fuori dalla scatola: http://ahkscript.org/download/.

+12

Sto usando AutoHotkey v1.1.22.07, e un tasto di scelta rapida con carattere unicode '❤' inizialmente non funzionava per me. Alla fine ho capito che il mio file di testo '.ahk' doveva essere salvato con la codifica UTF8-BOM piuttosto che UTF8. – Ryan

1

ho copiato il codice sotto dal 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 
} 

La funzione PutUni sarà "tradurre" l'ingresso desiderato all'uscita Unicode desiderato.

+3

Ho appena usato il comando "Invia", ma ha funzionato solo dopo aver modificato la codifica da UTF8 a UTF8 + BOM. – berezovskyi

1

MODIFICA: non preoccuparti di leggere la mia risposta, segui le istruzioni di Udo Klein, è molto più semplice e funziona come dovrebbe.

come inviare caratteri unicode utilizzando l'ultima versione di autohotkey? (non è necessario il funzionamento della precedente versione compatibile con Unicode)

Molto difficile trovare informazioni chiare. Quindi, per rende chiaro per i principianti (come me):

  1. copia/passato il "codice A" che, alla fine dello script (che dovrebbe essere in codificati in ANSI)
  2. copia/passato il "codice B" sulla parte superiore dello script
  3. trovare il codice di carattere Unicode qui http://www.utf8-chartable.de/unicode-utf8-table.pl
  4. copiare le 4 cifre dopo la U +
  5. nel codice B (nella parte alta dello script): cambiare la chiave necessario (prima di "::")
  6. nel codice B (sul p del tuo script): passato l'unicode trovato su 2. DOPO il 0x (invece del "2260")
  7. salva il tuo script
  8. doppio clic sull'icona del tuo script, sostituirà/aggiornerà il precedente versione

Codice 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)} 

Codice B:

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

(guarda lo spazio!)

miglioramento necessario:

in qualche modo questo script non funziona per tutti i unicode data dal questo sito http://unicode-table.com/, ma qualcuno sarà forse essere così gentile da dirci perché alcuni unicode stanno lavorando e altri don e forse come farlo funzionare per tutti i caratteri unicode di questo sito. Questo per esempio http://unicode-table.com/en/0609/ non funziona. Qualche idea del perché?

+0

Spero che qualcuno scopra perché questo codice non funziona per ogni carattere Unicode e completa questo codice. –

22

Il file di testo .ahk bisogno di essere salvato con UTF8-BOM codifica UTF-8 piuttosto che

Come sottolineato in this comment, la pubblicazione come una risposta per più visibilità.

+1

La migliore risposta, dal mio punto di vista. Inoltre, questo è di design. Prova di preventivo ([fonte] (https://www.autohotkey.com/docs/AHKL_ChangeLog.htm#v1.1.08.00)): "Modificata la codepage dello script predefinito su ANSI, poiché il comportamento precedente era una fonte comune di confusione I file UTF-8 devono ora avere un byte order mark (BOM) per essere riconosciuti correttamente. " –

+0

Grazie mille! Ho salvato la mia giornata. Sono stufo della "codepage" di AHK che non fornisce alcun risultato alla sostituzione automatica. – Dimiano

+0

Come può essere modificata la codifica del file in Notepad ++? –