Je n'ai pas pu faire fonctionner la méthode basée sur le créateur de clavier. À la place, j'ai créé un script AutoHotKey. La méthode de détection du layout de clavier actuel est tirée de Comment savoir quel est le layout de clavier actuel?.
L'idée est d'automatiser l'envoi de la séquence "dead key + espace". Comme cela aura un effet incorrect pour les layouts sans dead keys, je filtre en fonction de l'ID de localité, qui pour le clavier allemand respecte le modèle 0x0407????
. Cette valeur peut ne pas être portable, étant donné que les layouts de clavier ne sont pas codés en dur.
J'ai envisagé d'utiliser GetKeyboardLayoutNameA
, mais la valeur est parfois obsolète.
;;;; ------ PAS DE DEAD KEYS ------
GetCurrentLocaleId()
{
;; Source:
;; https://autohotkey.com/board/topic/
;; 22900-how-to-find-out-what-is-the-current-keyboard-layout/
WinGet, WinID,, A
ThreadID := DllCall("GetWindowThreadProcessId", "Int", WinID, "Int", 0)
InputLocaleID := DllCall("GetKeyboardLayout", "Int", ThreadID)
Return InputLocaleID
}
IsGermanKbdLayout()
{
Return GetCurrentLocaleId()//0x10000 == 0x407
}
#If IsGermanKbdLayout()
SC029::SendRaw % "^ "
SC00D::SendRaw % "´ "
+SC00D::SendRaw % "`` "
;; Trouvez les codes de scan en consultant la console du script > affichage > historique des touches