15 votos

secuencia de comandos para restaurar/traer al frente de un programa, o abrirlo si no está activo

Estoy tratando de desarrollar un script que debe hacer el siguiente. Por ejemplo, !W debe:

  • compruebe si la Palabra está activo (puede ser abierto o minimizado)
  • si se reduce al mínimo, debe ser restaurado para el tamaño y la ubicación que tenía antes de la minimización de
  • si está abierto, pero "escondido" detrás de otras ventanas abiertas, la secuencia de comandos debe llevar a la frente, haciendo que la parte delantera/de la ventana activa
  • si no es ni minimizado ni abrir, el programa debe estar recién comenzó

Me gustaría hacerlo para varios programas: !W por Palabra !N para el Bloc de notas++, !X para excel, !P para powerpoint !F para firefox. Si varias instancias de un programa se ejecuta, o, si múltiples pestañas están disponibles, se debe hacer lo anterior para la instancia más reciente o ficha. Así que, cuando hay varias ventanas de firefox abierto, se debe restaurar (o traer al frente) la mayoría de los vistos recientemente ventana con el recientemente inaugurado ficha. Del mismo modo, si varios documentos de word abierto, se debe hacer esto para el que tenía la última trabajando. Y, si no hay documento de Word está abierto o minimizado, se debe abrir una palabra fresca de la instancia. Espero que esto está claro.

Puedo hacer algunas de estas cosas, para algunos programas, pero no siempre, ni en una tecla de acceso rápido (yo todavía estoy aprendiendo el lenguaje de secuencias de comandos). ¿Cómo puedo lograr esto?

Gracias, Pedro

15voto

Coldrainwater Puntos 116

Mi comprensión de cómo la Ventana de Activación funciona es bastante simple. Se restaura el más recientemente el uso de la ventana de ese tipo. Ese comportamiento predeterminado hace que la codificación de lo que usted desea muy simple. De hecho, tengo que hacer algo casi idéntico a lo que usted está después con dos simples bloques de código.

+#w::
SetTitleMatchMode, 2 ; approximate match
IfWinExist, - Microsoft Word
{
WinActivate, - Micrsoft Word
}
IfWinNotExist, - Microsoft Word
{
Run FullFilePathToMicrosoftWord
}
return

He creado un poco de una interesante sinergia para trabajar con múltiples monitores. Tenga en cuenta que en Windows 7, pulsando shift + la tecla de windows y el uso de las flechas para desplazarse a la izquierda y a la derecha se mueve la ventana activa entre monitores a la velocidad de la luz. Así que he intentado algo un poco inteligente y se asigna a la palabra para mayús + ventana + w. Restaura la palabra si ya abra o se ejecuta una nueva instancia si no. La belleza de este enfoque es que yo nunca voy a dejar ir de shift + la tecla de windows. Al hacerlo puedo activo/iniciar word y mover a exactamente la posición que desee, utilizando izquierda y derecha teclas de flecha (arriba maximizará por el camino y se minimiza). Mapa +#r para restaurar la ventana activa y completo control de todas las ventanas que usted usa normalmente sin esfuerzo, sin el ratón. Todo lo que usted debe recordar es la primera letra de la aplicación que está intentando activar.

En respuesta a su consulta sobre la fabricación de la secuencia de comandos más genérico:

1) Considerar el uso de

; Allows you to search for an approximate window title match
SetTitleMatchMode, 2  

; For example, you could do the following to activate any existing window with 
; "- Microsoft Word" as part of the title

WinWait, - Microsoft Word, 
IfWinNotActive, - Microsoft Word, , WinActivate, - Microsoft Word, 
WinWaitActive, - Microsoft Word,

; some other code here once you have the window active

O la otra posibilidad:

;Active the window by finding its ahk_class
WinWait, ahk_class OpusApp, 
IfWinNotActive, ahk_class OpusApp, , WinActivate, ahk_class OpusApp, 
WinWaitActive, ahk_class OpusApp,

Nota: El código anterior sólo era una adaptación de la autoscriptwriter genérico de salida. Es un poco redundante, pero eficaz. Para encontrar algo parecido a una ventana ahk_class considerar el uso de AutoIt3 ventana espía.

Si usted necesita para descubrir el título de una ventana puede ser activa en el título, como se muestra en la ahk ejemplo de archivo de ayuda

WinGetActiveTitle, Title
MsgBox, The active window is "%Title%".

Otro truco que puede utilizar para establecer el activo título mediante WinSetTitle

Edit: Dado que tiene varias instancias de excel/word/powerpoint flotando en el aire, también considere la posibilidad de resolver el problema con officetabs free edition. Esto le permitirá mantener todos los archivos de excel en una sola instancia, por ejemplo, en lugar de desparramados sobre la barra de tareas.

2voto

colemik Puntos 718

Veo que usted ya sabe de la magnífica Autohotkey idioma ;). Yo uso:

  • ifWinActive ; compruebe si la ventana activa
  • WinGet, de salida, mín-máx ; compruebe si la ventana minimizada
  • ifWinExists ; compruebe si la ventana existe (pero no activo)
  • Ejecutar ; ejecutar el programa si no hay ningún proceso asociado
  • El orden-Z / WinList ; los ayudará a usted una lista de todas las instancias / determinar qué instancia es la primera

Si usted tiene más preguntas, definitivamente, usted debe preguntar a ellos en el autohotkey foro.

; The script activates a Word 2007 window
; The script uses 'winTitle' and 'winClass' variables to match the window
; so set those properly first.
; Press Shift + 1 + w to see how the script works.
;
winTitle := "Document1 - Microsoft Word" ; use Autoit Window Spy to get this
winClass := "OpusApp"
RunWait, winword
return

+1::
    KeyWait, w, D T1 ; KeyboardHook not needed
    if(errorlevel) {
        msgbox, % """Shift + 1 + w"" failed"
        return
    }
    Send, {Backspace} ; erase 'w'
    IfWinNotActive, %winTitle%
    {
        WinActivate, %winTitle%
        WinWaitActive, %winTitle%, , 3
        if(errorlevel)
            MsgBox, % "Failed to activate the window."
    } 
    else ; Last Found Window set
    {
        MsgBox, % "Window already activated."

    }
return


F11::Reload

2voto

Ajay Puntos 2114

No puede ser tan complicado como algunos, pero aquí es lo que yo uso para el lanzamiento de la mayoría de mis programas. La palanca permite minimizar la ventana si ya está activa.

^NumpadDot::ShowStart("Google Chrome", "chrome.exe")

ShowStart(title, exe, toggle = 0)
{
    If WinActive(title) and toggle
        WinMinimize %title%
    Else
        {
            IfWinExist, %title%
                WinActivate
            else
            {
                Run, %exe%
                WinActivate
            }
        }
}

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: