V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xboxv
V2EX  ›  问与答

懂 Autohotkey 的 v 友 能进来帮忙 看一下这个问题吗?

  •  
  •   xboxv · 19 小时 50 分钟前 · 253 次点击

    需求: 我自身有一个 v2 的 ahk 脚本, 主要是实现 按键映射, 比如#a >!w !f capslock & a 等等之类的.

    现在有一个新的需求: 当按下 f 的时候 如果同时 1.

    1. 按下了 i,则向上选中一行
    2. 按下了 k 则向下选中一行.
    3. 按下了 j 则向左多选中一个字符 另外还有 u/o/n/ml

    要求:

    1. 能够做到 按下 f 保持不释放, 然后按下 i 则向上选中一行,再次按下 i 又可以继续向上选中一行,这种连续性的操作.
    2. 不能影响我现有的脚本,或者修正现有的脚本.且保证 原有的 f 的功能不受影响, 比如 ctrl+f/alt+f/win+f 等都不要受到影响
    3. 最好不管当前是中文输入还是 en 输入都能实现上述功能, 或者退一步只在英文输入法下有效

    实现的脚本内容如下

    #Requires AutoHotkey v2.0
    #SingleInstance force
    InstallKeybdHook
    
    KeyHistory
    
    SetNumLockState "AlwaysOff"
    SetCapsLockState "AlwaysOff"
    DetectHiddenWindows true
    
    ~LWin:: Send "{Blind}{vkE8}"
    ~Alt:: Send "{Blind}{vkE8}"
    
    f & u:: {
        Send "+{Home}"
        Send "^{c}"
    }
    f & i:: {
        Send "+{Up}"
    }
    f & o:: {
        Send "+{End}"
        Send "^{c}"
    }
    
    f & k:: {
        send "+{Down}"
    }
    f & j:: {
        Send "+{Left}"
    }
    f & l:: {
        Send "+{Right}"
    }
    f & n:: {
        Send '^+{Left}'
    }
    f & m:: {
        Send '^+{Right}'
    }
    

    上面这段脚本存在的问题:会使得的 f 按键失去原本的功能.

    因此我尝试了~,波浪号 ~ 允许按键的默认功能继续执行 ~f & i:: { Send "+{Up}" }

    这样虽然 能够保证 f 的功能正常, 但是在 按下 f 和 i 实现向上选中行的时候会多输出一个 f. 因为~f & i 会使得 f 按键本身的功能透传给窗口

    而且在中文输入 "方法"这个汉字的时候 会出现输入字符错乱的清空. 具体的原因是 因为 定义了 f & n 这个 hotkey 在快速输入 fang 这个词组的时候触发了热键 f&n. 这个可以从 keyhistory 中看到

    4  03F	 	u	0.03	F5             	
    53  01F	 	d	2.83	s              	AHK v2 组合键行为 - Google Chrome
    53  01F	 	u	0.16	s              	
    48  023	 	d	0.03	h              	
    49  017	 	d	0.03	i              	
    46  021	h	d	0.05	f   ----------------------->这里也触发了 hotkey           	
    48  023	 	u	0.02	h              	
    49  017	 	u	0.00	i              	
    41  01E	 	d	0.05	a              	
    4E  031	h	d	0.06	n   -------------------------->看到这里触发了 hotkey           	
    A2  01D	i	d	0.00	LControl       	
    A0  02A	i	d	0.00	LShift         	
    25  14B	i	d	0.00	Left           	
    25  14B	i	u	0.00	Left           	
    A2  01D	i	u	0.00	LControl       	
    A0  02A	i	u	0.00	LShift         	
    41  01E	 	u	0.06	a              	
    4E  031	s	u	0.03	n              	
    47  022	#	d	0.01	g              	
    47  022	 	u	0.09	g              	
    74  03F	 	d	8.66	F5             	D:\program\AutoHotkey\ahk_scripts\demo.ahk - AutoHotkey v2.0.19
    

    综上而言 :

    1. 不加~ ,会使得 f 失去原本的功能.
    2. 加了 f, 热键 f&n 中的 f 会透传给窗口,而且 键盘在快速输入 词组 'fang'的时候会出现 触发热键 f&n 的 bug 导致输入存在问题.
    3 条回复    2025-03-12 15:30:21 +08:00
    Dogergo
        1
    Dogergo  
       19 小时 18 分钟前
    建议直接问 AI ,我就是 autoHotKey ,做剪贴板自动替换,后来发现自己写的不是很好用,直接让 Ai 用 python 写了个工具出来,可以自由配置规则,并决定要不要开启
    chenqh
        2
    chenqh  
       19 小时 16 分钟前
    这种我也不会啊.
    xboxv
        3
    xboxv  
    OP
       19 小时 12 分钟前
    @Dogergo ai 我也在用, 给的方案都不行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5605 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 02:42 · PVG 10:42 · LAX 19:42 · JFK 22:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.