オートホットキーを長押しすると大文字になります

オートホットキーを長押しすると大文字になります

キーを長押しして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

関連情報