2009-02-17 63 views

Respuesta

2

De un archivo por lotes, no. Si desea activar una ventana, debe usar SetActiveWindow(). Si no quieres ensuciarte con la programación de Windows pero aún quieres activar Windows y cosas así, te recomiendo que visites Autoit. Siempre puede llamar a este programa desde su archivo por lotes para que haga la tarea.

8

nircmd hará esto, aunque implica un poco de secuencias de comandos.

nircmd win activate "titleofwindow" 

que básicamente necesita saber el título de la ventana de cmd se está ejecutando (se puede establecer este a través del comando título en Windows Vista)

así:

TITLE %SOME_UNIQUE_VALE% 
nircmd win activate %SOME_UNIQUE_VALE% 

debe hacer el truco .

Tenga en cuenta que algunas herramientas de malware hacen uso del ejecutable NirCmd (no requiere implementación, ya que es muy potente) esto puede causarle problemas.

+0

http://www.nirsoft.net/utils/nircmd.html – ryeguy

+0

aplausos - está bloqueado en mi conexión de red (de ahí la nota) – ShuggyCoUk

+0

Por alguna razón, necesitaba especificar el título: nircmd win activar el título "TITLE" –

1

CMDOW es también útil para esto y para otras tareas de programación de DOS donde se necesita un poco de funcionalidad adicional. Simple de usar y bien documentado. Sin embargo, tenga en cuenta su programa antivirus: CMDOW tiene la capacidad de ocultar ventanas que su programa antivirus detectará como un posible virus. Solo agrégalo a tu lista de excepciones. CMDOW es completamente portátil, definitivamente NO es un virus y si tiene alguna duda de que sea utilizado por un tercero para ocultar algo, simplemente guárdelo en alguna carpeta que no sea obvia.

-3

Otra forma rápida de cambiar a una ventana por nombre es a través de Ctrl + Shift + Esc, que abre el Administrador de tareas. Luego, simplemente escriba las primeras letras del título de Windows para seleccionar el proceso, luego presione Enter.

+0

¡Este es un buen consejo! Solo un problema ... se abrirá con la pestaña abierta más recientemente.Si fue la pestaña "Aplicación", genial, pero si se trata de otra pestaña, necesitará un conjunto más elaborado de teclas ... parece que si hace 'Ctrl + Shift + Esc', se iniciará el Administrador de tareas . 'Shift + Tab' seleccionará la barra de pestañas. Si presiona la flecha izquierda varias veces, la pestaña Aplicaciones finalmente se seleccionará (y dado que no gira y le queda más, está bien.) 'Tab' para volver a la lista, escriba el nombre de la ventana , y presiona 'Enter'. – ArtOfWarfare

+0

Si alguien piensa que estoy loco por pensar que es útil, automatizar las pulsaciones de teclas es muy fácil y tiene muy pocas dependencias externas de la biblioteca. Python solo es suficiente para automatizar las pulsaciones de teclas. Por otro lado, leer las coordenadas de las ventanas y automatizar el mouse es muy complicado. Entonces, las soluciones de automatización que pueden funcionar solo con la entrada de teclado son geniales. Además, presionar la flecha izquierda varias veces puede reemplazarse por golpear una vez. – ArtOfWarfare

2

Otra forma de mostrar la ventana del símbolo del sistema cmd al frente es finalizar file1.bat con un comando para llamar a un segundo archivo file2.bat seguido de un comando de salida.

ejemplo usando file1.bat

.... 
[your code here] 
start C:\file2.bat 
exit 

Esto cierra file1.bat y abre un segundo archivo .bat donde se puede continuar con su código. Este segundo comando de comando .bat se abrirá frente a otras ventanas

0

Tuve un problema similar y tuve que desarrollar una aplicación simple de consola C# que lleva al frente una ventana. Las ventanas se seleccionan usando el pase de título de la ventana como argumento.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 

     [DllImport("USER32.DLL", CharSet = CharSet.Unicode)] 
     public static extern IntPtr FindWindow(String lpClassName, String lpWindowName); 

     [DllImport("USER32.DLL")] 
     public static extern bool SetForegroundWindow(IntPtr hWnd); 
     [DllImport("User32.dll")] 
     private static extern bool IsIconic(IntPtr handle); 
     [DllImport("User32.dll")] 
     private static extern bool ShowWindow(IntPtr handle, int nCmdShow); 
     const int SW_RESTORE = 9; 
     public static void bringToFront(string title) 
     { 
      // Get a handle to the Calculator application. 
      IntPtr handle = FindWindow(null, title); 

      // Verify that Calculator is a running process. 
      if (handle == IntPtr.Zero) 
      { 
       return; 
      } 
      if (IsIconic(handle)) 
      { 
       ShowWindow(handle, SW_RESTORE); 
      } 

      Console.WriteLine("Founded "); 
      SetForegroundWindow(handle); 

     } 

     static void Main(string[] args) 
     { 

      if (args.Length > 0) 
       bringToFront(args[0]); 
      else 
       Console.WriteLine("specify program window title"); 

     } 
    } 
} 

el código de mi escritura de la hornada es entonces algo similar a

lista de tareas/FI "ImageName eq program.exe" | find "program.exe" if errorlevel 1 (program.exe) else (BringToFront.exe "Program Window Title")

Cuestiones relacionadas