修饰键Shift单按功能如何配置?

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

Moderators: tmplinshi, arcticir

phoulx
Posts: 2
Joined: 03 Mar 2021, 00:14

修饰键Shift单按功能如何配置?

Post by phoulx » 03 Mar 2021, 01:04

我希望左Shift单按可以切换输入语言(Windows默认快捷键是ALT+Shift),而在和其他键一起按的时候保持原修饰键功能。
昨天在论坛上看到一段代码,稍微改了一下差不多能用:

Code: Select all

LShift::
	KeyWait, LShift, T0.3 ; 等待0.3秒
	if ErrorLevel { ;超时
		LShift::LShift
	} else {
		Send {LAlt down}{Shift down}{LAlt up}{Shift up}
	}
Return
但是有点小问题,左Shift刚按下的0.3秒是等待时间,如果在此期间按其他键的话,Shift的修饰键功能不起作用。例如要打AHK,必须按住Shift 0.3秒再按a才能打出A,手快的话就会打出小写a。

思考了下,上面的脚本毕竟不适用我的需求。我需要的逻辑是:

Code: Select all

当左Shift按下时
    if 有其他键按下:Shift作为修饰键来使用
    if 没有按其他键就弹起(这里不需要时间判定):触发单按功能
请问如何实现?
phoulx
Posts: 2
Joined: 03 Mar 2021, 00:14

Re: 修饰键Shift单按功能如何配置?

Post by phoulx » 10 Mar 2021, 03:42

查了英文论坛,类似的问题有人给出的方案(站外链接被自动加了空格):
  • superuser.com /questions/483172/how-do-you-map-a-solo-press-of-a-modifier-key-to-its-own-function-or-mapping-on
对于本人的需求,可以这样写:

Code: Select all

<+F19::Return ; <+ means LShift
LShift::Send {LAlt down}{Shift down}{LAlt up}{Shift up}
或者这样(似乎是等效的,目前没发现效果有什么不同):

Code: Select all

<+F19::Return ; <+ means LShift
LShift up::
	If (A_PriorKey = "LShift") ;  If LShift was pressed alone
		Send {LAlt down}{Shift down}{LAlt up}{Shift up}
return
要点是:使之不影响修饰键原本的功能的话,需要定义至少一次包括该修饰键的组合键(上面F19换成任何不常用的键都可以)
Post Reply

Return to “请求帮助”