クリップボードを使わないで全角文字を貼付ける

管理人さんのSendConvスクリプトを関数に直して試してみた。
(コード内容はだいぶ最近仕様に変えちゃったけどロジックは同じです。)
サクラエディタとかだとOKなんだけど、
(´・ω・`)を秀丸上に吐き出すと (エ・ω・`)になっちまったり、
xyzzyだとアラートて怒られて貼付けられなかったり…
なんか貼付け先がS-JISじゃないと文字が化けたりする模様。
貼付け先が確実に化けないとわかってる場合以外は使うのは難しそう

send_test:
    ;--- IME OFF ---
    WinGet,hWnd,ID,A
    DefaultIMEWnd := DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)
    DetectSave := A_DetectHiddenWindows
    DetectHiddenWindows,ON
    SendMessage 0x283, 0x006,setSts,,ahk_id %DefaultIMEWnd%
    DetectHiddenWindows,%DetectSave%

    ;--- Send ---
    Send,% SendConv("キタ━━━━━━(゜∀゜)━━━━━━ !!")
return

SendConv(str)
;------------------------------------------
;   Send用にデータ作成(全角対応)
;   in  str 送信データ
;------------------------------------------
{
    fsave := A_FormatInteger
    SetFormat, integer, D       ;全角用 {ASC xxxx} は10進書出し

    p := &str
    Loop
    {
        if(*p = 0)
            break

        if (0x81 <= *p && *p <= 0x9F) || (0xE0 <= *p && *p <= 0xFC)
        {    ;--- 全角 ---
            res := res . "{ASC " . (*p << 8) + *(p+1) . "}"
            p++
        }
        else ;--- 半角 ---
        {
            char := chr(*p)
            if (0x80 < *p)
                res := res . "{ASC " . *p . "}"
            else if char in   !,#,+,^,{,}
                res := res . "{" . char . "}"
            else if (char = "`n")
                res := res . "{Enter}"
            else if (char != "`r")
                res := res . char
        }
        p++
    }
    SetFormat, integer, %fsave%
    return res
}

あーこのダイアリ、半角カナは自動的に全角に変換されるのね。まぁいいか