Mapping Caps Lock pour échapper et contrôler Windows 7

Je veux pouvoir mapper la clé de verrouillage des caps pour échapper si elle n'est pas pressée avec une autre touche et contrôler si elle l'est. Comment puis-je le faire sur Windows 7?

Vous pouvez le remapper pour échapper à SharpKeys

Cependant, je ne connais pas une manière réaliste d'effectuer un remappage conditionnel, sauf d'écrire un pilote de clavier.

Ce n'est pas exactement ce que vous voulez, mais très proche si vous pouvez vivre avec des défauts. Voici un script AutoHotKey :

$CapsLock::LControl $CapsLock Up::Send {Escape} return 

Il remappe Caps Lock pour Ctrl et envoie Escape lorsque vous relâchez la clé. Il m'a fallu un certain temps pour m'habituer à la touche Escape enfoncée chaque fois que je lâche la touche Caps Lock. Cependant, il est pratiquement inutile sur les sites de texte du site car Press Escape perd l'accent sur la zone de texte.

Je recherche une solution à cela. Je pourrais aller jusqu'à écrire une sorte de crochet de pilote / clavier dans C si nécessaire, haha.

Les ennuis spécifiques à Vim: il est impossible de dactylographier les digraphes à l'aide de la combinaison Ctrl-K et est généreusement ennuyeux avant de vous habituer. Cela fonctionne bien pour moi, car je ferais tout pour éviter les clés Esc et Ctrl autant que possible.

J'utilise le script AutoHotkey suivant pour cela, adapté à partir de celui que j'ai trouvé sur le Wiki Wiki de Vim . La mise en œuvre est un peu piquante, mais cela "fonctionne pour moi". (Et contrairement aux autres réponses sur cette page à partir du 2016-09-19, elle résout pleinement le problème sans aucune mise en garde dont je suis au courant).

Le codeur original a noté:

Le script tente également de détecter et d'éviter les «faux positifs» où vous appuyez sur Contrôle et une autre clé et relâchez les deux trop rapidement, c'est-à-dire avant la période de temporisation.

Assurez-vous de modifier la valeur de 250ms en fonction de la qualité ou de la mauvaise qualité de votre clavier et de votre propre temps de réaction. C'est probablement quelque chose à modifier de façon expérimentale à votre convenance.

CapsLockCtrlEscape.ahk gist :

 g_LastCtrlKeyDownTime := 0 g_AbortSendEsc := false g_ControlRepeatDetected := false *CapsLock:: if (g_ControlRepeatDetected) { return } send,{Ctrl down} g_LastCtrlKeyDownTime := A_TickCount g_AbortSendEsc := false g_ControlRepeatDetected := true return *CapsLock Up:: send,{Ctrl up} g_ControlRepeatDetected := false if (g_AbortSendEsc) { return } current_time := A_TickCount time_elapsed := current_time - g_LastCtrlKeyDownTime if (time_elapsed <= 250) { SendInput {Esc} } return ~*^a:: g_AbortSendEsc := true return ~*^b:: g_AbortSendEsc := true return ~*^c:: g_AbortSendEsc := true return ~*^d:: g_AbortSendEsc := true return ~*^e:: g_AbortSendEsc := true return ~*^f:: g_AbortSendEsc := true return ~*^g:: g_AbortSendEsc := true return ~*^h:: g_AbortSendEsc := true return ~*^i:: g_AbortSendEsc := true return ~*^j:: g_AbortSendEsc := true return ~*^k:: g_AbortSendEsc := true return ~*^l:: g_AbortSendEsc := true return ~*^m:: g_AbortSendEsc := true return ~*^n:: g_AbortSendEsc := true return ~*^o:: g_AbortSendEsc := true return ~*^p:: g_AbortSendEsc := true return ~*^q:: g_AbortSendEsc := true return ~*^r:: g_AbortSendEsc := true return ~*^s:: g_AbortSendEsc := true return ~*^t:: g_AbortSendEsc := true return ~*^u:: g_AbortSendEsc := true return ~*^v:: g_AbortSendEsc := true return ~*^w:: g_AbortSendEsc := true return ~*^x:: g_AbortSendEsc := true return ~*^y:: g_AbortSendEsc := true return ~*^z:: g_AbortSendEsc := true return ~*^1:: g_AbortSendEsc := true return ~*^2:: g_AbortSendEsc := true return ~*^3:: g_AbortSendEsc := true return ~*^4:: g_AbortSendEsc := true return ~*^5:: g_AbortSendEsc := true return ~*^6:: g_AbortSendEsc := true return ~*^7:: g_AbortSendEsc := true return ~*^8:: g_AbortSendEsc := true return ~*^9:: g_AbortSendEsc := true return ~*^0:: g_AbortSendEsc := true return ~*^Space:: g_AbortSendEsc := true return ~*^Backspace:: g_AbortSendEsc := true return ~*^Delete:: g_AbortSendEsc := true return ~*^Insert:: g_AbortSendEsc := true return ~*^Home:: g_AbortSendEsc := true return ~*^End:: g_AbortSendEsc := true return ~*^PgUp:: g_AbortSendEsc := true return ~*^PgDn:: g_AbortSendEsc := true return ~*^Tab:: g_AbortSendEsc := true return ~*^Return:: g_AbortSendEsc := true return ~*^,:: g_AbortSendEsc := true return ~*^.:: g_AbortSendEsc := true return ~*^/:: g_AbortSendEsc := true return ~*^;:: g_AbortSendEsc := true return ~*^':: g_AbortSendEsc := true return ~*^[:: g_AbortSendEsc := true return ~*^]:: g_AbortSendEsc := true return ~*^\:: g_AbortSendEsc := true return ~*^-:: g_AbortSendEsc := true return ~*^=:: g_AbortSendEsc := true return ~*^`:: g_AbortSendEsc := true return ~*^F1:: g_AbortSendEsc := true return ~*^F2:: g_AbortSendEsc := true return ~*^F3:: g_AbortSendEsc := true return ~*^F4:: g_AbortSendEsc := true return ~*^F5:: g_AbortSendEsc := true return ~*^F6:: g_AbortSendEsc := true return ~*^F7:: g_AbortSendEsc := true return ~*^F8:: g_AbortSendEsc := true return ~*^F9:: g_AbortSendEsc := true return ~*^F10:: g_AbortSendEsc := true return ~*^F11:: g_AbortSendEsc := true return ~*^F12:: g_AbortSendEsc := true return 

Cela peut apparaître sur la page vim wikia mentionnée précédemment après la solution de Rich ci-dessus.

 ; Author: fwompner gmail com #InstallKeybdHook SetCapsLockState, alwaysoff Capslock:: Send {LControl Down} KeyWait, CapsLock Send {LControl Up} if ( A_PriorKey = "CapsLock" ) { Send {Esc} } return 

Ce n'est pas mon travail, mais j'ai commencé à l'utiliser et il fonctionne exactement comme décrit, pas de mises en garde réelles, et parce qu'il ne tente pas de mapper les exceptions (parce qu'elles ne sont pas nécessaires), il se comporte très bien en Chrome L'a voulu pour Vimium).

En fait, je pense avoir construit la solution parfaite ici:

En tant qu'utilisateur de Vim, c'est un must pour moi, et je l'ai utilisé avec succès sur Windows depuis longtemps. Je crée simplement une entrée sur HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run avec regedit pour pointer vers l'exécutable et ça marche simplement.

Pour compiler et installer les dépendances, vérifiez le référentiel README et le site Web principal pour Interception.

J'ai également créé une version Linux de la même chose ici:

Voici une entrée de registre qui mappe le verrou de capsules pour échapper sur Windows 7.


 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,3a,00,46,00,01,00,3a,00,00,00,00,00 

Enregistrez ce qui précède dans un fichier avec une extension .reg (comme mapCapLocks.reg) et importez-le / exécutez-le sur votre machine.

Le programme remapkey.exe inclus dans Windows Server 2003 Resource Kit Tools mentionné dans cet article fonctionne bien dans Windows 7.