title author date CreateTime categories
VisualStudio 扩展开发 获得输出窗口内容
lindexi
2019-03-01 09:21:41 +0800
2019-02-02 16:18:16 +0800
VisualStudio

本文告诉大家如何拿到 VisualStudio 输出窗口的内容

在上一篇告诉大家如何开发添加菜单 点击的时候可以使用方法,如果需要拿到 VisualStudio 的输出窗口的内容,如想要开发一个插件,通过这个工具可以过滤输出

有很多小伙伴在输出的时候,想要将所有的内容输出,然后我就很难看到自己想要看的内容

            while (true)
{
Debug.WriteLine("林德熙是逗比");
}

我想要做一个工具,需要在输出添加开发者同时只看到自己的输出,如修改一点输出的代码,判断如果使用 lindexi: 开始的,就输出,如果不是就不输出

            while (true)
{
Debug.WriteLine("lindexi: 林德熙是逗比");
}

现在的问题就是如何拿到 Debug.WriteLine 输出到 VisualStudio 窗口,于是我就开始研究这个方法

在上一篇博客的方法通过 Package.GetGlobalService 拿到 DTE 在 VisualStudio 使用了很多事件,输出到窗口就是一个 OutputWindowEvents 方法,这些没有直接在文档说到

先创建一些字段

        private DTE _dte;
private Events _dteEvents;
private OutputWindowEvents _documentEvents;

通过下面的代码就可以拿到输出窗口

        private void Execute(object sender, EventArgs e)
{
ThreadHelper.ThrowIfNotOnUIThread();
_dte = (DTE) Package.GetGlobalService(typeof(SDTE));
_dteEvents = _dte.Events;
_documentEvents = _dteEvents.OutputWindowEvents; _documentEvents.PaneUpdated += GetText;
} private void GetText(OutputWindowPane pane)
{
// 这里的 OutputWindowPane 就是输出窗口
ThreadHelper.ThrowIfNotOnUIThread();
TextDocument document = pane.TextDocument;
EditPoint point = document.StartPoint.CreateEditPoint(); var str = point.GetText(document.EndPoint);
}

这里通过 PaneUpdated 可以拿到有 Pane 更新的事件,于是在 GetText 方法的 GetText 返回的值就是输出窗口里面的

这里为什么不是输出窗口而是输出窗口的 Pane 因为一个输出窗口是有很多 Pane 的,如源代码管理,调试等

这里的一个就是一个 Pane 都是在输出窗口里面

那么如何确定监听的是调试窗口?拿到的每个 Pane 都有一个 GUID 可以通过 IDE GUID 找到调试窗口的 GUID 判断当前是调试窗口

微软在 VisualStudio 开发大量使用 GUID 的注入方式,通过这个方式的优点是需要知道有这个 GUID 才能拿到接口,同时可以在任意的地方拿到。

在想要通过判断当前的窗口是调试的时候,但是小伙伴告诉我,现在有这样的插件Filter Debug Window 我用了一下,发现我需要的功能刚好就是这个工具

2019-3-1-VisualStudio-扩展开发-获得输出窗口内容的更多相关文章

  1. VisualStudio 扩展开发 获得输出窗口内容

    本文告诉大家如何拿到 VisualStudio 输出窗口的内容 在上一篇告诉大家如何开发添加菜单 点击的时候可以使用方法,如果需要拿到 VisualStudio 的输出窗口的内容,如想要开发一个插件, ...

  2. VisualStudio 扩展开发

    本文主要:如何开发一个 visual Studio 扩展,其实扩展也叫插件. 那么就是如何开发一个 vs插件. 我写这博客时候,是我在开发一个插件:编码规范工具.记录的是我从不知道到发布插件,如果遇到 ...

  3. 2019-2-3-VisualStudio-扩展开发-添加输出窗口

    title author date CreateTime categories VisualStudio 扩展开发 添加输出窗口 lindexi 2019-02-03 11:41:40 +0800 2 ...

  4. 利用Visual Studio 2017的扩展开发(VSIX、ItemTemplate) 快速实现项目的半自动化搭建

    目录 0.引言 1.什么是Visual Studio项目模板 2.IWizad接口 3.通过Visual Studio扩展开发实现领域驱动开发 3.1 使用VSIX+ProjectTemplate创建 ...

  5. PHP扩展开发相关总结

    1.线程安全宏定义 在TSRM/TSRM.h文件中有如下定义 #define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, ...

  6. Chrome浏览器扩展开发系列之十四

    Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 时间:2015-10-08 16:17:59      阅读:1361      评论:0      收藏:0    ...

  7. PHP扩展开发(1):入门

    有关PHP扩展开发的文章.博客已经很多了,比较经典的有: TIPI项目(http://www.php-internals.com/,强烈推荐) <Extending and Embedding ...

  8. centos php扩展开发流程

    原文:centos php扩展开发流程 一.安装php centos 默认 yum 安装 php 版本为 5.3, 很多php框架基本上要求5.4以上版本,这时候不能直接 用 yum install ...

  9. PHP扩展开发-简单类扩展

    今天来学习简单类扩展开发 实现目标为如下php的类 <?php class classext(){ private $username; CONST URL="http://www.g ...

随机推荐

  1. ConvertBSTRToString导致的内存泄漏

    函数原型 char* __stdcall ConvertBSTRToString(BSTR pSrc); 这个指针指向的是一块动太分配的内存,如果把这个函数做为其它函数的参数,那么这块内存就会被泄漏掉 ...

  2. Android 开发 框架系列 OkHttp拦截器

    前言 此篇博客只讲解okhttp的拦截器功能的详细使用,如果你还不太了解okhttp可以参考我另外一篇博客 Android 开发 框架系列 OkHttp使用详解 添加Interceptor的简单例子 ...

  3. java继承,多态

    子类继承父类,用父类去接收子类,其实我觉得用父类,子类来形容继承关系是不恰当的,比如再发生多态的时候,Car c = new W();w是大众,你能说Car 和W是父子关系吗,我觉得用所属关系类描述可 ...

  4. 微信小程序传递URL中含有特殊字符

    小程序传递URL中含有特殊字符"="时,解决办法:先encodeURIComponent,取到值以后再decodeURIComponent 首先在A页面 var urls = en ...

  5. duilib库分析1.消息流程分析

    看下CWindowWnd类与CPaintManagerUI类是咋进行消息分发的吧. 1. 先看下CPaintManagerUI类的MessageLoop函数: void CPaintManagerUI ...

  6. 2015年MBA备考心得

    2015年12月份山大MBA备考心得 我在去年的12月26日参加了山大的MBA招生考试,在今年3月底参加了山大的复试,并被山大录取.初试英语70分,综合部分151,总分在今年的山大考生中是第16名:复 ...

  7. 面试系列10 es生产集群的部署架构

    如果你确实干过es,那你肯定了解你们生产es集群的实际情况,部署了几台机器?有多少个索引?每个索引有多大数据量?每个索引给了多少个分片?你肯定知道! 但是如果你确实没干过,也别虚,我给你说一个基本的版 ...

  8. more 和less 命令简单介绍以及使用

    一.more命令 more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 ...

  9. 用在 AMD64 上 aria2_1.33.1-1_amd64.deb 的下载页面

    用在 AMD64 上 aria2_1.33.1-1_amd64.deb 的下载页面 如果您正在运行 Ubuntu,请尽量使用像 aptitude 或者 synaptic 一样的软件包管理器,代替人工手 ...

  10. MaxCompute安全管理指南-案例篇

    通过<MaxCompute安全管理-基础篇>了解到MaxCompute和DataWorks的相关安全模型.两个产品安全方面的关联,以及各种安全操作后,本篇主要给出一些安全管理案例,给安全管 ...