EssenceBlue
EssenceBlue

Reputation: 413

Long-press = Capitalize

Intended Hotkey Function: Capitalize character if key pressed longer than 0.2s

Occurring Problem: When typing "vbnm" in a row in a fast manner (which means I am pressing a the next key while still holding down the previous one) then AHK outputs just x-times the key that was pressed first, resulting here in "vvvv".

That is the code. Please help me out (y) :-)

$y::
$x::
$c::
$v::
$b::
$n::
$m::
    key := SubStr(A_ThisHotkey, 2)  
    ;MsgBox, %key% ;it recognizes/shows all keys pressed correctly,
    ;but in the end it prints just x-times the key that was pressed first
    ;whereby x is the number of keys pressed very quickly in a row

    KeyWait, %key%, T0.2 ;Long press = capitalize
    If ErrorLevel
        SendInput +%key%    
    Else
        SendInput %key%         
Return

Upvotes: 1

Views: 726

Answers (2)

EssenceBlue
EssenceBlue

Reputation: 413

So finally this code seems to work, beside the little inconvenience when holding the key much too long, resulting in e.g. "Oo".

;For normal characters ......
$x::
$c::
$v::
$b::
$n::
$m::keyFunc(SubStr(A_ThisHotkey, 2))
keyFunc(key) {   
    Critical
    KeyWait, %key%, T0.3 ;Long press = capitalize
    SendInput % ErrorLevel ? Format("{:U}", key) : key  
Return 
}

;For special characters ......
$2::
$3::
$4::
$5::
$6::
$7::
$8::
$9::
$sc01A:: ;ü
$sc027:: ;ö
$sc028:: ;ä
$sc00C:: ;ß
$sc033:: ;,
$sc034:: ;. 
$sc035:: ;-
$sc01B:: ;+
$sc02B:: ;#
$sc00D::  keyFunc2(SubStr(A_ThisHotkey, 2))
keyFunc2(key) {
    Critical  
    KeyWait, %key%, T0.3 ;Long press = capitalize   
    If ErrorLevel
        SendInput +{%key%}
    Else
        SendInput {%key%}
Return
}   

Upvotes: 2

errorseven
errorseven

Reputation: 2672

try:

$y:: 
$x::  
$c::
$v::
$b::
$n::
$m::keyFunc(SubStr(A_ThisHotkey, 2))

keyFunc(key) {   
    KeyWait, %key%, T0.3 ;Long press = capitalize
    SendInput % ErrorLevel ? Format("{:U}", key) : key  
Return
}

Upvotes: 1

Related Questions