o meu script está funcionado perfeitamente com eu ...
Creato il: 7 agosto 2025
Creato il: 7 agosto 2025
o meu script está funcionado perfeitamente com eu quero, não é pra mudar nada além disso, mas gostaria que você fizesse uma alteração, quando eu segurar uma tecla por mais de 1 segundo, ai sim automaticamente vai ter que ignorar o negócio de 300, mas quando soltar volta a funcionar com deve..
ahk; ============================================================================== ; CONFIGURAÇÕES GERAIS ; ============================================================================== #Persistent #SingleInstance Force #UseHook On SetTitleMatchMode, 2 Process, Priority,, High ; ============================================================================== ; *** NOVA ESTRATÉGIA: QUARENTENA DE TECLAS *** ; ============================================================================== ; 1. Defina as teclas que estão apresentando o maior problema (duplicação/spam). ; Coloque-as aqui, separadas por vírgula. global problemKeysList := "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z" ; 2. Defina os delays. ; - problemKeyDelay: Um delay ALTO e AGRESSIVO para as teclas na lista acima. ; - defaultDelay: Um delay BAIXO e RÁPIDO para todas as outras teclas, para não ; prejudicar a fluidez da digitação. global delays := { "problemKeyDelay": 300, "defaultDelay": 300 } ; ============================================================================== ; SETUP DO SCRIPT ; ============================================================================== ; Cria um mapa (objeto) a partir da lista de teclas problemáticas para uma verificação super rápida. global problemKeysMap := {} for index, key in StrSplit(problemKeysList, ",") problemKeysMap[key] := true ; Mapa para armazenar o tempo do último pressionamento de cada tecla. global lastKeyPressTimes := {} ; Lista completa de teclas a serem monitoradas. keyList := "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z" keysToHook := StrSplit(keyList, ",") ; ============================================================================== ; *** NOVO: CONDIÇÃO PARA DESATIVAR O SCRIPT NO CS2 *** ; ============================================================================== ; A diretiva #If abaixo faz com que TODAS as hotkeys definidas a seguir ; SÓ FUNCIONEM se a janela ativa NÃO FOR o cs2.exe. #If !WinActive("ahk_exe cs2.exe") ; Cria as hotkeys dinamicamente. for index, key in keysToHook { lastKeyPressTimes[key] := 0 Hotkey, *$%key%, KeyPressHandler, On } ; Fecha o bloco condicional #If para não afetar outras hotkeys futuras no script. #If return ; ============================================================================== ; ROTINA PRINCIPAL ; ============================================================================== KeyPressHandler: Critical ; Essencial para evitar inversão de teclas (ex: "ministror") thisKey := SubStr(A_ThisHotkey, 3) currentTime := A_TickCount ; *** LÓGICA INTELIGENTE *** ; Verifica se a tecla pressionada está na nossa lista de quarentena. if (problemKeysMap.HasKey(thisKey)) currentDelay := delays.problemKeyDelay ; Usa o delay AGRESSIVO else currentDelay := delays.defaultDelay ; Usa o delay PADRÃO ; Aplica a lógica de debounce com o delay que acabamos de definir. if (currentTime - lastKeyPressTimes[thisKey] < currentDelay) return ; Bloqueia a tecla se for muito recente. ; Se a tecla for válida, atualiza o tempo e reenvia. lastKeyPressTimes[thisKey] := currentTime SendInput, % "{Blind}{" thisKey "}" return
Perfeito — mantive toda a lógica e só adicionei o “modo bypass ao segurar”. O que mudou:
Código completo atualizado (AHK v1):
ahk; ============================================================================== ; CONFIGURAÇÕES GERAIS ; ============================================================================== #Persistent #SingleInstance Force #UseHook On SetTitleMatchMode, 2 Process, Priority,, High ; ============================================================================== ; *** NOVA ESTRATÉGIA: QUARENTENA DE TECLAS *** ; ============================================================================== ; 1. Defina as teclas que estão apresentando o maior problema (duplicação/spam). ; Coloque-as aqui, separadas por vírgula. global problemKeysList := "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z" ; 2. Defina os delays. ; - problemKeyDelay: Um delay ALTO e AGRESSIVO para as teclas na lista acima. ; - defaultDelay: Um delay PADRÃO para todas as outras teclas. global delays := { "problemKeyDelay": 300, "defaultDelay": 300 } ; ============================================================================== ; SETUP DO SCRIPT ; ============================================================================== ; Cria um mapa (objeto) a partir da lista de teclas problemáticas para verificação rápida. global problemKeysMap := {} for index, key in StrSplit(problemKeysList, ",") problemKeysMap[key] := true ; Mapa para armazenar o tempo do último pressionamento de cada tecla. global lastKeyPressTimes := {} ; Estados de hold/bypass por tecla global isHeld := {} ; se a tecla está fisicamente pressionada global holdStartTimes := {} ; quando o hold começou (tick) global bypassHold := {} ; se o delay está ignorado devido a hold >= 1s ; Lista completa de teclas a serem monitoradas. global keyList := "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z" global keysToHook := StrSplit(keyList, ",") ; ============================================================================== ; *** CONDIÇÃO PARA DESATIVAR O SCRIPT NO CS2 *** ; ============================================================================== #If !WinActive("ahk_exe cs2.exe") ; Cria as hotkeys dinamicamente (down + up). for index, key in keysToHook { lastKeyPressTimes[key] := 0 isHeld[key] := false holdStartTimes[key] := 0 bypassHold[key] := false Hotkey, *$%key%, KeyPressHandler, On Hotkey, *$%key% Up, KeyUpHandler, On } #If ; Inicia watcher que liga o bypass após 1s segurando SetTimer, __HoldWatcher, 50 return ; ============================================================================== ; ROTINA PRINCIPAL ; ============================================================================== KeyPressHandler: Critical thisKey := SubStr(A_ThisHotkey, 3) ; remove "*$" currentTime := A_TickCount ; Marca início do hold no primeiro evento enquanto a tecla estiver fisicamente abaixada if (!isHeld[thisKey]) { isHeld[thisKey] := true holdStartTimes[thisKey] := currentTime bypassHold[thisKey] := false } ; Escolhe o delay (se bypass ativo, ignora o delay) if (bypassHold[thisKey]) { currentDelay := 0 } else if (problemKeysMap.HasKey(thisKey)) { currentDelay := delays.problemKeyDelay } else { currentDelay := delays.defaultDelay } ; Debounce if (currentTime - lastKeyPressTimes[thisKey] < currentDelay) return ; Atualiza e envia lastKeyPressTimes[thisKey] := currentTime SendInput, % "{Blind}{" thisKey "}" return KeyUpHandler: Critical thisKey := StrReplace(SubStr(A_ThisHotkey, 3), " Up") ; remove "*$" e " Up" ; Soltou: desliga hold e bypass; volta a funcionar como antes isHeld[thisKey] := false holdStartTimes[thisKey] := 0 bypassHold[thisKey] := false return ; ============================================================================== ; WATCHER DE HOLD (1s) ; ============================================================================== __HoldWatcher: ; Se estiver segurando há >= 1000ms e bypass ainda não ligado, ativa-o. now := A_TickCount for _, key in keysToHook { if (isHeld[key] && !bypassHold[key]) { if (now - holdStartTimes[key] >= 1000) { bypassHold[key] := true } } } return
Qualquer coisa a mais (como mudar o tempo de 1s, ou aplicar só para certas teclas), me fala que adapto rapidinho. 👍🏻