2010-07-30 20 views
8

¿Cómo configuro una aplicación de consola para que sea la ventana más alta? Estoy construyendo la aplicación de consola en .NET (estoy usando C# y tal vez incluso pinvokes a código no administrado está bien).¿Cómo establecer una ventana de aplicación de consola para ser la ventana más alta (C#)?

pensé que podría tener mi aplicación de consola se derivan de clase Form

class MyConsoleApp : Form { 
    public MyConsoleApp() { 
     this.TopLevel = true; 
     this.TopMost = true; 
     this.CenterToScreen(); 
    } 

    public void DoSomething() { 
     //.... 
    } 

    public static void Main() { 
     MyConsoleApp consoleApp = new MyConsoleApp(); 
     consoleApp.DoSomething(); 
    } 
} 

Sin embargo, esto no funciona. No estoy seguro de si las propiedades establecidas en el formulario de Windows son aplicables a la interfaz de usuario de la consola.

Respuesta

10

Puede P/Invoke SetWindowPos de la API de Windows:

using System; 
using System.Diagnostics; 
using System.Runtime.InteropServices; 

class Program 
{ 
    [DllImport("user32.dll", SetLastError = true)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    private static extern bool SetWindowPos(
     IntPtr hWnd, 
     IntPtr hWndInsertAfter, 
     int x, 
     int y, 
     int cx, 
     int cy, 
     int uFlags); 

    private const int HWND_TOPMOST = -1; 
    private const int SWP_NOMOVE = 0x0002; 
    private const int SWP_NOSIZE = 0x0001; 

    static void Main(string[] args) 
    { 
     IntPtr hWnd = Process.GetCurrentProcess().MainWindowHandle; 

     SetWindowPos(hWnd, 
      new IntPtr(HWND_TOPMOST), 
      0, 0, 0, 0, 
      SWP_NOMOVE | SWP_NOSIZE); 

     Console.ReadKey(); 
    } 
} 
+0

¡Muchas gracias! Funciona muy bien ... – Santhosh

0

Usted podría utilizar FindWindow con P/Invoke (http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx) a continuación, establecer de alguna manera el estilo extendido a utilizar WS_EX_TOPMOST - ver SetWindowLong en P/Invoke (http://www.pinvoke.net/default.aspx/coredll/SetWindowLong.html).

Sin embargo, es un poco raro y recomendaría crear su propia ventana de consola con Windows Forms o WPF.

+0

Gracias Kieren. ¿Cómo creo una ventana de consola usando formularios de Windows? – Santhosh

+0

Creo que está tratando de decir en lugar de escribir una aplicación de consola, escribir una aplicación de Windows Forms en su lugar. – user3454439

Cuestiones relacionadas