如题。正常情况下,按下caps+字母键,键盘上的指示灯会亮起、输出字母,松开按键以后,指示灯还是亮的。
相当于 按下caps+字母键=改变大小写状态+输出字母
但我想让它只输出大写字母,最好是也不点亮键盘的指示灯(如果做不到这一条可以忽略)。应该怎么写代码呢,求大佬们指点。
如题。正常情况下,按下caps+字母键,键盘上的指示灯会亮起、输出字母,松开按键以后,指示灯还是亮的。
相当于 按下caps+字母键=改变大小写状态+输出字母
但我想让它只输出大写字母,最好是也不点亮键盘的指示灯(如果做不到这一条可以忽略)。应该怎么写代码呢,求大佬们指点。
按住shift再按字母不就行了 (跑开)![]()
当输入法为中文时,按住shift+字母键,大写字母并不会直接输出到文本框,而是输出到了输入法上,需要按空格以后,才会输出到文本框。不太方便。
使用剪贴板装载需要输入的内容,然后发送Ctrl+V粘贴即可。
翻出两段老代码,第一段需要 v2,第二段需要 v1,你可以参考下思路自己实现
#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
#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