Pregunta

¿Cómo puedo mostrar una ventana de la aplicación de consola en C # (especialmente cuando se ejecuta el depurador de Visual Studio)?

¿Fue útil?

Solución

Es intrépido, es horrible, pero me funciona (gracias, pinvoke.net !):

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

public class Test 
{

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool SetForegroundWindow(IntPtr hWnd);

    [DllImport("user32.dll", EntryPoint="FindWindow", SetLastError = true)]
    static extern IntPtr FindWindowByCaption(IntPtr zeroOnly, string lpWindowName);

    public static void Main()
    {
        string originalTitle = Console.Title;
        string uniqueTitle = Guid.NewGuid().ToString();
        Console.Title = uniqueTitle;
        Thread.Sleep(50);
        IntPtr handle = FindWindowByCaption(IntPtr.Zero, uniqueTitle);

        if (handle == IntPtr.Zero)
        {
            Console.WriteLine("Oops, cant find main window.");
            return;
        }
        Console.Title = originalTitle;

        while (true)
        {
            Thread.Sleep(3000);
            Console.WriteLine(SetForegroundWindow(handle));
        }
    }
}

Otros consejos

Esto es lo que yo haría.

[DllImport("kernel32.dll", ExactSpelling = true)]
public static extern IntPtr GetConsoleWindow();

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow(IntPtr hWnd);

public void BringConsoleToFront()
{
    SetForegroundWindow(GetConsoleWindow()); 
}

Obtenga dos monitores (al menos) y abra VisualStudio en el monitor secundario. Cuando ejecute su aplicación desde VisualStudio, se iniciará de forma predeterminada en el monitor principal. Ya que es la última aplicación que se abre, comienza en la parte superior y el cambio a VisualStudio no la afecta. Funciona para mí de todos modos.

Si aún no tiene un segundo monitor, IMHO, debería hacerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top