Bonjour à tous,

Avec le projet en cours de changer de disposition sur mon nouveau clavier à des touches vierges, je me prépare quelques questionnements en cours de frappe...

J'ai lu avec intérêt un post de Fabien sur un affichage aide-mémoire pop-up :
► En appuyant sur une touche dédiée "aide-mémoire", une image de ma disposition s'affiche à l'écran.
► La disposition est générée à partir du txt stockant les correspondances de touches
► Les étiquettes des touches se modifient quand j'appuie sur une touche modificatrice (Shift, Alt, Ctrl...) et se rétablissent dès qu'on la relâche.
► L'image disparaît quand on ré-appuie sur la touche "aide-mémoire".

C'est très pratique pour retrouver l'emplacement d'un symbole dont on se sert rarement ou quand on commence à apprendre !

J'ai contacté Fabien par email mais il n'a plus sous la main le code...
L'un d'entre vous aurait-il un équivalent SVP ? car les fonctionnalités ne sont pas triviales à coder

merci !!
🙂
@Kawamashi ? @Fork Bomb ?

aide-mémoire pop up
j'ai trouvé des exemples de code avec cette recherche Google : "AutoHotkey on screen keyboard touch typing"
mais ce n'est pas aussi élégant que le fonctionnement décrit par Fabien.

Ces exemples sont parfois exclusivement QWERTY ou bien ne gèrent pas les couches ce qui est rédhibitoire.

https://github.com/marius-sucan/KeyPress-OSD - 2022

https://documentation.help/AHK_H-2.0/KeyboardOnScreen.htm by jon - 2006 ?

https://www.autohotkey.com/boards/viewtopic.php?f=6&t=48485 by x32

https://www.autohotkey.com/board/topic/94703-another-approach-to-a-virtual-keyboard/

https://www.autohotkey.com/board/topic/122849-virtual-keyboard/

https://github.com/xcv58/AHK/blob/master/on-screen-keyboard.ahk by xcv58 - 2014

https://www.autohotkey.com/docs/v1/scripts/index.htm#KeyboardOnScreen
mais il est conçu pour les claviers QWERTY et ne prends pas en charge des dispositions non standard
Salut,

J'ai programmé ma touche Esc pour qu'en appui-double, elle envoie :
- F13 sur ma couche principale
- F14 sur ma couche NavNum
- F15 sur ma couche SymFunc.

J'ai fait des images des différentes couches de ma disposition grâce à KLE.

Voilà le script AHK (à adapter pour alt-gr F13, F14 et F15) :
aide :=0

F13::
if (aide=0) {
gui,add,picture,,J:\Multimédia\Images et photos\Images\Aide-mémoire\Kyria main.png
Gui, Color, ffffff
Gui +LastFound
winset,transcolor,ffffff
gui,-caption +alwaysontop
gui,show, X2280 Y1535
aide :=1
}
else
{
gui,destroy
aide :=0
}

return
J'espère que ça t'aidera.
Merci 🙂
En effet c'est plus simple d'utiliser une image pré-existante que de générer à la volée un clavier miniature interactif.
Je n'ai pas pu faire tourner le code malheureusement...
Je vais devoir me pencher sur le sujet.

/////////////////////////

édit :
J'ai finalement codé quelque chose qui répond à mon besoin selon cette approche simplifiée (pas de clavier généré à la volée et pas de mise en couleur des touches lors de la saisie) :

installation sur le poste de travail :
- sous Win 10
- installer AutoHotKey version 2.0
- coller le code ci-dessous dans un fichier txt et renommer l'extension en .ahk
- déposer les images des couches sur votre disque dur (exemples fournis en bas du post)
- éditer le code (transparence, choix du moniteur en cas de multi-écran et emplacement et nom des images des couches)
- lancer le code en double-cliquant le fichier .ahk
(vous verrez une icône dans le Tray Menu)
- une seule touche pour afficher l'aide-mémoire et selon l'état des touches de changement de couche, l'image est contextuelle. C'est plus ergonomique et il suffit d'une seule touche "aide-mémoire".
Dans l'exemple du code ci-dessous c'est la touche F12

utilisation
un appui sur F12 et la disposition du clavier s'affiche
un nouvel appui sur F12 et elle disparaît

si une touche (Shift, Alt, Ctrl ou AltrGr) est appuyée au moment où l'on appuie sur la touche aide-mémoire, alors on verra l'image de la disposition de la couche selon le modifier
si l'image est à l'écran et que l'on appelle l'aide-mémoire mais avec une autre touche de modification, l'image est mise à jour : cela permet de circuler dans les couches.
Pour la faire disparaître (si c'est la couche Ctrl), il faut retaper la même combinaison Ctrl + aide-mémoire

Voilà
j'espère que cela vous aidera aussi 🙂
La partie de code complexe qui gère la transparence et l'affichage provient de l'exemple sur le site autoHoKey (dernier lien du post précédent).

Que c'est pénible de coder dans notepad sans mise en forme ni coloration syntaxique...
Voici le code après avoir passé un petit coup de mise en forme par ici http://sl5.it/SL5_preg_contentFinder/examples/AutoHotKey/converts_your_autohotkey_code_into_pretty_indented_source_code.php
et en-dessous les images à déposer dans C: pour que l'exemple fonctionne directement sans adaptation de votre part


/*
aide-mémoire pop-up 
choix du niveau de transparence 
choix du moniteur d'affichage (si multi-écrans)
*/

   ;   0 makes the window invisible while 255 makes it opaque.
   global niveauTransparence := 200

   ; Put "1" to set the keyboard on second monitor, "2" on third monitor, etc... (blank = primary monitor):
   global k_Monitor = 1

   ; chemin des fichiers image des 5 couches
   global CheminLayer        := "C:\Optimot_Ergo_layer.jpg"
   global CheminLayerShift   := "C:\Optimot_Ergo_layerShift.jpg"
   global CheminLayerAlt     := "C:\Optimot_Ergo_layerAlt.jpg"
   global CheminLayerCtrl    := "C:\Optimot_Ergo_layerCtrl.jpg"
   global CheminLayerAltGr   := "C:\Optimot_Ergo_layerAltGr.jpg"

/* 
fin des paramétrages 
*/

#SingleInstance Force   ; C'est pratique en phase de développement : en relançant le nouveau script, on écrase l'ancien qui tournait. Sinon on obtient une fenêtre qu'il faut acquitter.

aide :=0       ; touche aide-mémoire seule
aideShift :=0  ; touche aide-mémoire et Shift - symbole +
aideAlt :=0    ; touche aide-mémoire et Alt - symbole !
aideCtrl :=0   ; touche aide-mémoire et Ctrl - symbole ^
aideAltGr :=0  ; touche aide-mémoire et AltGr - symbole <^>! 

; on combine la touche "aide-mémoire" avec les touches de couche (Alt, Shift, ...) pour sélectionner l'image de la couche correspondante

F12::   ; touche Aide-mémoire seule
{
   if (aideShift+aideAlt+aideCtrl+aideAltGr > 0)   ; on vérifie si une image est déjà affichée
   {
      ; dans ce cas, on l'efface
   Gui, Destroy  
   aideShift :=0  
   aideAlt :=0    
   aideCtrl :=0   
   aideAltGr :=0  
   }
   if (aide=0) {
      AffichageImage(CheminLayer)
      aide :=1
   }else  {
      Gui, Destroy
      aide :=0
   }
   return
}

+F12::  ; touche Aide-mémoire avec Shift
{
   if (aide+aideAlt+aideCtrl+aideAltGr > 0)   ; on vérifie si une image est déjà affichée
   {
      ; dans ce cas, on l'efface
   Gui, Destroy  
   aide :=0  
   aideAlt :=0    
   aideCtrl :=0   
   aideAltGr :=0  
   }
   if (aideShift=0) {
      AffichageImage(CheminLayerShift)
      aideShift :=1
   }else  {
      Gui, Destroy
      aideShift :=0
   }
   return
}

!F12::  ; touche Aide-mémoire avec Alt
{
   if (aide+aideShift+aideCtrl+aideAltGr > 0)   ; on vérifie si une image est déjà affichée
   {
      ; dans ce cas, on l'efface
   Gui, Destroy  
   aide :=0  
   aideShift :=0    
   aideCtrl :=0   
   aideAltGr :=0  
   }
   if (aideAlt=0) {
      AffichageImage(CheminLayerAlt)
      aideAlt :=1
   }else  {
      Gui, Destroy
      aideAlt :=0
   }
   return
}

^F12::  ; touche Aide-mémoire avec Ctrl
{
   if (aide+aideShift+aideAlt+aideAltGr > 0)   ; on vérifie si une image est déjà affichée
   {
      ; dans ce cas, on l'efface
   Gui, Destroy  
   aide :=0  
   aideShift :=0    
   aideAlt :=0   
   aideAltGr :=0  
   }
   if (aideCtrl=0) {
      AffichageImage(CheminLayerCtrl)
      aideCtrl :=1
   }else  {
      Gui, Destroy
      aideCtrl :=0
   }
   return
}


<^>!F12::  ; touche Aide-mémoire avec AltGr
{
   if (aide+aideShift+aideAlt+aideCtrl > 0)   ; on vérifie si une autre image est déjà affichée
   {
      ; dans ce cas, on l'efface
   Gui, Destroy  
   aide :=0  
   aideShift :=0    
   aideAlt :=0   
   aideCtrl :=0  
   }
   if (aideAltGr=0) {
      AffichageImage(CheminLayerAltGr)
      aideAltGr:=1
   }else  {
      Gui, Destroy
      aideAltGr:=0
   }
   return
}


AffichageImage(CheminDuFichier)
{
 
   Gui, Add, Picture,,%CheminDuFichier%
   ;---- Show the keyboard centered but not active (to maintain the current window's focus):
   Gui, Show, xCenter NoActivate, Virtual Keyboard View
   Gui.Opt(AlwaysOnTop)
   
   ;    Get the window's Width and Height through the GUI's name.
   WinGetPos,,, k_WindowWidth, k_WindowHeight, Virtual Keyboard View
   
   ;---- Position the keyboard at the bottom of the screen while avoiding the taskbar:
   SysGet, k_WorkArea, MonitorWorkArea, %k_Monitor%
   
   ; Calculate window's X-position:
   k_WindowX = %k_WorkAreaRight%
   k_WindowX -= %k_WorkAreaLeft%  ; Now k_WindowX contains the width of this monitor.
   k_WindowX -= %k_WindowWidth%
   k_WindowX /= 2  ; Calculate position to center it horizontally.
   ; The following is done in case the window will be on a non-primary monitor
   ; or if the taskbar is anchored on the left side of the screen: 
   k_WindowX += %k_WorkAreaLeft%
   
   ; Calculate window's Y-position:
   k_WindowY = %k_WorkAreaBottom%
   k_WindowY -= %k_WindowHeight%
   
   ;   Move the window to the bottom-center position of the monitor.
   WinMove, Virtual Keyboard View,, %k_WindowX%, %k_WindowY%
   
   ;   Make the window transparent (the number regulates the transparency).
   WinSet, Transparent, %niveauTransparence%, Virtual Keyboard View
   Return
}              
https://zupimages.net/up/23/02/lt75.jpg
https://zupimages.net/up/23/02/2m9o.jpg
https://zupimages.net/up/23/02/rf1h.jpg
https://zupimages.net/up/23/02/t2c8.jpg
https://zupimages.net/up/23/02/qj2h.jpg
J'envisage une version 2 qui écouterait en permanence les touches modificatrices : une fois que l'aide-mémoire est lancé par la touche, la couche se mettrait à jour selon l'appui en cours de frappe des touches modificatrices.

Ce serait plus simple à l'usage : un appui sur la touche "aide-mémoire" pour commencer et un autre pour arrêter. Tout le reste du temps, la couche se modifie selon le contexte.
A voir si j'arriverai le coder. 🙂