2009-12-11 16 views
63

Je suis récemment passé à la disposition du clavier Dvorak comme un peu d'expérience. L'une des parties les plus difficiles de la transition a été le traitement des touches de raccourci. La plupart des touches de raccourci sont conçues en pensant à QWERTY et, pour ne rien arranger, les raccourcis clavier semblent être extrêmement liés à la mémoire musculaire.Pourquoi Visual Studio capte-t-il les événements clés avant l'auto-clé?

Plutôt que de réapprendre toutes les clés-chaud, j'ai écrit un script autohotkey pour traduire la mise en page Dvorak retour AZERTY lorsque le Ctrl, Alt ou touches Win sont pressés conjointement avec d'autres touches . Cela fonctionne magnifiquement partout où j'ai essayé, sauf Visual Studio '08. Il semble que les frappes de touches soient interceptées avant que autohotkey puisse les traduire.

Pourquoi cela se produit-il et comment résoudre ce problème?

est Ci-dessous un extrait (dès le début) de mon script:

; control + letter 
^;::^z 
^q::^x 
^j::^c 
^k::^v 

Mise à jour: Le script fonctionne très bien sur Win7 avec AHK, VS08 et CodeRush fraîchement installé. La machine avec laquelle je rencontre des problèmes fonctionne sous Vista. Des pensées sur la façon de diagnostiquer davantage?

Mise à jour 2: Le script fonctionne bien avec Vista et 2010 beta 2. Semble être quelque chose avec juste vs 08 + vista. Je vais essayer une nouvelle installation de vs08 ce soir.

Répondre

131

Aha! Je l'ai compris. Si ahk et l'application cible ne fonctionnent pas sous les mêmes privilèges (ou utilisateur), ahk n'intercepte/ne simule pas correctement les événements du clavier. Dans mon cas, Visual Studio a été exécuté avec des privilèges administrateur (élevés) pendant que le script ahk était exécuté en tant qu'utilisateur actuellement connecté.

Soit des éléments suivants résolu le problème:

  • Courir deux vs et AHK que l'utilisateur actuel
  • Compiler le script et exécute à la fois contre et l'application compilée en tant qu'administrateur
+3

La compilation et l'exécution en tant qu'administrateur fonctionnaient parfaitement! – MEMark

+12

Je voulais juste ajouter que ce n'est pas une question d'autorisations * différentes *, mais plutôt qu'un script AutoHotkey ne fonctionnera pas sur une application qui fonctionne à un niveau de privilège * supérieur * Voir la réponse ci-dessous –

+1

Vous pouvez ajouter "Exécuter en tant qu'administrateur" dans le menu contextuel de ahk, ce qui vous permet d'enregistrer une étape de compilation http://www.howtogeek.com/howto/windows-vista/add-run -as-administrateur-pour-autohotkey-scripts-dans-windows-vista / –

0

Cette phrase dans la small print semble pertinente:

Si SendMode est utilisé dans la section auto-exécution (partie supérieure du script), il affecte tous remappages. Cependant, puisque la reconfiguration utilise Send {Blind} et que le mode SendPlay ne supporte pas complètement {Blind}, certaines remappages peuvent ne pas fonctionner correctement en mode SendPlay (en particulier Control, Shift, Alt et Win). Pour contourner ce problème, évitez SendPlay dans la section d'exécution automatique lorsque vous avez des remappings; puis utilisez la commande SendPlay vs Send à d'autres endroits du script. Alternativement, vous pouvez traduire vos remappings en raccourcis clavier (comme décrit ci-dessous) qui appellent explicitement SendEvent vs Send.

+0

script dans l'un des quatre modes "envoyer" n'aide pas. :( –

37

Juste vouloir ajouter quelques points à la solution trouvée par l'OP lui-même.

1) Le problème est pas avec AHK et VS en cours d'exécution avec différentes autorisations - juste que les raccourcis clavier créés par un script en cours d'exécution en mode non-admin ne fonctionnerait pas sur les applications en cours d'exécution dans le admin mode, mais il n'y aurait pas de problème si c'est l'inverse.

2) Il n'est pas nécessaire de compiler le script nécessairement, il suffit de configurer autohotkey.exe pour l'exécuter en mode admin (c'est ce que je fais), ou bien de créer un raccourci pour le script mode administrateur. (btw, juste pour souligner, il n'y a pas de gain de performance en exécutant une version compilée d'un script AHK, car le code est toujours interprété - c'est juste que maintenant l'interpréteur est intégré dans l'exécutable créé)