【已解决】请问怎么将CapsLock当成组合键,但仍保留它的大小写切换功能?

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: tmplinshi, arcticir

wo52616111
Posts: 47
Joined: 21 Aug 2014, 04:46

【已解决】请问怎么将CapsLock当成组合键,但仍保留它的大小写切换功能?

21 Aug 2014, 05:05

我想实现的功能是,CapsLock作为组合键之一和其他键一起用的时候可以有跟ctrl等类似的组合键的功能,但是如果单独按下就是大小写切换(弹起触发)
这是我写的代码:

Code: Select all

CapsLock & e::Send,{Up};CapsLock+edsf触发上下左右,下同
CapsLock & d::Send,{down}
CapsLock & s::Send,{left}
CapsLock & f::Send,{right}
CapsLock & `;::Send,{end}
CapsLock & '::Send,{home}

CapsLock & n::Send,{1}
CapsLock & m::Send,{2}
CapsLock & ,::Send,{3}
CapsLock & j::Send,{4}
CapsLock & k::Send,{5}
CapsLock & l::Send,{6}
CapsLock & u::Send,{7}
CapsLock & i::Send,{8}
CapsLock & o::Send,{9}
CapsLock & space::Send,{0}
CapsLock & ralt::Send,{.}

CapsLock & bs::Send,+{home},{bs} ;大写键+退格键=全行删除
上面的代码在不使用输入法的时候可以实现我想要的,虽然有一点点小瑕疵:按住CapsLock时大小写指示灯会亮,松开后灭掉,如果可以不亮更好。
另外还有个致命的问题就是在使用打字法(搜狗输入法)的时候,只能触发一次操作,例如:按住CapsLock+s本应光标一直向左,但是现在会是光标向左一次然后一直输出“S",并且松手后输入法状态从中文切换成了英文。请问怎么修改到希望有的功能?谢谢
Last edited by wo52616111 on 21 Aug 2014, 20:32, edited 1 time in total.
arcticir
Posts: 694
Joined: 17 Nov 2013, 11:32

Re: 请问怎么将CapsLock当成组合键,但仍保留它的大小写切换功能?

21 Aug 2014, 05:24

我对CapsLock键的应用仅仅是双击发送粘贴。
不过你的这两点需求好像都不难解决,代码有些麻烦,我只说下思路。
不要使用组合键,而设置单独的热键。
例如CapsLock:: 按下后就等待弹起,如果弹起时没有其他键按下,就切换大小写状态。
而ABCD这些字母键也单独设置热键,按下时检测CapsLock状态,如果CapsLock按下就执行自定义命令,如果没有就发送原生。
wo52616111
Posts: 47
Joined: 21 Aug 2014, 04:46

Re: 请问怎么将CapsLock当成组合键,但仍保留它的大小写切换功能?

21 Aug 2014, 07:40

arcticir wrote:我对CapsLock键的应用仅仅是双击发送粘贴。
不过你的这两点需求好像都不难解决,代码有些麻烦,我只说下思路。
不要使用组合键,而设置单独的热键。
例如CapsLock:: 按下后就等待弹起,如果弹起时没有其他键按下,就切换大小写状态。
而ABCD这些字母键也单独设置热键,按下时检测CapsLock状态,如果CapsLock按下就执行自定义命令,如果没有就发送原生。
弄了半天还是没搞出来,对keywait和它的参数搞不清楚(keywait,capslock不用参数,无限等待貌似没有机会去判定其他键的按下,用D参数等待其他键按下也不知道具体要怎么用)请问我原来那种&的方法是有什么问题呢?AHK的&不就是给人家这样用的么?
arcticir
Posts: 694
Joined: 17 Nov 2013, 11:32

Re: 请问怎么将CapsLock当成组合键,但仍保留它的大小写切换功能?

21 Aug 2014, 08:17

&的问题你自己都不说出来了吗:只能触发一次。

要有点钻研精神啊同学,代码就像积木,自己组装成想要的功能,但你至少要知道有哪些命令好伐。搞不清楚就不断测试嘛,多看看帮助啊。

Code: Select all

CapsLock::
CapsLock2:=CapsLock:=1
KeyWait, CapsLock
if CapsLock2
		SetCapsLockState, % GetKeyState("CapsLock","T") ? "Off" : "On"
CapsLock2:=CapsLock:=""
Return
#If CapsLock
s:: 
SendInput,{left}
CapsLock2:=""
Return
#If
wo52616111
Posts: 47
Joined: 21 Aug 2014, 04:46

Re: 请问怎么将CapsLock当成组合键,但仍保留它的大小写切换功能?

21 Aug 2014, 09:43

谢提醒。我就是理解不了,为啥不开启打字法它就可以用,不会只触发一次,开了打字法就有问题呢
arcticir
Posts: 694
Joined: 17 Nov 2013, 11:32

Re: 请问怎么将CapsLock当成组合键,但仍保留它的大小写切换功能?

21 Aug 2014, 09:53

不理解就不断的实验。

大写键扩展方向功能的想法不错。我改造了自己的热键。
保留双击粘贴。增加ASDW的方向功能。

Code: Select all

CapsLock::
KeyWait, CapsLock
if (A_ThisHotkey="CapsLock")
	{
	SetCapsLockState, % GetKeyState("CapsLock","T") ? "Off" : "On"
	If ((A_PriorHotkey = "CapsLock" ) AND (A_TimeSincePriorHotkey < 400))
		SendInput ^v
	}
Return

#if GetKeyState("Capslock", "P")
w:: SendInput,{Up}
s:: SendInput,{down}
a:: SendInput,{left}
d:: SendInput,{right}
q:: SendInput,{home}
e:: SendInput,{end}
r:: SendInput,^{home}
f:: SendInput,^{end}
#if
wo52616111
Posts: 47
Joined: 21 Aug 2014, 04:46

Re: 请问怎么将CapsLock当成组合键,但仍保留它的大小写切换功能?

21 Aug 2014, 10:38

谢谢帮助。
暂时直接用你的代码实现了功能先(可能臃肿了,应该有别的方法精简),明天再弄懂原理。
功能:
capslock+edsf=上下左右
capslock+nm,jkluio=123456789(把九宫格数字键放到k为中心的区域)
capslock+space=0
capslock+;=end
capslock+‘=home
capslock+backspace=删除光标所在行内容
这样写代码什么的手应该基本不用离开主键位区域了

Code: Select all

CapsLock::
CapsLock2:=CapsLock:=1
KeyWait, CapsLock
if CapsLock2
        SetCapsLockState, % GetKeyState("CapsLock","T") ? "Off" : "On"
CapsLock2:=CapsLock:=""
Return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CapsLock+edsf=上下左右;;;;;;;;;;;;;;;;;;;;;
#If CapsLock
s::
SendInput,{left}
CapsLock2:=""
Return
#If

#If CapsLock
f::
SendInput,{right}
CapsLock2:=""
Return
#If

#If CapsLock
e::
SendInput,{up}
CapsLock2:=""
Return
#If

#If CapsLock
d::
SendInput,{down}
CapsLock2:=""
Return
#If
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CapsLock+nm,jkluio=123456789;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CapsLock+Space=0;;;;;;;;;;;;;;;;;;;;;;;;;;;
#If CapsLock
n::
SendInput,{1}
CapsLock2:=""
Return
#If

#If CapsLock
m::
SendInput,{2}
CapsLock2:=""
Return
#If

#If CapsLock
,::
SendInput,{3}
CapsLock2:=""
Return
#If

#If CapsLock
j::
SendInput,{4}
CapsLock2:=""
Return
#If

#If CapsLock
k::
SendInput,{5}
CapsLock2:=""
Return
#If

#If CapsLock
l::
SendInput,{6}
CapsLock2:=""
Return
#If

#If CapsLock
u::
SendInput,{7}
CapsLock2:=""
Return
#If

#If CapsLock
i::
SendInput,{8}
CapsLock2:=""
Return
#If

#If CapsLock
o::
SendInput,{9}
CapsLock2:=""
Return
#If

#If CapsLock
Space::
SendInput,{0}
CapsLock2:=""
Return
#If

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CapsLock+;=end;;;CapsLock+'=home;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CapsLock+BackSpace=删除光标所处一行;;;;;;;;;;;
#If CapsLock
`;::
SendInput,{End}
CapsLock2:=""
Return
#If

#If CapsLock
'::
SendInput,{Home}
CapsLock2:=""
Return
#If

#If CapsLock
BackSpace::
SendInput,{End}+{home}{bs}
CapsLock2:=""
Return
#If
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
td3zzz
Posts: 18
Joined: 15 Aug 2014, 20:53

Re: 【已解决】请问怎么将CapsLock当成组合键,但仍保留它的大小写切换功能?

25 Aug 2014, 07:09

貌似都没有人提到楼主所说的“松手后输入法状态从中文切换成了英文”这个问题,不知是由什么原因造成的??

Return to “请求帮助”

Who is online

Users browsing this forum: No registered users and 14 guests