2011-06-10 12 views
6

Disculpa si esto se ha preguntado pero no puedo encontrar una respuesta. Es posible que no esté buscando los términos correctos.¿Cómo evito que una aplicación de consola C# tenga prioridad como ventana activa?

Tengo un programa de consola que debe ejecutarse en segundo plano. El usuario necesita que la consola permanezca abierta cuando se ejecuta, pero necesita que no se convierta en la ventana activa cuando se inicia. Quieren continuar con lo que están trabajando actualmente y no tener que minimizar la consola cada vez que se inicia.

Esta aplicación de consola se ejecuta varias veces, cada vez con una nueva ventana de consola. ¿Cómo puedo "ocultar" la consola detrás de la tarea/ventana en ejecución actual?

+0

¿Por qué ** necesita ** que la ventana de la consola esté visible? – Yuck

+0

http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd – Gage

+0

¿Sería mejor no tener una GUI en absoluto? ¿Simplemente deja que se ejecute en el fondo? Eso se puede hacer fácilmente. – Phil

Respuesta

6

Usted puede minimizar mediante programación/restaurar las ventanas de consola mediante el siguiente código:

using System; 
using System.IO; 

namespace ConsoleApplication1 
{ 
    class Class1 
    { 
     [System.Runtime.InteropServices.DllImport("user32.dll")] 
     private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 
     private const int SW_MINIMIZE = 6; 
     private const int SW_MAXIMIZE = 3; 
     private const int SW_RESTORE = 9; 

     [STAThread] 
     static void Main(string[] args) 
     { 
      IntPtr winHandle = 
       System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle; 
      ShowWindow(winHandle, SW_MINIMIZE); 
      System.Threading.Thread.Sleep(2000); 
      ShowWindow(winHandle, SW_RESTORE); 
     } 
    } 
} 

Si está utilizando Process.Start para iniciar la aplicación de consola, un mejor uso de este:

System.Diagnostics.ProcessStartInfo process= new 
    System.Diagnostics.ProcessStartInfo(@"MyApplication.exe"); 
process.WindowStyle=System.Diagnostics.ProcessWindowStyle.Minimized; 
process.UseShellExecute=false; // Optional 
System.Diagnostics.Process.Start(process); 
+0

Esto es exactamente lo que necesitaba. Oculto la ventana tan pronto como se inicia la aplicación y permite al usuario continuar con su tarea actual. Gracias. – sange

+0

De nada. –

1

Pongo No conozco una forma de evitar que la ventana de la consola se muestre nunca. El mejor enfoque en una aplicación de consola es ocultar la ventana, inmediatamente después de que se cargue la aplicación. El efecto visual es una apertura rápida de una ventana de la consola, luego desaparece. Quizás no sea óptimo.

Un mejor enfoque podría ser utilizar un Winexe, en lugar de una aplicación de consola. Dentro de la aplicación de Windows (tal vez una aplicación de winforms), nunca cree una instancia del primer formulario. Por lo tanto, nunca se muestra nada.

Esto evita la interacción del usuario, pero a partir de su descripción, parece que eso es lo que desea.

Pero no estoy seguro de que tenga control sobre la "aplicación de consola".

Cuestiones relacionadas