hot control ahk autohotkey

control - ¿Cómo uso Unicode en AutoHotKey?



hot key (3)

El archivo de texto .ahk debía guardarse con la codificación UTF8-BOM en lugar de UTF8

Como se señala en este comentario , la publicación como una respuesta para una mayor visibilidad.

Intento que dos guiones activen un guión corto y tres guiones activan un guión largo; me gusta

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

excepto trabajando Aquí es donde he llegado a:

:*?:11:: SendLevel 1 Send 2 return SendLevel 0 :*?:21::3

esto funciona (11 produce 2, 111 produce 3)

:*?:--:: SendLevel 1 Send – return SendLevel 0 :*?:–-::—

Este es el mismo script, pero ''1'' ha sido reemplazado por ''-'', ''2'' ha sido reemplazado por ''-'', y ''3'' ha sido reemplazado por ''-''— “-” debería producir "-" y "---" debería producir "-", pero no funciona porque Unicode no es totalmente compatible con la versión que estoy usando (AutoHotKey_L v1.1.09.04 de autohotkey.com).


Copié el siguiente código de los foros de AutoHotKey :

;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 función PutUni "traducirá" la entrada deseada a la salida Unicode deseada.


EDITAR: no se moleste en leer mi respuesta, siga las instrucciones de Udo Klein, es mucho más fácil y funciona como debería.

¿Cómo enviar caracteres Unicode usando la última versión de autohotkey? (no se necesita una versión anterior compatible con Unicode para funcionar)

Bastante difícil de encontrar información clara. Así que para que quede claro para los principiantes (como yo):

  1. Copie / pegue el "código A" que se encuentra al final de su script (debe estar codificado en ANSI)
  2. Copie / pegue el "código B" en la parte superior de su script
  3. encuentre su código de caracteres Unicode aquí http://www.utf8-chartable.de/unicode-utf8-table.pl
  4. Copia las 4 figuras después de la U +.
  5. en el código B (en la parte superior de su script): cambie la clave que necesita (antes de "::")
  6. en el código B (en la parte superior de su script): más allá del código Unicode que encontró en 2. DESPUÉS de la 0x (en lugar de la "2260")
  7. guarda tu guión
  8. Haga doble clic en el ícono de su script, reemplazará / actualizará la versión anterior.

Código 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)}

Código B:

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

(Mira el espacio!)

Mejora necesaria:

de alguna manera, este script no funciona para todos los códigos Unicode que ofrece este sitio web http://unicode-table.com/ , pero tal vez alguien tenga la amabilidad de decirnos por qué algunos códigos Unicode funcionan y otros no, y tal vez cómo para que funcione para cualquier carácter Unicode de este sitio web. Este, por ejemplo, http://unicode-table.com/en/0609/ no funciona. ¿Alguna idea de por qué?