이 예제 스크립트는 어떤 키보드에 나타나는 특수한 000 키를 등호 키로 변신시킵니다. 행위를 바꾸려면
Send, = 줄을 여러분의 기호대로 변경하십시오.
이 스크립트 내려 받기 | 다른 샘플 스크립트 | 홈으로
#MaxThreadsPerHotkey 5 ; 이 핫키에 대하여 여러 쓰레드를 허용합니다.
$Numpad0::
#MaxThreadsPerHotkey 1
; 위에서: $를 사용해 갈고리 사용을 강제합니다. 이렇게 하면 무한 회돌이를 방지합니다.
; 서브루틴 자체가 Numpad0를 전송하기 때문인데, 이 때문에
; 자기 자신을 호출하는 무한 재귀에 빠질 수 있습니다.
SetBatchLines, 100 ; 이 경우 약간 더 빨리 실행하도록 만듭니다.
DelayBetweenKeys = 30 ; 작동하지 않을 경우 이 값을 조절합니다.
if A_PriorHotkey = %A_ThisHotkey%
{
if A_TimeSincePriorHotkey < %DelayBetweenKeys%
{
if Numpad0Count =
Numpad0Count = 2 ; 즉, 앞에 것에다 이것을 더한 것입니다.
else if Numpad0Count = 0
Numpad0Count = 2
else
{
; 여기에 있으므로, Numpad0Count가 이전 호출에서
; 반드시 2로 설정되어 있어야 합니다.
; 즉, 이 번에 키가 세 번째 눌린 것이라는 뜻입니다
; 그러므로, 핫키 연속열이 촉발되어야 합니다:
Numpad0Count = 0
Send, = ; ******* 이것이 000 키에 대한 조치입니다
}
; 위의 모든 경우에, 더 이상 조치 없이 돌아갑니다:
CalledReentrantly = y
return
}
}
; 그렇지 않으면, 이 Numpad0 이벤트는 일련의 연속에서 첫 번째이거나
; 아니면 어쩌다가 첫 번째 이벤트 다음에 너무 오래 걸린 것입니다.
; (예, 사용자가 Numpad0 키를 계속 눌러서 자동 반복을 하는 경우가 그럴텐데,
; 이것을 허용하고 싶은 것입니다). 그러므로, 짧은 지연 시간 후에
; -- 그 사이에 또다른 Numpad0 핫키 이벤트가 재진입하여
; 이 서브루틴을 호출할 수도 있지만 --
; 재진입 호출이 일어나지만 않는다면 그 키를 계속 보냅니다:
Numpad0Count = 0
CalledReentrantly = n
; 이렇게 자는 동안, 이 서브루틴은 재진입 호출될 수 있습니다
; (즉, 동시 "쓰레드"로서 현재 호출 상태에 있는 쓰레드와
; 병행적으로 실행됩니다):
Sleep, %DelayBetweenKeys%
if CalledReentrantly = y ; 또다른 "쓰레드"가 값을 변경했습니다.
{
; 재진입 호출되었으므로, 이 키 이벤트는 연속열에서
; 첫 번째 이벤트였습니다. 그래서 억눌러야 합니다 (시스템으로부터 숨겨야 합니다):
CalledReentrantly = n
return
}
; 그렇지 않으면, 연속열에 포함되지 않습니다. 그래서 그 키를 보통처럼 전송합니다.
; 다른 말로, *진짜* Numpad0 키가 눌렸습니다. 그래서 정상처럼 효과가 있기를 원합니다.:
Send, {Numpad0}
return