如何使用 autohotkey 实现 ; 和 : 键互换

95 天前
 Dganzh

个人觉得:更高频使用,不想每次都按 shift+;来输出:

1020 次点击
所在节点    软件
9 条回复
infoscope
95 天前
PowerToys 里有改键工具
Mithril
95 天前
其实软件的话,就两种方法
要么 hook 类的,比如 PowerToys 。但有的软件会顶掉你的 hook ,比如 mstsc 。
另外就是驱动级的,比如 https://github.com/cajhin/capsicain 这类的。虽说他们用的驱动也是签过名的,但这种非常底层的映射也有可能被某些程序视为恶意软件。


最好用的,找个支持硬件改键的键盘。有的键盘固件支持这种功能,之前大 F 的某些款甚至还带跳线开关,不过开关只能映射几个键。

自己选个方案,随便找找就行了。
crazyweeds
95 天前
autohotkey 应该非常简单,曾经用它直接换了键盘布局。。在一些场景下会失效,比如 qq 密码输入框,大概率是不行的。
loginv2
95 天前
楼上几位可能没有自己试过这个问题,楼主估计试过,这个问题我感觉并不好写,难点以上个 shift 和单独按键这俩事件不能冲突,另一个是;是关键字,需要处理转义,反正我写了半天是没成功,要么只有一个好使,要么就全都失灵
给楼主另一个思路 ,单击输入 冒号,双击输入分号

$`;::
if pressesCount > 0 ; > 0 说明 SetTimer 已经启动了,按键次数递增
{
pressesCount += 1
return
}
;否则,这是新一系列按键的首次按键。将计数设重置为 1 ,并启动定时器:
pressesCount = 1
SetTimer, WaitKey, 400 ;在 400 毫秒内等待更多的按键。
return

WaitKey:
SetTimer, WaitKey, off
if pressesCount = 1 ;该键已按过一次。
{
Gosub singleClick
}

else if pressesCount = 2 ;该键已按过两次。
{
Gosub doubleClick
}
;不论上面哪个动作被触发,将计数复位以备下一系列的按键:
pressesCount = 0
return

singleClick:
send :
return

doubleClick:
send {;}
return
loginv2
95 天前
不熟悉 ahk 语法,如果有大佬实现了楼主的想法,非常好奇是怎么实现的
weijancc
95 天前
@loginv2 #5 不用那么复杂的, ahk 可以配置不触发脚本内定义的逻辑, 用三行 ahk 就能实现楼主需求.

```ahk
#UseHook on
`;::SendInput, :
:::SendInput, `;
```
tyrone2333
95 天前
我也一直在找对调的方法-- win 上没实现, mac 用 Karabiner 换键位倒是很简单
sankemao
94 天前
$`;::Send `:
$+`;::Send `;
Dganzh
94 天前
试了 8 楼的,可以了。
感谢大家!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1013925

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX