web-dev-qa-db-ja.com

AutoHotKeyでUnicodeを使用するにはどうすればよいですか?

2つのハイフンが短いダッシュをトリガーし、3つのハイフンが長いダッシュをトリガーするようにしようとしています。お気に入り

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

働くことを除いて。これが私が得たところです:

:*?:11::

SendLevel 1

Send 2 

return



SendLevel 0

:*?:21::3 

これは機能します(11は2を生成し、111は3を生成します)

:*?:--::

SendLevel 1

Send –

return



SendLevel 0

:*?:–-::—

これは同じスクリプトですが、「1」は「-」に置き換えられ、「2」は「–」に置き換えられ、「3」は「—」に置き換えられました。「-」は「–」を生成するはずです。 「---」は「—」を生成するはずですが、使用しているバージョン(autohotkey.comのAutoHotKey_L v1.1.09.04)ではUnicodeが完全にサポートされていないため、機能しません。

23
Eamon Moloney

.ahkテキストファイルは、UTF8ではなくUTF8-BOMエンコーディングで保存する必要がありました

このコメント で指摘されているように、より多くの可視性のための回答として投稿します。

45
laggingreflex

編集:わざわざ私の答えを読む必要はありません。UdoKleinの指示に従ってください。はるかに簡単で、正常に機能します。

最後のオートホットキーバージョンを使用してUnicode文字を送信する方法は? (以前のユニコード互換バージョンが機能する必要はありません)

明確な情報を見つけるのは非常に困難です。したがって、初心者(私のような)に明確にするために:

  1. スクリプトの最後にある「コードA」をコピーして貼り付けます(ANSIでエンコードされている必要があります)
  2. スクリプトの上部にある「コードB」をコピーして貼り付けます
  3. ここでUnicode文字コードを見つけてください http://www.utf8-chartable.de/unicode-utf8-table.pl
  4. u +の後に4つの数字をコピーします
  5. コードB(スクリプトの上部):必要なキーを変更します(「::」の前)
  6. コードB(スクリプトの上部):2で見つけたUnicodeを過ぎた後(「2260」の代わりに)0xの後
  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

(スペースを見てください!)

必要な改善:

どういうわけか、このスクリプトは、このWebサイトで提供されているすべてのUnicodeに対して機能するわけではありません http://unicode-table.com/ ですが、誰かが親切に、一部のUnicodeが機能している理由などを教えてくれるでしょう。そうしないでください、そして多分それをこのウェブサイトのユニコード文字のために動かす方法。たとえばこれは http://unicode-table.com/en/0609/ は機能しません。理由は何ですか?

1
JinSnow

以下のコードを 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
}

PutUni関数は、目的の入力を目的のUnicode出力に「変換」します。

1
John Willemse