如何解决MS Excel 中的 AHK脚本的单元格选择问题
我开始了一个使用 CAPSLock 键导航的小脚本(这只是代码的一部分):
SetCapsLockState,AlwaysOff
CapsLock & i::
if getkeystate("alt") = 0
Send,{Up}
else
Send,+{Up}
return
CapsLock & l::
if getkeystate("alt") = 0
Send,{Right}
else
send,+{Right}
return
它在任何地方都能完美运行......除了在 MS Excel 中! 当我选择一系列单元格时,选择框在那里,但公式中没有单元格引用。 例如: Summing C3:C10 变成 =sum() 公式中实际上没有选择任何单元格。 如果我不断尝试上下多次......它会显示,但永远不会一致。
知道如何解决这个问题吗?
提前致谢
解决方法
问题来自于您的 shift 键在两次按键之间被释放。
例如,尝试在 Excel 中按这样的键,您会发现实际上并没有选择单元格,而只是突出显示了它们:
Shift Down,Up Arrow,Shift Up
Shift Down,Shift Up
...
因此,您将不得不在整个选择过程中一直按住 Shift。
这是我能想到的:
CapsLock::Shift
#If,GetKeyState("CapsLock","P")
*i::
if (GetKeyState("Alt","P"))
SendInput,{Blind}{Alt Up}{Up}
else
SendInput,{Up}
return
*l::
if (GetKeyState("Alt",{Blind}{Alt Up}{Right}
else
SendInput,{Down}
return
#If
或者就像这样用三元来写得更干净:
CapsLock::Shift
#If,"P")
*i::SendInput,% GetKeyState("Alt","P") ? "{Blind}{Alt Up}{Up}" : "{Up}"
*l::SendInput,"P") ? "{Blind}{Alt Up}{Right}" : "{Right}"
#If
这是怎么回事?
首先,我们使用简单的重映射语法(docs) 将 CapsLock 重映射到 Shift。
然后我们使用 #If
(docs) 为 I 和 L 创建上下文相关的热键。
热键仅在 CapsLock 的物理状态关闭时触发。
我们需要物理状态,因为逻辑状态(默认)被重新映射为 shift。
热键是使用 *
修饰符(docs) 创建的,因此即使 Shift 和/或 Alt 它们也会触发> 被按住。
我切换了 Send
命令 SendInput
,因为它是推荐的更快、更可靠的发送模式(docs)。
然后是关于{Blind
}。通常,当您使用发送命令发送某些内容时,它会自动释放您可能持有的任何修饰符。但是如果您使用盲发送模式(docs),则不会发生这种情况。所以 Shift 仍然一直被按住。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。