views:

88

answers:

1

I have a visual studio integration package that tracks output from the debug window. I can get the IVsTextView of the output window, like so:

IVsTextView view = GetService(typeof(SVsOutputWindow)) as IVsTextView;
// grab text from the view and process it

However, if a different panel other than the "Debug" panel is currently active, then this IVsTextView will have text from that panel, and not the "Debug" panel.

Is it possible to get an IVsTextView for a specific output window panel, without calling OutputWindowPanel.Activate() prior to getting the IVsTextView of the output window?

+1  A: 

Sure, it's possible. You just need to select the output window pane you want to read:

IVsOutputWindow outWindow = GetService(typeof(SVsOutputWindow)) as IVsOutputWindow;
// Give me the Debug pane
Guid debugPaneGuid = VSConstants.GUID_OutWindowDebugPane;
IVsOutputWindowPane pane;
outWindow.GetPane(ref debugPaneGuid, out pane);
// Get text view and process it
IVsTextView view = pane as IVsTextView;
Oleg Tkachenko
Fantastic. I seem to remember trying something like this and it failing - I must have been using the wrong interface for the output window pane? Anyway, this works great. Thanks again.
Jeremy Bell