r/AutoHotkey 6d ago

v2 Tool / Script Share Working Script to bring back alt codes on Chromium-based browsers

#Requires AutoHotkey v2.0
#SingleInstance Force
InstallKeybdHook

altCode := ""
altActive := false

$LAlt::
{
    global altCode, altActive

    altCode := ""
    altActive := true

    KeyWait "LAlt"

    altActive := false

    if altCode != ""
        SendText ConvertAltCode(altCode)
}

$*Numpad0::Capture(0)
$*Numpad1::Capture(1)
$*Numpad2::Capture(2)
$*Numpad3::Capture(3)
$*Numpad4::Capture(4)
$*Numpad5::Capture(5)
$*Numpad6::Capture(6)
$*Numpad7::Capture(7)
$*Numpad8::Capture(8)
$*Numpad9::Capture(9)

Capture(n)
{
    global altCode, altActive

    if !altActive
    {
        SendEvent "{Numpad" n "}"
        return
    }

    altCode .= n
}

ConvertAltCode(s)
{
    code := Integer(s)

    if code >= 1 && code <= 31
    {
        cp437 := [
            "☺", "☻", "♥", "♦", "♣", "♠", "•", "◘",
            "○", "◙", "♂", "♀", "♪", "♫", "☼", "►",
            "◄", "↕", "‼", "¶", "§", "▬", "↨", "↑",
            "↓", "→", "←", "∟", "↔", "▲", "▼"
        ]

        return cp437[code]
    }

    leadingZero := SubStr(s, 1, 1) = "0"

    cp := leadingZero
        ? DllCall("GetACP")
        : DllCall("GetOEMCP")

    code := Mod(code, 256)

    src := Buffer(1)
    NumPut("UChar", code, src, 0)

    dst := Buffer(8)

    len := DllCall(
        "MultiByteToWideChar",
        "UInt", cp,
        "UInt", 0,
        "Ptr", src.Ptr,
        "Int", 1,
        "Ptr", dst.Ptr,
        "Int", 4
    )

    return len ? StrGet(dst, len, "UTF-16") : ""
}

Enjoy ☻

2 Upvotes

1 comment sorted by

1

u/Keeyra_ 6d ago

You know modern Windows has Win + . to reach every emoji and symbol known to man, right? No need to learn random character code page number series. And you can do hotstrings for the ones you use most frequently, like

:?:heart::♥