我想长按某个键,以便通过 shift 按下该键
以下是我尝试过的:
$a::
KeyWait, a, T0.7
If ErrorLevel
send +{a}
Else
send {a}
Return
当按键被抬起时,它会发送 Aa,而我想要它通常(对于所有按键,无需为每个按键重写代码)。
答案1
按住某个键超过 0.7 秒即可通过 Shift 键按下该键:
#UseHook ; install the keyboard hook to activate hotkeys not supported in the operating system
; create a string of the keys you want be shifted:
keys := "1,2,3,4,a,b,c,d,SC01B,SC02B" ; SC01B = scan code of "#" SC02B = "+"
Loop, parse, keys, `, ; retrieves substrings (fields) from the string "keys" one at a time based on the delimiter ","
Hotkey, %A_Loopfield%, pressedkey ; creates a hotkey of the retrieved field
return
pressedkey: ; A_ThisHotkey: the most recently executed hotkey
KeyWait, %A_ThisHotkey%, T0.7 ; wait 0.7 seconds for the key to be released
If ErrorLevel ; the key has not yet been released after 0.7 seconds
{
KeyWait, %A_ThisHotkey% ; wait for the key to be released
if (SubStr(%A_ThisHotkey%, 1, 2) = SC) ; substring: starting position=1 (first character), Length=2 (characters)
Send +{%A_ThisHotkey%}
else
Send +%A_ThisHotkey%
}
else ; the key has been released before the 0.7 seconds limit
{
if (SubStr(%A_ThisHotkey%, 1, 2) = SC)
Send {%A_ThisHotkey%}
else
Send %A_ThisHotkey%
}
return
编辑:
#UseHook
keys := "1,2,3,4,a,b,c,d,SC01B,SC02B"
Loop, parse, keys, `,
Hotkey, %A_Loopfield%, pressedkey
return
pressedkey:
KeyWait, %A_ThisHotkey%, T0.7
If ErrorLevel
{
KeyWait, %A_ThisHotkey%
Send +{%A_ThisHotkey%}
}
else
Send {%A_ThisHotkey%}
return
答案2
长按大写字母是个好主意,但在打字时出现了问题,所以我改变了脚本的目的,这是我的主要目标”长按时只输入数字“因为我的键盘上没有数字键盘,所以我的最终代码是:
当然特别感谢用户3419297
; AutoHotkey Version: 1.x
; Language: English
; Platform: Win9x/NT
; Author: fayssal.Z
; credits to:
; Great thanks to user3419297 , the whole code made by him
; Script Function:
; easy way to write numbers by pressing longer on symbols (no shift or capslock required)
;
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#UseHook
keys := "sc02,sc03,sc04,sc05,sc06,sc07,sc08,sc09,sc0A,sc0B,sc0C,sc0D"
Loop, parse, keys, `,
Hotkey, %A_Loopfield%, pressedkey
return
pressedkey:
KeyWait, %A_ThisHotkey%, T0.3
If ErrorLevel
{
KeyWait, %A_ThisHotkey%
If (SubStr(%A_ThisHotkey%, 1, 2) = SC)
Send +{%A_ThisHotkey%}
Else
Send +%A_ThisHotkey%
}
Else
{
If (SubStr(%A_ThisHotkey%, 1, 2) = SC)
Send {%A_ThisHotkey%}
Else
Send %A_ThisHotkey%
}
return