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

Можно ли как-то программно очистить окно ВЫХОД Visual Studio? Например, приложение отладчика SysInternal под названием DebugView имеет специальную команду DBGVIEWCLEAR.., которая очищает окно журнала.

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

4 ответа

Решение

Для 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 на версию.

Для VS 2010:

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

Первый ответ работает на любом выпуске после 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);
        }
    }
}

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

// Добавляем ссылку на Interop.EnvDTE100

EnvDTE80.DTE2 ide = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE");

ide.ExecuteCommand("Edit.ClearOutputWindow", ""); System.Runtime.InteropServices.Marshal.ReleaseComObject(ide);

Что насчет Console.Clear ()?

Другие вопросы по тегам