希望最终效果:
① 按 空格+a/b/…/z/1/2/…/0/鼠标左键 /右键,映射成 shift+a/b/…/z/1/2/…/0/鼠标左键 /右键
② 按 空格+鼠标左键 框选,映射成 shift+鼠标左键 框选
③ 单独按 空格,就还是空格
试了两种方法,都不行:
第一种:
space::LShift
,但这种方法,效果③(单独按空格仍然是空格)不知道怎么办
第二种:一条一条的写
Space:: SendInput, {Space}
Space & 1:: SendInput, +1
……
Space & 0:: SendInput, +0
Space & LButton:: SendInput, +{LButton}
Space & RButton:: SendInput, +{RButton}
Space & a:: SendInput, +a
……
但这种写法,效果②就是 框选怎么写呢?
求助大家
dms
2
自定义组合键及其他特性
通过在两个按键 (不包括操纵杆按钮) 间使用 “&” 可以定义定制的组合键. 在下面的例子中, 您在按住 Numpad0 接着按下第二个按键时会触发此热键:
Numpad0 & Numpad1::MsgBox You pressed Numpad1 while holding down Numpad0.
Numpad0 & Numpad2::Run Notepad
在上面的例子中, Numpad0 成为 前缀键; 但是这也让 Numpad0 在被按下时失去了它原有的功能. 为了避免此问题, 脚本中可以配置 Numpad0 执行新的动作, 例如下列热键的其中一个:
Numpad0::WinMaximize A ; 最大化活动/前端窗口.
Numpad0::Send {Numpad0} ; 让 Numpad0 释放 时产生 Numpad0 键击. 请参阅下面的注释.
使用上面的其中一个自定义组合热键可以在释放Numpad0时执行指定的动作,但仅在您之前按住Numpad0时没有按其他任何按键的情况下。在v1.1.14+中,可以在其中某个热键使用颚化符前缀来避免这种行为。
*
通配符: 即使附加的修饰键被按住也能激发热键. 这常与 重映射 按键或按钮组合使用. 例如:
*#c::Run Calc.exe ; Win+C、Shift+Win+C、Ctrl+Win+C 等都会触发此热键。
*ScrollLock::Run Notepad ; 即使在按住其他修饰键时按下 ScrollLock 也会触发此热键。
~
激发热键时,不会屏蔽(被操作系统隐藏)热键中按键原有的功能。在下面的两个例子中, 用户的鼠标按钮点击会被发送到活动窗口:
~RButton::MsgBox You clicked the right mouse button.
~RButton & C::MsgBox You pressed C while holding down the right mouse button.
注意:1) 与其他前缀符号不同,可以在某些热键的变体中使用颚化符前缀而其他的不使用;2) 代替 alt-tab 的特殊热键总是忽略颚化符前缀。
[v1.1.14+]:如果把颚化符前缀用在自定义修饰键中且此修饰键自身也作为热键,则在按下此修饰键时会触发热键而不会被延迟到按键释放的时候。例如,上文中~RButton热键在按下此按键时就会触发。对于v1.1.14之前的版本(或未使用颚化符前缀), 则会在按键释放时触发其自身的热键,不过仅在未触发RButton & C组合键的时候。
$
通常只在脚本使用 Send 命令发送包含了热键自身的按键时才需要使用此符号, 此时可以避免触发它自己. 前缀强制使用 键盘钩子 来实现此热键, 作为一个副作用这样避免了 Send 命令触发它自己. 前缀相当于在此热键定义之前的某个位置指定了 #UseHook。
[v1.1.06+]: #InputLevel 和 SendLevel 对 Send 命令是否触发热键和热字串提供了额外的控制功能.
以上均摘自 AHK 官方说明文档
allor
4
;Shift+左键单击
Space & LButton UP:: SendInput, +{LButton}
;Shift+左键框选(按下)
Space & LButton:: SendInput, +{LButton Down}
已解决。框选只靠allor那一行是不够的,空格和鼠标抬起时,仍然没lbutton up
Space::Shift
Space Up::
SendInput {Shift Up}
if (A_PriorKey = "Space" and GetKeyState("Ctrl") = 0 and GetKeyState("Shift") = 0 and GetKeyState("Alt") = 0)
{
if (sLButtonClicked = 1)
{
sLButtonClicked = 0
}
else
{
SendInput {Shift}{Space}
}
}
Return
*~LButton::
if (GetKeyState("Shift") = 1)
{
sLButtonClicked = 1
}
Return
2 个赞
其实看到你的问题的时候我就在想有没有硬件解决方案,然后发现了新大陆,事实上现在有大量可编程机械键盘,并且很多是开源的。下面这个不但可以实现你的需求,甚至拥有多达32层的键盘布局。https://ergodox-ez.com/
qiuzip
7
请教一下改成win键怎么改?
按 空格 +a/b/…/z/1/2/…/0,映射成 win +a/b/…/z/1/2/…/0
单独按 空格,就还是空
专业,直接我把我看晕了,不过我最近在研究AHK的应用,一个是runany,可以组合并击实现快捷功能,我都想借一点代码来改造现在用的capslock+了,还有个是输入法自动切换,用来实现代码中中英文混输的,还有最直接的并击输入法,这些都涉及到了类似的问题。我准备好好思考,实现一个全新的效率工具。
2 个赞