Skip to content

Instantly share code, notes, and snippets.

@SubActif
Forked from QuietNoise/G910 Keyboard Fix.ahk
Last active October 20, 2022 17:56
Show Gist options
  • Save SubActif/f3049d337f1c01274346ab51c5fc2748 to your computer and use it in GitHub Desktop.
Save SubActif/f3049d337f1c01274346ab51c5fc2748 to your computer and use it in GitHub Desktop.
Logitech Keyboard Fix for double typing problem

Logitech Keyboard Fix

Que fait ce script ?

Il s'agit d'une solution de contournement pour les claviers Logitech défectueux dans lesquels certaines touches enregistrent parfois plusieurs frappes pour une seule pression de tttttouche. Le bug de la touche apparaît car le clavier enregistre plusieurs frappes dans un laps de temps très court, même si vous n'avez appuyé qu'une seule fois sur la touche. Ce script fait en sorte que les frappes suivantes enregistrées dans un laps de temps très court soient ignorées, ne produisant ainsi la touche que pour le premier coup. Il n'est pas parfait et a mon niveau de connaissance du code AutoHotKey je ne saurais l'améliorer en tout cas pour mon cas avec un Logitech G512 et G910 cela me permet malgré le défaut de ces touches GX de pouvoir les utiliser encore relativement sans problème (surtout que racheté un clavier reviendrait a revivre ce défaut au bout de quelques temps d'utilisation, le problème étant vraiment lié aux touches mécaniques concernés)

Comment utiliser ce correctif ?

Vous devez installer AutoHotkey (Windows uniquement). https://www.autohotkey.com/. Un logiciel pour détourner les frappes et leur attribuer différentes fonctions. Téléchargez ensuite le fichier Logitech Keyboard Fix.ahk ci-dessus, modifiez la configuration, enregistrez-le, puis double-cliquez dessus. Vous pouvez ajouter ce fichier au démarrage automatique de Windows si nécessaire.

Configuration

Deux variables affectent le script. Le premier brokenKeys doit obligatoirement être configuré pour s'adapter à votre scénario. Le second fixOffset est facultatif :

Line 35: brokenKeys Définissez cette variable afin que seules vos touches problématiques soient répertoriées dans les guillemets et séparées par |.

Line 42: fixDelay Vous pouvez laisser tel quel ou simplement répondre à vos besoins en matière de répétition automatique (lire les commentaires dans le code).

Bugs

Quand le script est activé l'utilisation de la touche VER MAJ ne fait pas basculer en majuscule les touches paramétrées. Il faut utiliser la touche MAJ pour contourner cela mais cela empêche le script ne contrôle plus les touches dans ce cas.

Liens

Ce genre de problème avec des claviers Logitech est discuté sur divers forums. https://www.reddit.com/r/LogitechG/comments/b8pqj9/g910_double_typing/ https://www.reddit.com/r/LogitechG/comments/fstryp/g910_keyboard_keys_double_typing/ https://www.reddit.com/r/LogitechG/comments/cu1uaa/ghub_causing_random_keypresses_or_ghostkey/

Autres solutions possible

Les liens ci-dessus suggèrent également d'autres solutions possibles (aucune n'a fonctionné pour moi, d'où le script ci-dessus).

  • Sortez vos touches si possible et nettoyez les connexions de votre clavier
  • Tapez sur la touche problématique de manière répété pendant plusieurs minutes jusqu'à ce qu'elle se répare (certaines personnes ont suggéré qu'elle nettoie la rouille mais souvent le problème vient de la conception même des touches GX qui ont deux contacts métalliques dans la touche)
  • Si votre clavier permet le démontage des touches mécaniques (pas juste le dessus), certains ont montré qu'en placant un isolant sur un des contacts présent dans la touches, cela empêche ce double contact d'arriver, mais peu de clavier Logitech permettent d'accéder a l'intérieur des touches.
  • Changer de prise USB à laquelle le clavier est connecté
  • Quitter ou désinstaller G-Hub
  • Allez dans Panneau de configuration > Clavier et changez le délai de répétition en un délai plus long. Vous pouvez également essayer de modifier le taux de répétition plus lent.
; ----------------------
; LOGITECH KEYBOARDS FIX
; ----------------------
; !! BUGS / TODO !!
; Quand le script est activé l'utilisation de la touche CAPSLOCK ne fait pas basculer en majuscule les touches paramétrées.
; Il faut utiliser la touche SHIFT pour contourner cela mais cela empêche le script ne contrôle plus les touches dans ce cas.
; Rechercher des personnes capable d'améliorer/corriger ce code
; QUE FAIT CE SCRIPT ?
; Il s'agit d'une solution de contournement pour les claviers Logitech défectueux dans lesquels certaines touches enregistrent parfois plusieurs frappes pour une seule pression de tttttouche.
; Le bug de la touche apparaît car le clavier enregistre plusieurs frappes dans un laps de temps très court, même si vous n'avez appuyé qu'une seule fois sur la touche.
; Ce script fait en sorte que les frappes suivantes enregistrées dans un laps de temps très court soient ignorées, ne produisant ainsi la touche que pour le premier coup.
; LISTE DES CODES DE TOUCHES
; Liste exhaustive : https://www.autohotkey.com/docs/KeyList.htm
; 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
; ² | & | é | " | ' | ( | - | è | _ | ç | à | ) | = | < | ^ | $ | ù | * | , | ; | : | !
; Escape | Tab | CapsLock | Backspace | Space | Enter
; Home | End | PgUp | PgDn | ScrollLock | Delete | Insert
; Up | Down | Left | Right
; Numpad0 | Numpad1 | Numpad2 | Numpad3 | Numpad4 | Numpad5 | Numpad6 | Numpad7 | Numpad8 | Numpad9
; NumLock | NumpadDiv | NumpadMult | NumpadAdd | NumpadSub | NumpadDot | NumpadEnter
; F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24
; Ctrl | LCtrl | RCtrl | Shift | LShift | RShift | Alt | LAlt | RAlt | LWin | RWin
; Browser_Back | Browser_Forward | Browser_Refresh | Browser_Stop | Browser_Search | Browser_Favorites | Browser_Home
; Media_Next | Media_Prev | Media_Stop | Media_Play_Pause
; Launch_Mail | Launch_Media | Launch_App1 | Launch_App2
; Volume_Mute | Volume_Up | Volume_Down
; AppsKey | PrintScreen | CtrlBreak | Pause | Sleep
; LISTE DES TOUCHES PROBLÉMATIQUES
; Listez toutes les touches concernées entre guillemets séparés par |
brokenKeys := "r|d|l|n|Enter|Delete"
; TEMPS PENDANT LEQUEL LES TOUCHES RÉPÉTÉES DOIVENT ÊTRE IGNORÉES
; Dans un scénario typique, vous n'appuierez pas vous-même sur une seule touche plus rapidement que 5 fois par seconde (toutes les 200 millisecondes), il est donc sans impact d'avoir ce nombre à 200.
; Cependant, ce nombre détermine également la vitesse à laquelle la répétition automatique peut se produire (lorsque vous maintenez la touche enfoncée).
; Plus le nombre est petit, plus la vitesse de répétition automatique des touches fixes sera rapide, mais aussi, plus le risque que le bug de la touche se produise lorsque vous tapez normalement sera élevé.
; Les valeurs supérieures à 80 semblent être optimale, mais cela peut dépendre de votre système d'exploitation.
fixDelay := 180
; IL N'EST PAS NÉCESSAIRE DE CHANGER QUELQUE CHOSE CI-DESSOUS
; Valeurs typiques pour un script AHK de démarrage
#NoEnv ; Recommandé pour les performances et la compatibilité avec les futures versions d'AutoHotkey.
#Warn ; Activez les avertissements pour vous aider à détecter les erreurs courantes.
#KeyHistory 50 ; Taille de l'historique des touches (max: 500)
SendMode Input ; Recommandé pour les nouveaux scripts en raison de sa vitesse et de sa fiabilité supérieures.
SetWorkingDir %A_ScriptDir% ; Garantit un répertoire de démarrage cohérent.
; Crée tableau contenant les minuteries pour chaque touches pressées
lastTimePressed := {}
; Crée une minuterie avec l'heure actuelle pour chaque touches concernées
Loop, Parse, brokenKeys, |
{
lastTimePressed[A_LoopField] := A_TickCount
}
; Attribue un gestionnaire de raccourcis clavier pour chaque touches concernées
Loop, Parse, brokenKeys, |
{
keyName :=
Hotkey, $%A_LoopField%, HotKeyHandler
}
return
; Gestionnaire et règle d'ignorance des touches répétées
HotKeyHandler:
pressedKey := SubStr(A_ThisHotKey,2)
sinceLastPress := A_TickCount - lastTimePressed[pressedKey]
if (sinceLastPress > fixDelay)
{
lastTimePressed[pressedKey] := A_TickCount
Send {%pressedKey%}
}
return
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment