자동 핫키를 길게 누르면 대문자가 표시됩니다.

자동 핫키를 길게 누르면 대문자가 표시됩니다.

Shift 키를 누르려면 키를 더 길게 누르고 싶습니다.

내가 시도한 것은 다음과 같습니다.

$a::                                              
KeyWait, a, T0.7                              
If ErrorLevel                               
  send +{a}
Else 
  send {a} 
Return

키가 작동되면 Aa를 보내고 일반적으로 (각 키에 대한 코드를 다시 작성하지 않고 모든 키에 대해) 원합니다.

답변1

Shift 키를 누르려면 0.7초보다 긴 키를 누르세요.

#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

관련 정보