Ahk,caps+字母键,不点亮键盘指示灯的情况下输出大写字母

如题。正常情况下,按下caps+字母键,键盘上的指示灯会亮起、输出字母,松开按键以后,指示灯还是亮的。
相当于 按下caps+字母键=改变大小写状态+输出字母

但我想让它只输出大写字母,最好是也不点亮键盘的指示灯(如果做不到这一条可以忽略)。应该怎么写代码呢,求大佬们指点。

按住shift再按字母不就行了 (跑开):upside_down_face:

6 Likes

当输入法为中文时,按住shift+字母键,大写字母并不会直接输出到文本框,而是输出到了输入法上,需要按空格以后,才会输出到文本框。不太方便。

使用剪贴板装载需要输入的内容,然后发送Ctrl+V粘贴即可。

翻出两段老代码,第一段需要 v2,第二段需要 v1,你可以参考下思路自己实现

屏蔽 CapsLock 原有功能并作为热键使用

#Requires AutoHotkey >=2.0-

*CapsLock:: {
    Send("{CapsLock Up}")
    SetCapsLockState("AlwaysOff")
}

#HotIf GetKeyState("CapsLock", "P")

i::Up
k::Down
j::Left
l::Right
u::Home
o::End

#HotIf

RAlt + 任意键绕过输入法直接输入

#Requires AutoHotkey v1.1.33+

DetectAltKey() { ; 检测按键函数
    global AltHotKeyIsInput
    If !GetKeyState("RAlt", "P")
        Return
    Input, InputKey, IL1 ; 检测单个按键输入并保存到InputKey变量中
    If (ErrorLevel = "NewInput"){
        If !GetKeyState("RAlt", "P")
            Return
        Else If (AltHotKeyIsInput = 0)
            SendStr(InputKey)
    } Else If (ErrorLevel = "Max") {
        SendStr(InputKey)
    }
    DetectAltKey() ; 递归调用自身
}

SendStr(InputStr) { ; 发送原样字符函数
    global AltAnotherKeyIsInput
    AltAnotherKeyIsInput := 1 ; 置空变量,防止执行If下的语句
    SendInput, % Format("{U+{1:#x}}", Ord(InputStr))
}

Swtich_IME(NewState) { ; 切换输入法函数,-1为切换
    PtrSize := !A_PtrSize ? 4 : A_PtrSize
    VarSetCapacity(StGTI, CbSize := (PtrSize*6)+24, 0)
    NumPut(CbSize, StGTI,  0, "UInt")
    DllCall("GetGUIThreadInfo", "UInt", 0, "UInt", &StGTI)
    HWND := NumGet(StGTI, 8+PtrSize, "UInt")
    If (NewState = -1) {
        PreviousState := DllCall("SendMessage"
            , "UInt", DllCall("imm32\ImmGetDefaultIMEWnd", "UInt", HWND)
            , "UInt", 0x0283
            ,  "Int", 0x0005
            ,  "Int", 0)
        Return DllCall("SendMessage"
            , "UInt", DllCall("imm32\ImmGetDefaultIMEWnd", "UInt", HWND)
            , "UInt", 0x0283
            ,  "Int", 0x006
            ,  "Int", !PreviousState)
    } Else {
        Return DllCall("SendMessage"
            , "UInt", DllCall("imm32\ImmGetDefaultIMEWnd", "UInt", HWND)
            , "UInt", 0x0283
            ,  "Int", 0x006
            ,  "Int", NewState)
    }
}

*RAlt::
AltAnotherKeyIsInput := 0
AltHotKeyIsInput := 0
SendInput, {RAlt Up}
DetectAltKey()
Return

RAlt Up::
Input ; 终止函数中还在等待输入的Input
If !AltAnotherKeyIsInput ; 表示按下了RAlt键,且中途没有按下其他按键
    Swtich_IME(-1) ; 切换输入法
AltAnotherKeyIsInput := 0
AltHotKeyIsInput := 0
Return