Saltar al contenido

¿Cómo puedo hacer que un archivo .bat se ejecute solo en la bandeja del sistema?

Este dilema se puede tratar de diferentes maneras, por lo tanto te compartimos la solución más completa para nosotros.

Solución:

Como no creo que esto se pueda hacer con un simple .bat archivo, esto parece un trabajo para AutoHotKey.

AutoHotkey (AHK) es un software gratuito y de código abierto. macro-software de creación y automatización para Windows que permite a los usuarios automatizar tareas repetitivas. Está impulsado por un lenguaje de secuencias de comandos que inicialmente tenía como objetivo proporcionar atajos de teclado, también conocidos como teclas de acceso rápido, que con el tiempo evolucionaron hasta convertirse en un lenguaje de secuencias de comandos completo.

Según esta publicación del foro de 2014, debería poder alternar la visibilidad de la ventana con un script similar a este:

#NoTrayIcon
#Persistent

global hBatFile

/* Setup Tray icon and add item that will handle
* double click events
*/
Menu Tray, Icon
Menu Tray, Icon, C:windowssystem32cmd.exe
Menu Tray, Add, Show / Hide Pingu, TrayClick
Menu Tray, Add, Close Pingu, CloseItem
Menu Tray, Default, Show / Hide Pingu

;// Run program or batch file hidden
DetectHiddenWindows On
Run pingu.bat,, Hide, PID
WinWait ahk_pid %PID%
hBatFile := WinExist()
DetectHiddenWindows Off
return

TrayClick:
OnTrayClick()
return

;// Show / hide program or batch file on double click
OnTrayClick() 
    if DllCall("IsWindowVisible", "Ptr", hBatFile) 
        WinHide ahk_id %hBatFile%

     else 
        WinShow ahk_id %hBatFile%
        WinActivate ahk_id %hBatFile%
    


CloseItem() 

       DetectHiddenWindows On
       WinWait ahk_class ConsoleWindowClass
       Process, Close, cmd.exe
       DetectHiddenWindows Off
       ExitApp


Este script se probó con AutoHotKey 1.1.24.00 (mayo de 2016).

EDITAR: Aquí hay un enlace a la versión modificada de OP con mejoras.

En este caso:

  • pingu.bat es el nombre (arbitrario) del archivo por lotes que deseamos ejecutar
  • hBatFile es un nombre de variable arbitrario que contiene información de la ventana
  • Pingu es un nombre arbitrario que se muestra en los elementos adicionales del menú de la bandeja AHK

Simplemente guarde el script como algo como tray.ahk (nota la .ahk extensión de script) y haga doble clic para ejecutarlo (suponiendo que haya instalado AutoHotKey).

La secuencia de comandos inicia el archivo por lotes minimizado y reemplaza el icono de secuencia de comandos AHK predeterminado con un icono de ventana de consola en miniatura en la bandeja.

La visibilidad de la ventana de la consola se puede alternar con un doble clic en el ícono de la bandeja o en el elemento de menú de la bandeja agregado (que aparece en negrita en la parte inferior del menú de selección).

Cerrar tanto el archivo por lotes como la ventana de comandos se puede hacer con el agregado Close elemento de menú a continuación Show / Hide (Exit solo cerrará el script, no la ventana de la consola).

También tenga en cuenta que

Run pingu.bat,, Hide, PID

obviamente necesitará pingu.bat para ser reemplazado por el nombre de su propio archivo por lotes. Esta línea asume que el script AHK aparece en el mismo directorio que pingu.bat o eso pingu.bat es accesible globalmente (es decir, se ha agregado a una carpeta en la ruta del sistema o las variables PATH del usuario). De lo contrario, querrá reemplazar pingu.bat con la ruta completa al ejecutable (¡cuidado con los espacios!).


Advertencias

Este script actúa principalmente como una interfaz para la visibilidad de la ventana. Lo que esto significa es que si Exit a través del icono de la bandeja, solo está saliendo del script AHK, no de su archivo por lotes.

La solución simple es usar el agregado Close elemento de menú para salir de la secuencia de comandos y detener cmd.exe. Alternativamente, puede:

  • Muestre la ventana de la consola y use control + C (o simplemente cierre la ventana de la consola con la ‘X’ roja) para finalizar el proceso por lotes.

  • Seleccione Exit desde el icono de la bandeja para detener el script AHK

Son procesos separados, como se mencionó.


Nota: No se puede volver a acceder directamente a los programas de consola huérfanos con ventanas ocultas si el script AHK se termina con Exit primero, pero puede usar el Administrador de tareas para cerrar el cmd.exe proceso.


los Close El elemento del menú tal como está escrito funciona bien si solo hay uno cmd.exe proceso. Sin embargo, si más de uno cmd.exe El proceso se está ejecutando, es posible que esto no cierre correctamente el archivo por lotes que inició con el script (puede cerrar algo más). Es posible que desee considerar el cierre por ID de proceso (PID) en su lugar. Dicho esto, también puede usar el mismo proceso Mostrar / Cerrar / Salir anterior.


Notas de guión

Menu Tray, Icon, C:windowssystem32cmd.exe

se refiere a la ubicación de un ejecutable compilado con un archivo de icono incrustado asociado. Debería poder reemplazar esto con una referencia a cualquier ejecutable con un icono incrustado o con una referencia directa a un .ico archivo de icono también, por ejemplo

Menu Tray, Icon, C:PathToIconsicon.ico

¿Cómo hago para que un archivo * .bat se ejecute en la bandeja?

Puede utilizar RBTray:

RBTray es un pequeño programa de Windows que se ejecuta en segundo plano y permite minimizar casi cualquier ventana en la bandeja del sistema haciendo clic derecho en su botón de minimizar.

Es gratuito, de código abierto y se distribuye bajo los términos de la Licencia Pública General GNU.

Tiene solo 45k y tiene versiones de 32 y 64 bits.


Descargo de responsabilidad

No estoy afiliado a RBTray de ninguna manera, solo soy un usuario final de su software.

Reseñas y valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *