Bonjour à tous,

me voilà avec un clavier en cours de fabrication (format dactyl manuform ortho) pour lequel il va me falloir une disposition BEPO adaptée 😃
https://forum.bepo.fr/viewtopic.php?pid=18314
L'objectif pour moi en abandonnant l'AZERTY est d'éviter la gymnastique pour taper les lettres accentuées
et avec un clavier ergonomique et programmable optimiser l'usage des doigts (home row modifier) et surtout du pouce (5 boutons dédiés).

Mais avant de me lancer dans la modif de dispositions et de me poser toutes les questions (le "e" sous le pouce ? home row modifier, ...),
je voudrai être sûr de bien comprendre tous les endroits où l'on peut adapter la disposition et en particulier obtenir les lettres accentuées.
Sachant qu'il y a toujours des inconvénients et des avantages (modifications applicables dès le boot ? applicables à tous les users ? perte des raccourcis clavier dans les logiciels ?...)

Jusqu'ici voici ma compréhension des choses :
KBID : identifiant du clavier USB qui permet à l'ordinateur de reconnaître le modèle du clavier (QWERTY, AZERTY, 84, 101 ou 104 touches, ...)

keycode = emplacement des touches du QWERTY standard américain (aucune lettre accentuée dans la liste)
le keycode n'est pas influencé par les touches mortes
microsoft.com/keycode-constants
table-of-all-keycodes

scancode = conversion de l'emplacement en "lettre" mais pas toutes (aucune lettre accentuée dans la liste)
il y a 3 sets de scancodes
Common Keyboard Scan Codes


virtualcode = pas de lettres accentuées dans la liste kbdlayout.info/kbduk/virtualkeys


Firmware du clavier (compilé par QMK) :
keycodes.h : déclaration des keycodes avec une lettre KC_W = 0x001A pour les manipuler plus facilement dans les fichiers de config
keymap.c : va traduire les emplacements keycode en scancode ? É (e acute) : #define BP_EACU KC_W
on peut intercepter les scancodes et les permuter avant de les envoyer à l'ordinateur.

Driver OS : basé sur un layout .klc et compilé en kbdxxx.dll par Microsoft Keyboard Layout Creator dans C:\Windows\System32\
c'est enfin ici que l'on obtient les lettres acentuées
Layout = fichiers kbdxxxxx.dll dont les Propriétés affichent "Keyboard Layout"
Driver Pilote = kbdclass.sys "Pilote de la classe Clavier"
The keyboard driver reads the key registry it when it starts up. So killing Explorer has no effect, you'll have to reboot to make changes effective.

Registre :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\ : liste des claviers qui peuvent être installés sur l'appareil
how to remap keys
technewstoday.com/how-to-remap-keyboard-keys/
isenselabs.com/keyboard-key-kills-and-remaps-for-windows-users
"The mappings stored in the registry work at system level and apply to all users. These mappings cannot be set to work differently depending on the current user."
manipulations manuelles dans le registre : tuto détaillé https://www.lkhrs.com/blog/2022/03/remap-windows-key-to-ctrl/

https://winaero.com/change-what-extra-app-keys-do-for-the-keyboard-in-windows-10-8-and-7/
How to Change What App Keys Do for the Keyboard in Windows 10, 8 and 7
Some keyboards contain a number of additional keys that you can use to launch a Windows application or perform a specific action. The most common keys are Calculator, Web Browser, Mail, Search. Microsoft keyboards are known for having these keys, but not only MS keyboards have them. Other manufacturers also have many models of multimedia keyboards with application keys.

The keys have a reference in Windows registry. There is a Registry branch for that:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AppKey<KEY_NUMBER>
Under such subkey, you can create two string (REG_SZ) values.
Association = ".txt" - open the default app that is set to open text files. By default it is Notepad.
ShellExecute="C:\windows\notepad.exe". Run the specified app. In my case it is notepad.exe from the system folder.

Langue : c'est aussi ici que l'on a une correspondance avec des lettres accentuées

interception logicielle :
* On peut intercepter et modifier en aval du driver (AutoHotkey, ...)
single keys or key-combos?
Microsoft PowerToys For Windows 10 : allows remapping to multiple key combos
SharpKeys
MapKeyboard (nécessite .NET Framework v3)
Keytweak (abandonware) portable
RemapKeyboard


* Voir intercepter dans le logiciel final : ex dans Word (fonctionnalité de correction automatique en cours de frappe).


Q1 : Le firmware du clavier envoie-t-il les 3 codes (Keycode, Scancode, Virtualcode)? Déjà les 2 derniers car on trouve des utilitaires qui affichent scancode et virtualcode
https://lateralus138.github.io/Key-ScanCode/


Q2 : comment cela se passe entre le driver noyau (au moment du boot) et le driver de l'OS ?
est-ce que c'est chaîné et l'un passe les infos à l'autre ?
ou bien est-ce que le second prend la place et le premier n'est plus actif quand l'OS est lancé ?

Q3 : comment cela se passe entre driver / registre / langue (préférences régionales) ?
Tout se retrouve dans le registre au final ?

* You can change the keyboard layout using the keyboard control panel applet (start - settings - control panel - keyboard - Input Locales) however this does not affect the layout used during logon (which is by default English (United States)).





Merci pour vos réponses et vos corrections 🙂
Mat
L'idée ensuite est de déterminer le contexte de l'utilisateur

* clavier programmable ?
* droits admins sur le poste de travail ?
* plusieurs utilisateurs ?

pour ensuite trouver la meilleure approche :
* firmware compilé sur mesure
* driver spécifique
* autoHotkey
* ...
Il existe un pilote Optimot complet pour AutoHotKey. En fait, il est encore plus complet que la version obtenue avec un pilote Windows (en raison des limitations sévères de Windows concernant la création de pilotes).
merci Pyjam pour l'invitation 🙂 bien que je sois toujours perdu avec Discord

>en raison des limitations sévères de Windows concernant la création de pilotes
justement j'aimerai bien savoir lesquelles elles sont STP 🙂

PowerToysKeyboard Manager
Dans PowerToys de Microsoft (que j'utilise avec mon triple screen), il y a le PowerToysKeyboard Manager

- PowerToys doit tourner en arrière-plan
- on peut remapper touches et raccourcis (sauf ceux réservés par le système d'exploitation https://learn.microsoft.com/fr-fr/windows/powertoys/keyboard-manager#keys-that-cannot-be-remapped) et raccourcis en 1 seule touche
- le remapping est instantané
- pas de possibilité de mappage différents pour 2 claviers en même temps (clavier portable + clavier externe) (il n'y a pas d'API qui agit en fonction du clavier détecté).
- le remappage continue à fonctionner comme prévu même si la langue du système est changée.
L’intérêt d’un pilote n’est pas seulement de remapper les touches (ou les caractères) mais de proposer une multitude de caractères par le jeux des touches mortes (presque 2500 dans le cas de la version complète d’Optimot. Cela inclut presque 200 symboles scientifiques, 100 flèches, la totalité de l’alphabet phonétique international, une dizaine d’espaces typographiques, une trentaine de puces, les alphabets grec et cyrillique (avec possibilité de rester verrouillé dessus pour les versions Mac et AutoHotKey), et bien d’autres choses encore, même des trucs aussi utiles que les chiffres grecs et romains ou les pièces d’échecs (♘♗♙♕♔ ♚♛♟♝♞).

Les limitations sur les pilotes Windows concernent notamment les caractères unicodes qui ne figurent pas dans le premier bloc (code sur plus de 16 bits). Le Bépo est également concerné par cette limitation.
10 jours plus tard
► des infos intéressantes sur le fonctionnement d'un driver de clavier sous Windows :

The layout DLL is loaded by the window manager when needed. One of the examples is the logon. The default set of the input locales is set in the HKCU registry, according to user's preference, which can be customized by the Regional and Language Options application in Control Panel. The window manager reads the HKCU registry and loads the keyboard layouts accordingly.

The driver package contains these files:
Kmdfsamples.cat : a signed catalog file, which serves as the signature for the entire package
kbfiltr.inf : an information (INF) file that contains information needed to install the driver
WdfCoinstaller010xx.dll : the coinstaller for version 1.xx of KMDF
kbfiltr.sys : the driver file

On peut même filtrer un modèle de clavier particulier : intéressant si on a un mécanique avec un Splinky par exemple et un clavier standard et que l'on veut un lyaout différent selon le clavier (pour prêter son ordi par exemple).
Keyboard Input WDF Filter Driver (Kbfiltr)
This driver filters input for a particular keyboard on the system.
Set the hardware ID in the kbfiltr.inx file (located with the driver source files)
If you want to filter keyboard inputs from all the keyboards plugged into the system, you can install this driver as a class filter below the KbdClass filter driver by adding the service name of this filter driver before the KbdClass filter in the registry at:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class{4D36E96B-E325-11CE-BFC1-08002BE10318}\UpperFilters


https://kbdlayout.info/

Windows distinguishes
* input languages,
* keyboard layouts
* keyboard drivers.

Input language informs the system what language is the typed text supposedly in, which is used for features like spellchecking.
Technically any keyboard layout can be used for any input language, but recent Windows versions started limiting which layouts can be selected for a given language in the user interface.

All supported keyboard layouts are defined in the registry, under HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layouts.
The subkeys identify the keyboard layouts (using KLID) and contain layout names as seen by the user, as well as references to the keyboard driver that defines which keys produce which characters.
Several keyboard layouts can share one keyboard driver.