Можно ли программно очистить окно вывода Visual Studio (debug)?

Возможно ли иметь способ очистить окно Visual Studio OUTPUT программным путем? Например, приложение отладчика SysInternal под названием DebugView имеет конкретную команду под названием DBGVIEWCLEAR.., которая очищает окно журнала.

Пожалуйста, не говорите: щелкните правой кнопкой мыши, очистите окно.. с помощью мыши. Я знаю это, но это не то, что мне нужно.

Ответ 1

Для VS 2008 попробуйте этот код

EnvDTE80.DTE2 ide = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.9.0");
ide.ExecuteCommand("Edit.ClearOutputWindow", "");
System.Runtime.InteropServices.Marshal.ReleaseComObject(ide);

"VisualStudio.DTE.9.0" изменится с версии VS на версию.

Ответ 2

Для VS 2010:

//Add reference EnvDTE100
static void ClearOutput()
{
    EnvDTE80.DTE2 ide = (EnvDTE80.DTE2)Marshal.GetActiveObject("VisualStudio.DTE.10.0");
    ide.ToolWindows.OutputWindow.ActivePane.Clear();
}

Ответ 3

Первый ответ работает с любым выпуском после Visual Studio 2005, но кажется немного шелушащимся. Я должен был положить 1 секунду задержки, прежде чем очистить консоль и не мог получить ее лучше, чем это. Не знаю, почему, но это лучше, чем ничего. Он также работает, только если вы используете только один экземпляр Visual Studio. Возможно, я сделаю расширение, которое будет выглядеть в RunningObjectTable, чтобы выбрать нужную версию.

Во всяком случае, это работает более или менее.

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


namespace VisualStudioHelper {
    public class VstHelper {
        // Add a Project Reference to "Microsoft Development Environment Properties 8.0" 
        // (the one for Visual Studio, not SQL Server)
        public static void VstClearOutputWindow() {
            if (!Debugger.IsAttached)
                return;

            Application.DoEvents();
            Thread.Sleep(1000);
            EnvDTE80.DTE2 ide = (EnvDTE80.DTE2)Marshal.GetActiveObject("VisualStudio.DTE.10.0");
            ide.ExecuteCommand("Edit.ClearOutputWindow", "");
            Marshal.ReleaseComObject(ide);
        }
    }
}