¿Teclas de acceso directo personalizadas y confiables de Windows?

9

Tengo teclas de acceso directo globales de Windows asignadas a varias instancias cmd.exe diferentes. Hago esto creando accesos directos a cmd.exe en mi escritorio y asignando a cada uno una tecla de acceso directo única (por ejemplo, CTRL + MAYÚS + U). Bastante básico. Estoy usando Win2K8 (R1 y R2).

Esto funciona bien ... la mayor parte del tiempo. Pero con regularidad exasperante, a veces no lo hace. O funcionará con un largo retraso (muchos segundos). No importa qué aplicación tenga actualmente foco (incluso puede ser una de las indicaciones de comando). No importa qué teclas asigno (he probado algunas variaciones de WIN, CTRL y SHIFT). Me di cuenta de que esto a menudo, pero no siempre, se correlaciona con explorer.exe que lucha de alguna manera u otra (por ejemplo, una ventana del explorador abierta a un recurso compartido de archivos que no está disponible, o una aplicación no responde, o lo que sea). En otras palabras, el manejo de la tecla de acceso directo parece ser muy sensible a la actividad del sistema no relacionada. Tenga en cuenta que siempre que tengo este problema, siempre puedo ALT + TAB con éxito a la ventana a la que quiero acceder, pero eso es tedioso.

Utilizo los accesos directos a estas ventanas de comandos cientos de veces al día, por lo que incluso una tasa de falla del 1% se vuelve realmente molesta.

¿Hay alguna manera de solucionar esto, o hay alguna utilidad de terceros que intercepte CONFIABLEMENTE combinaciones de teclas personalizadas para enfocar las aplicaciones que quiera, de una manera que sea independiente de otra actividad del sistema?

APÉNDICE:

Hay una propiedad de los accesos directos de Windows que no me gustaría perder si cambiara a una herramienta de teclas de acceso rápido de terceros: los accesos directos de Windows son idempotentes. Una vez que ha puesto en marcha un acceso directo a alguna aplicación, al pulsar la combinación de teclas de acceso directo de nuevo le lleva al proceso ya en marcha - no no lanzar un nuevo proceso.

Peter Baer
fuente

Respuestas:

7

Utiliza Autohotkey. El lenguaje de secuencias de comandos no es estándar y puede ser difícil de aprender, pero si todo lo que desea hacer es iniciar programas de manera confiable, es simple. ¡Además, puede basar los accesos directos en la tecla de Windows! Utilice el siguiente script de muestra y modifíquelo según sus necesidades. (Las líneas que comienzan con ;son comentarios).

;win + alt + e ... unload ipod
#!E::
   run d:\Downloads\Apps\deveject\eject ipod.bat
   return

;win + w ... launch winamp
#w::
    run c:\program files (x86)\winamp\winamp.exe
    return

;win + a ... launch AS400
#a::
    run C:\Program Files (x86)\IBM\Client Access\Emulator\Private\1.ws
    return

;win + Shift a ... launch AS400 Printer
#+a::
    run C:\Program Files (x86)\IBM\Client Access\Emulator\Private\3.ws
    return

;win + ctrl + Shift a ... launch 2nd AS400 
#^+a::
    run C:\Program Files (x86)\IBM\Client Access\Emulator\Private\2.ws
    return

Guarde esto como un archivo .ahk en su escritorio, instale autohotkey y ejecútelo.

Cada vez que presiona cualquier combinación de teclas, AutoHotkey escaneará este script. Si coincide con alguna de las combinaciones de teclas que precedieron a a ::, ejecutará el siguiente comando. Si falta la declaración de devolución, el AHK continuará escaneando el script en busca de coincidencias después de ejecutar su declaración. Las combinaciones de teclas se describen a continuación.

# = Windows Key
+ = Shift
^ = Control
! = Alt

Puede usarlos en cualquier combinación con las letras de su teclado. Una combinación que encuentro extremadamente útil es la siguiente.

; ALT Backtick ... ctrl f4
!`::
    Loop, parse, RcvCtrlW, `,
    {
     IfWinActive %A_LoopField%
     {
        sendinput ^w
        Return
     }
    }
    sendinput ^{f4}
    return

; win Backtick ... alt f4
#`::
   sendinput !{f4}
   return   

Esto es Alt + `y Win +`. Cuando se ejecuta este script y presiono alt + `, el script envía ctrl + F4. Win + `se convierte en alt + F4.

Autohotkey es básicamente su propio lenguaje de programación. Tengo scripts configurados que simulan "gestos rockeros" en todo el sistema. Tengo GMail como accesos directos para mi correo electrónico. Si pasa el tiempo para aprender algunos de sus trucos, puede volverse loco. Lifehacker tiene un montón de scripts útiles para Autohotkey. ¡Que te diviertas!

Tim Coker
fuente
3
Hmm: una característica importante de la tecla de acceso directo de Windows en la que confío es su idempotencia. La primera vez que presiono CTRL + MAYÚS + U para que aparezca un mensaje dado, se inicia cmd.exe. La próxima vez que presione ese combo, si ese cmd.exe aún se está ejecutando, simplemente lo lleva al frente, en lugar de iniciar otra instancia (que es lo que hace el comando de ejecución Autohotkey). ¿Hay alguna manera de hacer eso fácilmente con AHK?
Peter Baer
3

Así es como uso AutoHotKey de una manera que cumple con su idempotente requisito .

Como ejemplo, he conectado Caps Lock+ aa una ventana de Firefox en Stack Overflow, Caps Lock+ sa Firefox en Super User y Caps Lock+ da un símbolo del sistema.

StartOrToggleMinimize(TheWindowTitle,TheAppPath)
{  
   SetTitleMatchMode, 2
   DetectHiddenWindows, Off
   IfWinActive, %TheWindowTitle%
   {
      WinMinimize, %TheWindowTitle%
   }
   else
   { 
      IfWinExist, %TheWindowTitle%
      {
         WinGet, winid, ID, %TheWindowTitle%
         DllCall("SwitchToThisWindow", "UInt", winid, "UInt", 1)
      }
      else
      {
         run %TheAppPath%
      }
   }
   return
}

; the actual hotkeys:
CapsLock & a::StartOrToggleMinimize("Stack Overflow", "c:\program files\mozilla firefox\firefox.exe -new-window stackoverflow.com")
CapsLock & s::StartOrToggleMinimize("Super User", "c:\program files\mozilla firefox\firefox.exe -new-window superuser.com")
CapsLock & d::StartOrToggleMinimize("cmd", "cmd")

Puede cambiar el modo de coincidencia de títulos para que sea tan restrictivo como lo necesite. Si tuviera otra tecla de acceso rápido que coincidiera con "Mozilla Firefox" (en lugar de "Super Usuario", por ejemplo), pasaría por todas mis instancias de Firefox, ya que cada una tiene ese texto en el título de la ventana y lo tengo configurado para que coincida con el texto en cualquier parte del título.

Este script está fuertemente basado en este artículo en LifeHacker.

yhw42
fuente
¿Cómo se puede modificar este script para que NO sea idempotente? Específicamente, quiero varias instancias de un programa si presiono las teclas de acceso directo (estoy ejecutando masilla, y necesito poder conectarme a 4+ servidores en cualquier momento, y no quiero tener que alcanzar el mouse )
Doktor J
Si hay un texto específico y único en el título de la ventana para cada instancia, puede asignar teclas de acceso rápido para que coincidan con ese texto. Ver el Caps+ay Caps+santeriormente para dos instancias diferentes de Firefox, @DoktorJ
yhw42
Pero, ¿y si nunca quiero que coincida? Cuando cambio entre ellos, simplemente ALT + TAB, por lo que no necesito atajos para cada instancia de PuTTY: solo necesito un atajo que siempre abra una nueva instancia de PuTTY, sin importar cuántas ventanas PuTTY ya tenga tener abierto ¿Hacer esto simplemente llamando "ejecutar c: \ tools \ putty \ putty.exe" directamente desde la tecla de acceso rápido asignada?
Doktor J
@DoktorJ: ¡Oh! Si. Así es exactamente como lo harías. Aunque creo que también puedes asignar teclas de acceso rápido en las propiedades de acceso directo de Windows. Yo había asumido que significaba tener Caps+1apuntan a una instancia específica de la masilla (que es mejor que AltTab en mi opinión :)).
yhw42
3

Otra alternativa más para iniciar sus programas de forma rápida e intuitiva:

Launchy

Launchy es una utilidad gratuita de Windows y Linux diseñada para ayudarlo a olvidarse de su menú de inicio, los iconos en su escritorio e incluso su administrador de archivos.

Launchy indexa los programas en su menú de inicio y puede iniciar sus documentos, archivos de proyecto, carpetas y marcadores con solo unas pocas teclas.

texto alternativo

Gauthier
fuente
Esto se parece a la búsqueda del menú de inicio de Win7.
Theo Belaire
@Tyr: lo hace. Empecé a usar eso en Windows XP, pero continúo haciéndolo en Win7. No he usado mucho la búsqueda del menú de inicio, pero mi impresión es que Launchy todavía es más rápido. Sin embargo, puedo estar equivocado en eso.
Gauthier
2

Desafortunadamente, 6 años después con Windows 10, existen los mismos problemas, y con una actualización reciente de Windows 10 descubrí que algunos atajos / programas ya no son idempotentes . Especialmente Putty donde tengo múltiples accesos directos para la misma sesión.

Así que uso AutoHotKey y modifiqué la función compartida en este hilo (basado en este artículo en LifeHacker ) para que use un archivo INI para realizar un seguimiento de cada acceso directo. Esto no usa el Título de Windows de cada programa, ya que puede cambiar en Putty si usa la pantalla o SSH en otro servidor, ¡una característica que personalmente quiero conservar!

También se incluye una función "DeleteINIEntry ()" para la cual puede crear un acceso directo para que elimine una entrada UniqueName del archivo INI. O simplemente puede editar y cambiar el archivo manualmente.

INIFilePath := "C:\Temp\AHK.ini"

RunOrSwitchWin( UniqueName, AppPath )
{  
    global INIFilePath
    IniRead, TargetID, %INIFilePath%, windowids, %UniqueName%
    ActiveID := WinExist("A")

    ; cannot use '=' here as comparing an integar to string doesn't work well
    IfEqual TargetID, %ActiveID%
    {
        WinMinimize 
        return
    }

    WinGet, AllIDs, list

    Loop, %AllIDs%
    {
        this_id := AllIDs%A_Index%

        ifEqual TargetID, %this_id%
        {
            DllCall("SwitchToThisWindow", "UInt", this_id, "UInt", 1)
            return
        }
    }

    run, %AppPath%,,, CurrentPID
    WinWait ahk_pid %CurrentPID%
    IniWrite, % WinExist("A"), %INIFilePath%, windowids, %UniqueName%

   return
}

DeleteINIEntry()
{
    global INIFilePath
    InputBox, UniqueName, Delete INI Entry, Enter UniqueName

    If ErrorLevel = 0
        IniDelete, %INIFilePath%, windowids, %UniqueName%

    return
}

^!3::DeleteINIEntry()

; Putty shortcuts. 
; ^!1 is NOT idempotent and will run it over and over again.
^!1::run "C:\Program Files\PuTTY\putty.exe"
^!2::RunOrSwitchWin( "session1", "C:\Program Files\PuTTY\putty.exe -load session1" )

Si no desea que la ventana se minimice, simplemente comente (anteponga un;) a la línea WinMinimize y se mantendrá enfocado en la ventana activa.

agalest
fuente
1

No es una actividad no relacionada, el explorador es el proceso que maneja estos atajos.

Hay utilidades (por ejemplo, http://www.vsisystems.com/keyboardshortcuts.htm ) que pretenden tener esta funcionalidad, pero no sé si alguna de ellas resolvería el problema de la velocidad.

Ofir
fuente
1

Si Explorer está ocupado, entonces no puede manejar los accesos directos, por lo que se requiere otro programa.

Un lanzador simple y eficiente es PS Hot Launch VVL :

Esta es una utilidad gratuita que le permite definir sus propias teclas de acceso rápido para que presionar una sola tecla pueda iniciar una aplicación, insertar texto de uso común, cambiar su volumen de audio o casi cualquier otra cosa. El programa requiere Win95 / 98 / ME o WinNT / 2000 / XP, y es excelente incluso en máquinas lentas. PS Hot Launch es la alternativa perfecta al menú Inicio y al panel Inicio rápido.

imagen

harrymc
fuente