Как установить окно консольного приложения как самое верхнее окно (C#)?
Как установить консольное приложение как самое верхнее окно. Я создаю консольное приложение в .NET (я использую C# и, возможно, даже pinvokes для неуправляемого кода в порядке).
Я думал, что мое консольное приложение может быть производным от класса 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();
}
}
однако это не работает. Я не уверен, что свойства, заданные в форме windows, применимы к пользовательскому интерфейсу консоли.
2 ответов
вы можете P / Invoke SetWindowPos
из API 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();
}
}
можно использовать FindWindow
с P / Invoke (http://msdn.microsoft.com/en-us/library/ms633499 (VS.85).aspx) затем как-то установите расширенный стиль для использования WS_EX_TOPMOST
- см. SetWindowLong
при P / Invoke (http://www.pinvoke.net/default.aspx/coredll/SetWindowLong.html).
однако все это немного хаки и рекомендовал бы создать собственное окно консоли с помощью Windows Forms или WPF.