2010-07-30 18 views
8

Jak ustawić aplikację konsolową, aby była najbardziej na górze okna. Buduję aplikację konsoli w .NET (używam C# i może nawet pinvokes do niezarządzanego kodu jest ok).Jak ustawić okno aplikacji konsoli jako najwyższe okno (C#)?

Myślałem, że mogę mieć moją aplikację konsoli wywodzą się z klasy 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(); 
    } 
} 

Jednak to nie działa. Nie jestem pewien, czy właściwości ustawione w formularzu okna mają zastosowanie do interfejsu użytkownika konsoli.

Odpowiedz

10

Można P/Invoke SetWindowPos z Windows API:

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

Wielkie dzięki! Działa świetnie ... – Santhosh

0

Można użyć FindWindow z P/Invoke (http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx) potem jakoś ustawić rozszerzony styl do korzystania WS_EX_TOPMOST - patrz SetWindowLong przy P/Invoke (http://www.pinvoke.net/default.aspx/coredll/SetWindowLong.html).

Jednak to wszystko jest trochę hacky i zaleca utworzenie własnego okna konsoli za pomocą Windows Forms lub WPF.

+0

Dzięki Kieren. Jak utworzyć okno konsoli przy użyciu formularzy systemu Windows? – Santhosh

+0

Myślę, że próbuje powiedzieć zamiast pisać aplikację konsoli, napisz zamiast tego aplikację Windows Forms. – user3454439