1 (изменено: sememix, 2018-04-21 02:30:51)

Тема: AHK: Send Unicode

Привет народ.
Есть такая задача, заставить выводить unicode символы, пример - https://emojipedia.org/money-with-wings/

2 (изменено: teadrinker, 2018-04-21 07:25:32)

Re: AHK: Send Unicode

Можно через буфер обмена:

symHex := { MoneyWithWings: "D83DDCB8"
          , Dizzy:          "D83DDCAB"
          , Flag:           "D83DDEA9" }

$F1::
   if SetUnicodeFromHexToClipboard(symHex.MoneyWithWings)
      Send, ^{vk56}
   Return
   
$F2::
   if SetUnicodeFromHexToClipboard(symHex.Dizzy)
      Send, ^{vk56}
   Return
   
$F3::
   if SetUnicodeFromHexToClipboard(symHex.Flag)
      Send, ^{vk56}
   Return

SetUnicodeFromHexToClipboard(hex)  {
   static GMEM_ZEROINIT := 0x40, GMEM_MOVEABLE := 0x2, CF_UNICODETEXT := 13
   if mod(StrLen(hex), 4) || RegExMatch(hex, "i)[^\dA-F]")  {
      MsgBox, Wrong hex!
      Return
   }
   if !DllCall("OpenClipboard", Ptr, A_ScriptHwnd)  {
      MsgBox, Failed to open Clipboard!
      Return
   }
   DllCall("EmptyClipboard")
   hMem := DllCall("GlobalAlloc", UInt, GMEM_ZEROINIT|GMEM_MOVEABLE, Ptr, StrLen(hex)//2 + 2, Ptr)
   pMem := DllCall("GlobalLock", Ptr, hMem, Ptr)
   
   while str := SubStr(hex, 1 + (A_Index - 1)*4, 4)
      NumPut("0x" . str, pMem + (A_Index - 1)*2, "UShort")
   
   DllCall("GlobalUnlock", Ptr, hMem)
   res := DllCall("SetClipboardData", UInt, CF_UNICODETEXT, Ptr, hMem, Ptr)
   DllCall("CloseClipboard")
   if !res  {
      MsgBox, Failed to set data to Clipboard!
      Return
   }
   Return true
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Send Unicode

А зачем так сложно?

f1::
send, {U+1F4B8}

4

Re: AHK: Send Unicode

Был уверен, что какой-то простой способ есть, но не вспонил.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder