关于大小写切换按键问题

预期目标:在原本Caps Lock切换大小写状态的基础上,按下shift可以关闭大写状态,且不更换当前中英文状态。如:我在输入英文时,切换到了大写状态,在大写状态输入完毕后,按下shift将继续保持输入英文,而不是切换到中文。

当前设置:介绍一下我的个人配置,当前使用的是“KBLAutoSwitch”,关闭了搜狗输入法的shift切换中英文,热键配置 中打开了 左shift切换中英文(中文) ,目前也将WIN11设置中的高级键盘设置里的“要关闭Caps Lock” 设置为了 “按shift键” 但目前的问题是按下 Caps Lock键不再能关闭大写状态

个人尝试:我尝试了AHK(我的水平很差,全靠Chatgpt) 但在<“要关闭Caps Lock” 设置为了 “按shift键” >情况下,似乎是系统屏蔽了大写状态下的 Caps Lock按键的按下动作,只有抬起动作(使用按键测试网页的结果) 如果我只对按键抬起进行判断,那么就会与正常的开启大写动作起冲突 另一方面,我也尝试过更改当前的键盘映射,可以实现,但是Caps Lock按键映射到了其他的组合按键,相当于我的键盘上失去了一个按键,且更换电脑还需要额外的AHK脚本与其协同工作

总结:所以我的需求是,在<“要关闭Caps Lock” 设置为 “按shift键” >的情况下,帮我编写一个Caps Lock可以关闭大写状态的脚本,或者<“要关闭Caps Lock” 设置为 “按Caps Lock键” >的情况下,为我编写一个shift能关闭大写状态的脚本,且不与<当前"KBLAutoSwitch"的设置>冲突 或者 可以冲突,更改KBLAutoSwitch、搜狗输入法设置都可以,只要有能实现<按下shift可以关闭大写状态,且不更换当前中英文状态>

(更好的方式,更改一下KBLAutoSwitch,把这个功能内嵌到里面 :smile:

完结:自己在KBLAutoSwitch.ahk里面更改了Toggle_CN_CNEN函数,在原本逻辑上添加了if GetKeyState(“CapsLock”, “T”) {SetCapsLockState, Off}else{}

你把一个简单问题搞得太复杂了。

不要改

直接:

~LShift:: ;Lshift 按下时
{
SetCapsLockState 0
}
return

或者

~LShift up:: ;Lshift 弹起时
{
SetCapsLockState 0
}
return

我的看法是,不要改原生的功能。

shift是切中文,CapsLock是切英文大小,似乎不形成干涉。

之前我写过一个类似

Shift::  
if GetKeyState("CapsLock", "T")  ; 检查当前大写状态
{
    SetCapsLockState, Off
}else{
    Send, {Shift}
}
return

的脚本 但我忘了是什么原因导致这个方案舍弃了
不过你的脚本用起来与KBL没有什么冲突 我觉得很不错