2009-12-11 16 views
63

Recientemente cambié al diseño de teclado de Dvorak como un pequeño experimento. Una de las partes más difíciles de la transición ha sido lidiar con teclas rápidas. La mayoría de las teclas rápidas están diseñadas con QWERTY en mente y, para empeorar las cosas, las teclas rápidas parecen tener una memoria extremadamente muscular.¿Por qué Visual Studio captura eventos clave antes de autohotkey?

En lugar de volver a aprender todas las teclas de acceso rápido, he escrito un guión autohotkey para traducir la distribución Dvorak volver a QWERTY cuando el Ctrl, Alt, o Gana teclas se presionan en combinación con otras teclas . Funciona muy bien en todas partes que he intentado, excepto Visual Studio '08. Parece que las pulsaciones de teclas están siendo atrapadas antes de que autohotkey pueda traducirlas.

¿Por qué sucede esto y cómo soluciono esto?

A continuación se muestra un extracto (desde el inicio) de mi guión:

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

Actualización: El script funciona bien en Win7 con AHK, vs08, y CodeRush recién instalado. La máquina con la que estoy teniendo problemas está ejecutando Vista. ¿Alguna idea sobre cómo diagnosticar aún más?

Actualización 2: La secuencia de comandos funciona bien con Vista y 2010 beta 2. Parece ser algo con solo frente a 08 + vista. Voy a intentar una nueva instalación de vs08 esta noche.

Respuesta

131

Aha! Lo he descubierto. Si ahk y la aplicación de destino no se están ejecutando bajo los mismos privilegios (o usuario), ahk no interceptará/simulará los eventos del teclado correctamente. En mi caso, visual studio se ejecutó con privilegios de administrador (elevado) mientras que el script ahk se ejecutó como el usuario actualmente conectado.

Cualquiera de los siguientes resuelto el problema:

  • Correr tanto vs y ahk como el usuario actual
  • Compilación de la secuencia de comandos y ejecutar tanto frente y la aplicación compilada como administrador
+3

Compilar y ejecutar como administrador funcionó perfectamente! – MEMark

+12

Solo quería agregar que no se trata de * permisos * diferentes. Pero en cambio, el hecho de que un script AutoHotkey no funcione en una aplicación que se ejecuta en un nivel de privilegio * más alto que el script. Consulte mi respuesta a continuación. –

+1

Puede agregar "Ejecutar como administrador" en el menú contextual para ahk. Guarda un paso de compilación. http://www.howtogeek.com/howto/windows-vista/add-run -as-administrator-for-autohotkey-scripts-in-windows-vista / –

0

Esta frase en el small print sonidos relevantes:

Si SendMode se utiliza en la sección de auto-ejecución (parte superior de la secuencia de comandos), que afecta a todas las modificaciones del mapa. Sin embargo, dado que la reasignación usa Send {Blind} y dado que el modo SendPlay no admite completamente {Blind}, es posible que algunos remapeos no funcionen correctamente en el modo SendPlay (especialmente Control, Shift, Alt y Win). Para evitar esto, evite SendPlay en la sección de ejecución automática cuando tenga remapeados; luego use el comando SendPlay vs. Send en otros lugares a lo largo del script. Alternativamente, podría traducir sus remapeos en teclas rápidas (como se describe a continuación) que explícitamente llaman SendEvent vs. Send.

+0

En realidad, la secuencia de comandos en cualquiera de los cuatro modos de "envío" no ayuda. :( –

37

Justo quiero agregar un par de puntos a la solución encontrada por el propio OP.

1) El problema no es con AHK y VS corriendo con diferentes permisos - es sólo que las teclas rápidas creadas por una secuencia de comandos que se ejecuta en un modo que no es administrador no funcionaría en aplicaciones que se ejecutan en el administrador modo, pero no habría ningún problema si es al revés.

2) No es necesario compilar la secuencia de comandos necesariamente, simplemente configure autohotkey.exe para que se ejecute en el modo de administración (eso es lo que hago), o bien, cree un acceso directo al script en particular y configúrelo para que siempre se ejecute modo de administrador. (por decirlo de alguna manera, no hay ganancia de rendimiento al ejecutar una versión compilada de una secuencia de comandos AHK, porque el código aún se interpreta, es solo que ahora el intérprete está incrustado en el ejecutable creado)

Cuestiones relacionadas