首页 » 操作系统 » macOS » 正文

macOS/Windows 将 CapsLock + HJKL 变为 arrow keys 方向键(不影响 CapsLock 本身的功能)

发布者:站点默认
2025/03/9 浏览数(11) 分类:macOS, Windows macOS/Windows 将 CapsLock + HJKL 变为 arrow keys 方向键(不影响 CapsLock 本身的功能)已关闭评论

macOS

Karabiner-Elements.app

建议将 cpas_lock 换为 fn,以防止与 macOS 一键打开/切换到 App(替代 Cmd + Tab) 中的按键产生冲突。

{
    "description": "方向: caps_lock + h/j/k/l",
    "manipulators": [
        {
            "from": {
                "key_code": "h",
                "modifiers": {
                    "mandatory": ["caps_lock"],
                    "optional": ["any"]
                }
            },
            "to": [{ "key_code": "left_arrow" }],
            "type": "basic"
        },
        {
            "from": {
                "key_code": "j",
                "modifiers": {
                    "mandatory": ["caps_lock"],
                    "optional": ["any"]
                }
            },
            "to": [{ "key_code": "down_arrow" }],
            "type": "basic"
        },
        {
            "from": {
                "key_code": "k",
                "modifiers": {
                    "mandatory": ["caps_lock"],
                    "optional": ["any"]
                }
            },
            "to": [{ "key_code": "up_arrow" }],
            "type": "basic"
        },
        {
            "from": {
                "key_code": "l",
                "modifiers": {
                    "mandatory": ["caps_lock"],
                    "optional": ["any"]
                }
            },
            "to": [{ "key_code": "right_arrow" }],
            "type": "basic"
        }
    ]
}

Windows

AutoHotKey v1

#SingleInstance Force
#InstallKeybdHook
Menu, Tray, Tip, CapsLock + HJKL to arrow keys

; P:是否按下,T:是否开启
; 只有松开后状态才会切换,只要未松开状态就是按下前的状态
#If GetKeyState("CapsLock", "P")
  h::
    Send {Left}
    initialCapsLockState := GetKeyState("CapsLock", "T")
  return
  j::
    Send {Down}
    initialCapsLockState := GetKeyState("CapsLock", "T")
  return
  k::
    Send {Up}
    initialCapsLockState := GetKeyState("CapsLock", "T")
  return
  l::
    Send {Right}
    initialCapsLockState := GetKeyState("CapsLock", "T")
  return
  ; 将当前窗口置顶/取消置顶
  t::
    initialCapsLockState := GetKeyState("CapsLock", "T")
    ;WinSet, AlwaysOnTop, Toggle, A
    ;置顶的同时增加透明度以区分是否被置顶
    WinGet, alpha, Transparent, A
    isTop := IsWindowTopmost()
    WinSet, AlwaysOnTop, % (isTop ? "Off", "On"), A
    WinSet, Transparent, % (isTop ? 255, 200), A     ; 0透明,255不透明
#If

; 如果写了UP则需要手动处理切换状态,如果方法体为空则不切换
CapsLock Up::
  ; 仅按下 CapsLock 未使用组合键时切换 CapsLock 的状态、使用组合键则保持现状不执行切换(什么也不做)
  if (initialCapsLockState = "") {
    SetCapsLockState % !GetKeyState("CapsLock", "T")
  }
  ; 重置变量
  initialCapsLockState := ""
return

; 检测当前窗口是否已置顶
IsWindowTopmost() {
  activeWindow := WinExist("A")
  exStyle := DllCall("GetWindowLong", "Ptr", activeWindow, "Int", -20)
  return (exStyle & 0x00000008) != 0
}
点击返回顶部
  1. 留言
  2. 联系方式