Pilote Windows

De Disposition de clavier bépo
Attention

Cette page fourni des pilotes fr-dvorak-bépo pour windows basé sur des touches virtuelles azerty français pour les raccourcis avec clavier bépoCtrl (sauf sous Word ou Outlook…). Plus d’info sur la page de discussion.

klc est l’extension d’un fichier texte utilisé par le logiciel Keyboard Layout Creator de Microsoft (MSKLC version 1.4, 30 janvier 2007) qui permet de compiler les pilotes d'installation d’une disposition de clavier sur les systèmes d’exploitation Microsoft Windows.

Le fichier windows/fr-dvorak-bepo.klc disponible sur le dépôt subversion du projet est généré automatiquement avec le programme configGenerator. MSKLC le transforme en une .dll contenant le pilote de la disposition fr-dvorak-bépo. Il génére aussi une application pour l’installer sur les systèmes d'exploitation Windows. Tous ces fichiers sont disponibles dans l’auto-executable 7zip windows/fr-dvorak-bepo-1.1rc2.exe (infos)  : c’est le pilote fourni aux utilisateurs sur la page d’installation Windows. La dll est copié dans le répertoire %windir%/system32/bepo0651.dll.

Limites de MSKLC version 1.4.6000.2

MSKLC utilise .NET 2.0. Il comprend un fichier d'aide msklc.chm et un fichier nameslist.txt qui contient la liste des noms unicode 5.0. Cette liste peut se mettre à jour dans le programme pour quand viendra unicode 5.1.

  • l'interface de MSKLC n’accepte pas de mettre le tiret bas « _ » sur clavier azertyAltGr + clavier azertyEspace.

ERROR: 'VK_SPACE' in Shift State 'Ctl+Alt' must be made up of white space character(s), but is defined as '_' (U+005f) instead.

  • Les touches mortes ne s'enchainent pas et donc les caractères avec diacritiques multiples ne fonctionnent qu'avec des diacritiques combinants.
  • Absence de touche morte de type « compose ».

Alternative au programme MSKLC

Compiler les pilotes en batch

Le répertoire d’installation de MSKLC contient un fichier \bin\i386\kbdutool.exe – KbdTool v3.40 - convert keyboard text file to C file or a keyboard layout DLL. L'option -u génère la bibliothèque .dll et -s quatre fichiers sources .H .C .RC .DEF.

Il y a également 38 fichiers sources en C dans le répertoire \inc\… dont kdb.h.

Compiler avec les sources des pilotes

Une alternative pour obtenir un pilote pour Windows est de modifier certains fichiers sources en C disponibles dans le Windows Driver Kit de Windows Server 2008. La compilation donne la .dll du pilote que l'on peut copier dans le répertoire system32. Il aurait l'avantage de pouvoir palier aux limites imposées par MSKLC. Il nécessite un installeur pour les systèmes windows (celui-ci pourrait peut-être installer plusieurs dispositions en même temps comme sous Mac).

Autohotkey

Un script akh de AutoHotKey (site officiel) peut être utilisé pour obtenir la disposition sous windows en contournant le probème de privilèges[1].

Modification de la base de registre

Attention

Ceci modifie la position des touches pour toutes les dispositions

Fichier klc actuel commenté

En-tête

KBD	bepo0651	"fr-dvorak-bépo v0.6.5.1"

COPYRIGHT	"Public Domain"

COMPANY	"wiki pour la conception d un dvorak francais"

On définit le nom de la dll (ascii 8.3) (bepo0651.dll) et la description que l'on retrouve dans les propiétés de cette dll ainsi que dans les infos du programme dans le panneau de désinstallation. Ces deux informations doivent être unique sur le système. Company ne peut pas être laissé vide. Si « copyright » est vide, il indiquera la date de création de la disposition. Ces valeurs ne peuvent commencer par un « " ».

LOCALENAME	"fr-FR"

Langue (locale) de la disposition de clavier : fr-CH sur le clavier Qwertz suisse, fr-BE sur le clavier Azerty belge, fr-CA sur le clavier qwerty canadien,

LOCALEID	"0000040c"

Numéro utilisé dans la base de registre pour référencer la disposition. Il dépend du LOCALENAME précédent :

  • FR (francais) : 0000040c
  • CH (suisse) : 0000100c
  • BE (belge) : 0000080c
  • CA (canada) : 00000c0c

Il sert par exemple si l'on veut activer le bépo au login de windows en modifiant la base de registre.

VERSION	1.0

Quelqu'un sait de quel version il s'agit ?

Définition du comportement des modificateurs

SHIFTSTATE

0	//Column 4
1	//Column 5 : Shft
6	//Column 7 :       Ctrl Alt
7	//Column 8 : Shft  Ctrl Alt

0 = base, 1 = clavier azertyMaj, 2 = clavier azertyCtrl, 4 = clavier azertyAlt

Les états 2 clavier azertyCtrl et 3 clavier azertyMaj+clavier azertyCtrl (soit les raccourcis clavier en clavier azertyCtrl + clavier azertytouche) ne sont pas utilisés par le pilote.

        ╔═════╗  
 clavier azertyMaj ║1   7║ clavier azertyAltGr+clavier azertyMaj (=clavier azertyCtrl+clavier azertyAlt+clavier azertyMaj)
        ║     ║
        ║0   6║ clavier azertyAltGr (=clavier azertyCtrl+clavier azertyAlt)
        ╚═════╝ 

Disposition des caractères

LAYOUT		;an extra '@' at the end is a dead key

//SC	VK_		Cap	0	1	6	7

29	OEM_7		0	0024	0023	00a7	00b6	// $ # § ¶
02	1		1	0022	1	2014	-1	// " 1 —
03	2		1	00ab	2	003c	2264	// « 2 < ≤
04	3		1	00bb	3	003e	2265	// » 3 > ≥
05	4		1	0028	4	005b	201c	// ( 4 [ “
06	5		1	0029	5	005d	201d	// ) 5 ] ”
07	6		1	005f	6	-1	-1	// _ 6
08	7		1	002b	7	00b1	00b0	// + 7 ± °
09	8		1	002d	8	2013	2032	// - 8 – ′
0a	9		1	002f	9	00f7	2033	// / 9 ÷ ″
0b	0		1	002a	0	00d7	-1	// * 0 ×
0c	OEM_4		0	003d	0040	00ac	-1	// = @ ¬
0d	OEM_PLUS	0	0025	00b5	2030	-1	// % µ ‰	
										
10	A		1	b	B	007c	00a6	// b B | ¦
11	Z		1	00e9	00c9	00b4@	02dd@	// é É ´ ˝
12	E		1	p	P	0026	-1	// p P &
13	R		5	o	O	0153	0152	// o O œ Œ
14	T		1	00e8	00c8	0060	0060@	// è È ` `
15	Y		0	005e@	0021	02c7@	00a1	// ^ ! ˇ ¡
16	U		1	v	V	-1	-1	// v V
17	I		5	d	D	00f0	00d0	// d D ð Ð
18	O		1	l	L	fe63@	-1	// l L ﹣
19	P		5	j	J	0133	0132	// j J ij IJ
1a	OEM_6		5	z	Z	0259	018f	// z Z ə Ə
1b	OEM_1		1	w	W	02d8@	-1	// w W ˘
					
1e	Q		5	a	A	00e6	00c6	// a A æ Æ
1f	S		5	u	U	00f9	00d9	// u U ù Ù
20	D		1	i	I	00a8@	02d9@	// i I ¨ ˙
21	F		1	e	E	20ac	fe67@	// e E € ﹧
22	G		0	002c	003f	2019	00bf	// , ? ’ ¿
23	H		1	c	C	00a9	-1	// c C ©
24	J		5	t	T	00fe	00de	// t T þ Þ
25	K		1	s	S	00df	-1	// s S ß
26	L		1	r	R	00ae	-1	// r R ®
27	M		5	n	N	00f1	00d1	// n N ñ Ñ
28	OEM_3		1	m	M	00af@	00ba	// m M ¯ º
2b	OEM_5		1	00e7	00c7	00b8@	-1	// ç Ç ¸
									
56	OEM_102		1	00ea	00ca	002f	-1	// ê Ê /
2c	W		1	00e0	00c0	007e	007e@	// à À ~ ~
2d	X		1	y	Y	005c	-1	// y Y \
2e	C		1	h	H	007b	-1	// h H {
2f	V		0	002e	003a	007d	00b7	// . : } ·
30	B		1	k	K	2026	-1	// k K …
31	N		0	0027	003b	2018	-1	// ' ; ‘
32	OEM_COMMA	1	q	Q	-1	-1	// q Q
33	OEM_PERIOD	1	g	G	02da@	-1	// g G ˚	
34	OEM_2		1	x	X	2020	2021	// x X † ‡
35	OEM_8		1	f	F	02db@	00aa	// f F ˛ ª
39	SPACE		0	0020	00a0	0020	202f	//
									
53	DECIMAL		0	002e	002e	-1	-1	// . .

Scan codes

La colonne SC définit le scan code des touches. C'est une valeur hardware envoyée par le clavier lorsqu'une touche est pressée :

 ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
 │    │    │    │    │    │    │    │    │    │    │    │    │    ║        ║
 │ 29 │ 02 │ 03 │ 04 │ 05 │ 06 │ 07 │ 08 │ 09 │ 0A │ 0B │ 0C │ 0D ║   0E   ║
 ╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦═════╣
 ║       ║    │    │    │    │    │    │    │    │    │    │    │    ║     ║
 ║  0F   ║ 10 │ 11 │ 12 │ 13 │ 14 │ 15 │ 16 │ 17 │ 18 │ 19 │ 1A │ 1B ║  1C ║
 ╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
 ║        ║    │    │    │    │    │    │    │    │    │    │    │    ║    ║
 ║  3A    ║ 1E │ 1F │ 20 │ 21 │ 22 │ 23 │ 24 │ 25 │ 26 │ 27 │ 28 │ 2B ║    ║
 ╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
 ║      ║    │    │    │    │    │    │    │    │    │    │    ║           ║
 ║  2A  ║ 56 │ 2C │ 2D │ 2E │ 2F │ 30 │ 31 │ 32 │ 33 │ 34 │ 35 ║     36    ║
 ╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
 ║       ║      ║     ║                       ║       ║      ║      ║      ║  ╔════╗
 ║  1D   ║ E01F ║ 38  ║          39           ║  E038 ║ E027 ║ E02F ║ E01D ║  ║ 53 ║
 ╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝  ╚════╝

Virtual key codes

 ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
 │OEM_│  1 │  2 │  3 │  4 │  5 │  6 │  7 │  8 │  9 │  0 │OEM_|OEM_║        ║
 │7   |    │    │    │    │    │    │    │    │    │    │4   │PLUS║   <--  ║
 ╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╔═════╣
 ║       ║   A│   Z|   E|   R|   T│   Y│   U│   I│   O│   P│OEM_|OEM_║     ║
 ║  ->|  ║    │    │    │    │    │    │    │    │    │    │6   │1   ║     ║
 ╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
 ║        ║  Q │  S │  D │  F │  G │  H │  J │  K │  L │  M │OEM_|OEM_║   |║
 ║  CAPS  ║    │    │    │    │    │    │    │    │    │    │3   |5   ║ <-'║
 ╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╩═════════╣
 ║   ^  ║OEM_│  W │  X │  C │  V │  B │  N │OEM_│OEM_|OEM_│OEM_║     ^     ║
 ║   |  ║102 |    │    │    │    │    │    COMMA|PERIOD|2 │8   ║     |     ║
 ╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
 ║       ║      ║     ║                       ║       ║      ║      ║      ║  ╔═══╗
 ║ Ctrl  ║ WinG ║ Alt ║         SPACE         ║ AltGR ║ WinD ║ WinM ║ Ctrl ║  DECIMAL
 ╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝  ╚═══╝
  • La touche VK_DECIMAL/sc53 est la touche clavier bépo. du pavé numérique.
  • VK_SPACE et VK_DECIMAL doivent être défini dans le klc.
  • La touche VK_OEM_102/sc56 – clavier disposition azerty< clavier disposition azerty> azerty (lesser greater, LSGT de xkb) – clavier bépoê, clavier bépoÊ et clavier bépo/ bépo – n'est pas présente sur certains types de claviers.

Comportement du capslock

  • La colonne Cap définit le comportement de la touche majuscule :
    • 0 pas de caps=shift,
    • 1 caps=shift pour les caractères en accès direct,
    • 4 caps=shift pour les caractères en accès altgr.
    • 5 = 1 + 4

Placement des caractères

  • Les colonnes 0, 1, 6 et 7 sont définies par le caractère lui-même pour les lettres de l'alphabat latin et les chiffres et sinon par un numéro unicode.
    • Les touches mortes ont un « @ » en fin de définition et ne peuvent être nulle (les caractères combinants non plus).
    • Les emplacements non définis sont à -1.
    • Les ligatures ne doivent pas contenir plus de quatre points de code UTF-16.
  • Les noms complets des caractères peuvent être obtennus en commentaires en sauvegardant le .klc avec MSKLC. Ils ne sont générés par configGenerator. Par exemple // f F ˛ ª devient // LATIN SMALL LETTER F, LATIN CAPITAL LETTER F, <none>, OGONEK, FEMININE ORDINAL INDICATOR. (soit >3800 caractères en commentaires, environ 7 ko).

Définition des touches mortes

DEADKEY	00b4       
                    
0041	00c1	// A -> Á
0102	1eae	// Ă -> Ắ
00c2	1ea4	// Â -> Ấ
00c5	01fa	// Å -> Ǻ
…

Tous les caractères basés sur des touches mortes sont décrits avec deux colonnes Unicode. La première est le caractère de base, la seconde le caracère résultant de la frappe touche morte plus caractère de base où qu'il soit sur la disposition. La liste complète n'est pas détaillée.

Définition du nom des touches assignées à chaque scancode

KEYNAME

01	Esc
0e	Backspace
0f	Tab
1c	Enter
1d	Ctrl
2a	Shift
36	"Right Shift"
37	"Num *"
38	Alt
39	Space
3a	"Caps Lock"
3b	F1
3c	F2
3d	F3
3e	F4
3f	F5
40	F6
41	F7
42	F8
43	F9
44	F10
45	Pause
46	"Scroll Lock"
47	"Num 7"
48	"Num 8"
49	"Num 9"
4a	"Num -"
4b	"Num 4"
4c	"Num 5"
4d	"Num 6"
4e	"Num +"
4f	"Num 1"
50	"Num 2"
51	"Num 3"
52	"Num 0"
53	"Num Del"
54	"Sys Req"
57	F11
58	F12
7c	F13
7d	F14
7e	F15
7f	F16
80	F17
81	F18
82	F19
83	F20
84	F21
85	F22
86	F23
87	F24

KEYNAME_EXT

1c	"Num Enter"
1d	"Right Ctrl"
35	"Num /"
37	"Prnt Scrn"
38	"Right Alt"
45	"Num Lock"
46	Break
47	Home
48	Up
49	"Page Up"
4b	Left
4d	Right
4f	End
50	Down
51	"Page Down"
52	Insert
53	Delete
54	<00>
56	Help
5b	"Left Windows"
5c	"Right Windows"
5d	Application

Définition du nom des touches mortes

KEYNAME_DEAD

00b4	"ACUTE ACCENT"
02dd	"U+0030 U+0032 U+0064 U+0064"
0060	"GRAVE ACCENT"
005e	"CIRCUMFLEX ACCENT"
02c7	"CARON (Mandarin Chinese third tone)"
002f	"SOLIDUS"
02d8	"BREVE"
00a8	"DIAERESIS"
02d9	"DOT ABOVE (Mandarin Chinese light tone)"
00a4	"CURRENCY SIGN"
00af	"MACRON"
00b8	"CEDILLA"
007e	"TILDE"
02da	"RING ABOVE"
02db	"OGONEK"

MSKLC ne trouve pas le nom du double accent aigu 02dd. configGenerator le nomme "DOUBLE ACUTE ACCENT".

Pied de page

DESCRIPTIONS

0409	Français (fr-dvorak-bépo v0.6.5.1)

Description du clavier utilisée dans la barre des langues = première ligne du klc.

LANGUAGENAMES

0409	French (France)

French=Français=Nom de la langue utilisée dans locale. On peut avoir également :

  • French (Belgique)
  • French (Canada)
  • French (Suisse)
ENDKBD

Fichier d'erreur généré par msklc

Si quelqu'un est motivé il faudrait lire totalement le log d'erreurs lors de la compilation avec MSKLC suite au passage sur configGenerator : windows/fr-dvorak-bepo-windows-1.1rc2.log

  • Une bonne partie des combinaisons obtenus avec les touches mortes est inutile et pourrait être supprimé du pilote.
  • Il signale le choix du comportement de la touche caps pour les chiffres.

Les klc de configGenerator

VK_ bépo pur

 ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
 │OEM_│  1 │  2 │  3 │  4 │  5 │  6 │  7 │  8 │  9 │  0 │OEM_│OEM_║        ║
 │3   │    │    │    │    │    │    │    │    │    │    │MINUS PLUS   <--  ║
 ╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╔═════╣
 ║       ║  B │OEM_│  P │  O │OEM_│OEM_│  V │  D │  L │  J │  Z │  W ║     ║
 ║  ->|  ║    │1   │    │    │2   │4   │    │    │    │    │    │    ║     ║
 ╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
 ║        ║  A │  U │  I │  E │OEM_│  C │  T │  S │  R │  N │  M │OEM_║   |║
 ║  CAPS  ║    │    │    │    │COMMA    │    │    │    │    │    │5   ║ <-'║
 ╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
 ║   ^  ║OEM_│OEM_│  Y │  H │OEM_│  K │OEM_│  Q │  G │  X │  F ║     ^     ║
 ║   |  ║102 |6   │    │    │PERIOD   │7   │    │    │    │    ║     |     ║
 ╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
 ║       ║      ║     ║                       ║       ║      ║      ║      ║  ╔═══╗
 ║ Ctrl  ║ WinG ║ Alt ║         SPACE         ║ AltGR ║ WinD ║ WinM ║ Ctrl ║  DECIMAL
 ╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝  ╚═══╝

Le pilote de Masaru n'a pas la même configuration.

Pourquoi choisit-on OEM_PLUS sur clavier bépo% et OEM_MINUS sur clavier bépo= ?

VK_ bépo-wertz

 ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔════════╗
 │OEM_│  1 │  2 │  3 │  4 │  5 │  6 │  7 │  8 │  9 │  0 │OEM_│OEM_║        ║
 │2   │    │    │    │    │    │    │    │    │    │    │4   |6   ║   <--  ║
 ╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╔═════╣
 ║       ║  Q │  W │  E │  R │  T │  Z │  U │  I │  O │  P │OEM_│OEM_║     ║
 ║  ->|  ║    │    │    │    │    │    │    │    │    │    │1   │3   ║     ║
 ╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗    ║
 ║        ║  A │  S │  D │  F │  G │  H │  J │  K │  L │OEM_│OEM_│OEM_║   |║
 ║  CAPS  ║    │    │    │    │    │    │    │    │    │7   │5   │8   ║ <-'║
 ╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩════╣
 ║   ^  ║OEM_│  Y │  X │  C │  V │  B │  N │  M │OEM_│OEM_│OEM_║     ^     ║
 ║   |  ║102 |    │    │    │    │    │    │    COMMA│PERIOD MINUS   |     ║
 ╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧══╦═╧════╧╦═══╧══╦═╩════╦══════╣
 ║       ║      ║     ║                       ║       ║      ║      ║      ║  ╔═══╗
 ║ Ctrl  ║ WinG ║ Alt ║         SPACE         ║ AltGR ║ WinD ║ WinM ║ Ctrl ║  DECIMAL
 ╚═══════╩══════╩═════╩═══════════════════════╩═══════╩══════╩══════╩══════╝  ╚═══╝

Liens externes