2010-07-30 13 views
8

Come faccio a impostare un'applicazione per console come la finestra più in alto. Sto costruendo l'applicazione console in .NET (sto usando C# e forse anche i pinvokes al codice non gestito è ok).Come impostare una finestra dell'applicazione della console come la finestra più in alto (C#)?

ho pensato che avrei potuto avere la mia applicazione console derivano dalla classe 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(); 
    } 
} 

Tuttavia questo non funziona. Non sono sicuro che le proprietà impostate nel modulo di Windows siano applicabili all'interfaccia utente della console.

risposta

10

Puoi P/Invoke SetWindowPos dalla API di 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

Grazie mille! Funziona alla grande ... – Santhosh

0

Si potrebbe usare FindWindow con P/Invoke (http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx) poi in qualche modo impostare lo stile esteso per usare WS_EX_TOPMOST - vedere SetWindowLong a P/Invoke (http://www.pinvoke.net/default.aspx/coredll/SetWindowLong.html).

Tuttavia è tutto un po 'hacky e raccomanderebbe di creare la propria finestra della console utilizzando Windows Form o WPF.

+0

Grazie Kieren. Come posso creare una finestra della console utilizzando i moduli di Windows? – Santhosh

+0

Penso che stia cercando di dire invece di scrivere un'applicazione per console, invece di scrivere un'applicazione Windows Form. – user3454439

Problemi correlati