使用DTE激活Visual Studio的输出窗口

5
我为我的VSPackage创建了一个自定义输出窗格:

Visual Studio 2013中的输出窗口和选项卡

使用下面的代码:
// Creating Output Window for our package.
IVsOutputWindow output = GetService(typeof(SVsOutputWindow)) as IVsOutputWindow;
Guid guildGeneral = Microsoft.VisualStudio.VSConstants.OutputWindowPaneGuid.GeneralPane_guid;
int hr = output.CreatePane(guildGeneral, "Codex", 1, 0);
hr = output.GetPane(guildGeneral, out ApplicationConstants.pane);

ApplicationConstants.pane.Activate();

问题

当其他选项卡被选中时,如何选择输出(Output)选项卡?

2个回答

5

激活(聚焦)Visual Studio的输出窗口:

DTE dte = (DTE)GetService(typeof(DTE));
Window window = dte.Windows.Item(EnvDTE.Constants.vsWindowKindOutput);
window.Activate();

@UsRGk 将 Microsoft.VisualStudio.Shell 添加到您的引用中。请参见此处:https://msdn.microsoft.com/zh-cn/library/bb138962.aspx - A-Sharabiani

0

这是我的版本,已更新到VS2019

    class GetOutputPanel
    {
        private int retries;
        public IVsOutputWindowPane pane;

        void writeToOutputPanel(string txt)
        {
            ThreadHelper.ThrowIfNotOnUIThread();
            pane.OutputString(txt);
        }
        void getOutputPanel(AsyncPackage package, EnvDTE80.DTE2 dte2)
        {
            ThreadHelper.ThrowIfNotOnUIThread();
            EnvDTE.Window w = dte2.Windows.Item(EnvDTE.Constants.vsWindowKindOutput);
            w.Activate();
            var output_windows_opening_async = package.GetServiceAsync(typeof(SVsOutputWindow));
            Timer timer = new Timer();
            retries = 0;
            timer.Tick += (object sender, EventArgs e) => {
                ThreadHelper.ThrowIfNotOnUIThread();
                if (pane != null)
                {
                    (sender as Timer).Stop();
                    return;
                }
                if(!output_windows_opening_async.IsCompleted)
                {
                    if(retries++ > 10) (sender as Timer).Stop();
                    return;
                }

#pragma warning disable VSTHRD002 // Avoid problematic synchronous waits
                output_windows_opening_async.Wait();
                IVsOutputWindow output = (output_windows_opening_async.Result) as IVsOutputWindow;
#pragma warning restore VSTHRD002 // Avoid problematic synchronous waits
                Guid guildGeneral = Microsoft.VisualStudio.VSConstants.OutputWindowPaneGuid.GeneralPane_guid;
                output.CreatePane(guildGeneral, "Ambar - DEMO Builder", 1, 0);
                output.GetPane(guildGeneral, out pane);
                pane.Activate();
                (sender as Timer).Stop();
            };
            timer.Interval = 1000;
            timer.Start();
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接