VisualStudio如何进行OneNote插件开发?

这篇具有很好参考价值的文章主要介绍了VisualStudio如何进行OneNote插件开发?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0.引言

  在OneNote做笔记很方便,但笔者用久后,就觉得OneNote缺少自己想要的一些功能,希望通过二次开发实现不断增长的需求。起初对OneNote二次开发是利用Onetastic通过宏实现较为简单的二次开发,但用久后,还是不满足日益增长的需求。偶然在网上找到一篇关于利用VisualStudio进行OneNote二次开发的文章[2],本文以笔者的电脑系统环境重现了该文章的方法,并补充了该文章开发过程中不详细的内容,得到了想要的二次开发的结果。

1.工具和数据准备

  (1)工具准备;
  本文使用VisualStudio2015(VS2015)进行OneNote2016的插件开发,VS2015没有自带的安装和部署工具,需要自行安装部署软件:Microsoft Visual Studio 2015 Installer Projects(下载地址: https://marketplace.visualstudio.com/items?itemName=visualstudioclient.MicrosoftVisualStudio2015InstallerProjects)。
  (2)数据准备。
  本文涉及一张用于插件显示的图片(HelloOneNote.png),如下所示:
  VisualStudio如何进行OneNote插件开发?

2.创建工程

  (1)创建类库;
  VisualStudio如何进行OneNote插件开发?
  (2)勾选使程序集COM可见;
  VisualStudio如何进行OneNote插件开发?
  (3)勾选为COM互操作注册。
  VisualStudio如何进行OneNote插件开发?

3.创建ribbon配置文件

  (1)添加ribbon.xml文件;
  VisualStudio如何进行OneNote插件开发?
  (2)将配置文件存入工程资源;
  VisualStudio如何进行OneNote插件开发?
  (3) 打开ribbon.xml文件,编写配置文件代码。
  VisualStudio如何进行OneNote插件开发?

<?xml version="1.0" encoding="utf-8" ?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" loadImage="GetImage">
  <ribbon>
    <tabs>
      <tab id="tabCustom" label="Custom">
        <group id="groupHello" label="Hello">
          <button id="buttonHello" label="HelloOneNote" size="large" screentip="Press this for a 'Hello World!' message" onAction="showHello" image="HelloOneNote.png" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

4.编写功能代码

  (1)为工程添加引用:Extensibility、office、Microsoft OneNote 15.0 Object Library、System.Windows.Forms和System.Drawing;
  VisualStudio如何进行OneNote插件开发?
  详细添加步骤:
  VisualStudio如何进行OneNote插件开发?
  ①添加Extensibility;
  VisualStudio如何进行OneNote插件开发?
  ②添加office;
  VisualStudio如何进行OneNote插件开发?
  ③添加Microsoft OneNote 15.0 Object Library;
  VisualStudio如何进行OneNote插件开发?
  ④添加System.Windows.Forms;
  VisualStudio如何进行OneNote插件开发?
  ⑤添加System.Drawing。
  VisualStudio如何进行OneNote插件开发?
  (2)在Class1中添加using;

using System;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Windows.Forms;
using System.Xml.Linq;
using Extensibility;
using Microsoft.Office.Core;
using OneNote = Microsoft.Office.Interop.OneNote;

  (3)创建GUID;
  VisualStudio如何进行OneNote插件开发?
  本文GUID:{AD9144B5-6B8F-4C5D-8B5C-3A5E5C1C0FA1}
  (4)在Class1上添加标记,并继承接口;
  VisualStudio如何进行OneNote插件开发?

[Guid("AD9144B5-6B8F-4C5D-8B5C-3A5E5C1C0FA1"), ProgId("HelloOneNote.Class1")]
public class Class1 : IDTExtensibility2, IRibbonExtensibility
{

}

  (5)在Class1中添加以下方法(实现接口IDTExtensibility2、实现接口IRibbonExtensibility);
  VisualStudio如何进行OneNote插件开发?

private OneNote.Application onApp = new OneNote.Application();
private object application;
public void OnConnection(object Application, ext_ConnectMode ConnectMode, object AddInInst, ref Array custom)
{
    application = Application;
}
public void OnDisconnection(ext_DisconnectMode RemoveMode, ref Array custom)
{
    application = null;
    GC.Collect();
    GC.WaitForPendingFinalizers();
}
public void OnAddInsUpdate(ref Array custom) { }
public void OnStartupComplete(ref Array custom) { }
public void OnBeginShutdown(ref Array custom)
{
    if (application != null)
    {
        application = null;
    }
}
public string GetCustomUI(string RibbonID)
{
    return Properties.Resources.ribbon;
}

  注:以上属性和方法内容一般不用更改。
  (6)在Class1中添加以下方法(实现ribbon.xml中按钮的onAction事件调用的函数);
  VisualStudio如何进行OneNote插件开发?

public void showHello(IRibbonControl control)
{
    var app = application as OneNote.Application;
    var win = app.Windows;
    string id = (application as OneNote.Application).Windows.CurrentWindow.CurrentPageId;
    string title;
    app.GetPageContent(id, out title);
    var doc = XDocument.Parse(title);
    string pageTitle = doc.Descendants().FirstOrDefault().Attribute("ID").NextAttribute.Value;
    MessageBox.Show("Current Page ID = " + pageTitle, "Hello OneNote,I am cacrle.");
}

  (7)添加按钮图片。
  ①将HelloOneNote.png图片拖进资源中;
  VisualStudio如何进行OneNote插件开发?
  ②在Class1中添加以下方法(实现ribbon.xml中加载图片的函数)。
  VisualStudio如何进行OneNote插件开发?

public IStream GetImage(string imageName)
{
    MemoryStream mem = new MemoryStream();
    Properties.Resources.HelloOneNote.Save(mem, ImageFormat.Png);
    return new CCOMStreamWrapper(mem);
}

class CCOMStreamWrapper : IStream
{
    public CCOMStreamWrapper(System.IO.Stream streamWrap)
    {
        m_stream = streamWrap;
    }

    public void Clone(out IStream ppstm)
    {
        ppstm = new CCOMStreamWrapper(m_stream);
    }

    public void Commit(int grfCommitFlags)
    {
        m_stream.Flush();
    }

    public void CopyTo(IStream pstm, long cb, IntPtr pcbRead, IntPtr pcbWritten)
    {
    }

    public void LockRegion(long libOffset, long cb, int dwLockType)
    {
        throw new System.NotImplementedException();
    }

    public void Read(byte[] pv, int cb, IntPtr pcbRead)
    {
        Marshal.WriteInt64(pcbRead, m_stream.Read(pv, 0, cb));
    }

    public void Revert()
    {
        throw new System.NotImplementedException();
    }

    public void Seek(long dlibMove, int dwOrigin, IntPtr plibNewPosition)
    {
        long posMoveTo = 0;
        Marshal.WriteInt64(plibNewPosition, m_stream.Position);
        switch (dwOrigin)
        {
            case 0:
                {
                    /* STREAM_SEEK_SET */
                    posMoveTo = dlibMove;
                }
                break;
            case 1:
                {
                    /* STREAM_SEEK_CUR */
                    posMoveTo = m_stream.Position + dlibMove;

                }
                break;
            case 2:
                {
                    /* STREAM_SEEK_END */
                    posMoveTo = m_stream.Length + dlibMove;
                }
                break;
            default:
                return;
        }
        if (posMoveTo >= 0 && posMoveTo < m_stream.Length)
        {
            m_stream.Position = posMoveTo;
            Marshal.WriteInt64(plibNewPosition, m_stream.Position);
        }
    }

    public void SetSize(long libNewSize)
    {
        m_stream.SetLength(libNewSize);
    }

    public void Stat(out System.Runtime.InteropServices.ComTypes.STATSTG pstatstg, int grfStatFlag)
    {
        pstatstg = new System.Runtime.InteropServices.ComTypes.STATSTG();
        pstatstg.cbSize = m_stream.Length;
        if ((grfStatFlag & 0x0001/* STATFLAG_NONAME */) != 0)
            return;
        pstatstg.pwcsName = m_stream.ToString();
    }

    public void UnlockRegion(long libOffset, long cb, int dwLockType)
    {
        throw new System.NotImplementedException();
    }

    public void Write(byte[] pv, int cb, IntPtr pcbWritten)
    {
        Marshal.WriteInt64(pcbWritten, 0);
        m_stream.Write(pv, 0, cb);
        Marshal.WriteInt64(pcbWritten, cb);
    }

    private System.IO.Stream m_stream;
}

5.安装和部署

  (1)在解决方案中添加安装和部署的项目;
  VisualStudio如何进行OneNote插件开发?
  (2)修改注册表;
  VisualStudio如何进行OneNote插件开发?
  ①HKEY_CLASSES_ROOT→AppID→{工程的GUID}:新建字符串值,Name:DllSurogate,Value为空;
  VisualStudio如何进行OneNote插件开发?
  ②HKEY_CLASSES_ROOT→CLSID→{工程的GUID}:新建字符串值,Name:AppID,Value:{工程的GUID};
  VisualStudio如何进行OneNote插件开发?
  ③HKEY_CURRENT_USER→Software→Microsoft→Office→OneNote→AddIns→工程的ProgId;
  工程的ProgId,一般为“命名空间.类名"(本为HelloOneNote.Class1)
  添加3个键:
  字符串值:Name:Description,Value:自定义的工程描述
  字符串值:Name:FriendlyName,Value:自定义的工程名称(本文为ShowFirstOneNotePlugin)
  DWORD值:Name:LoadBehavior,Value:3
  VisualStudio如何进行OneNote插件开发?
  ④HKEY_LOCAL_MACHINE→Software→Classes→AppID→{工程的GUID}:新建字符串值,Name:DllSurrogate,Value为空;
  VisualStudio如何进行OneNote插件开发?
  ⑤ HKEY_LOCAL_MACHINE→Software→Classes→CLSID→{工程的GUID}:新建字符串值,Name:AppID,Value:{工程的GUID}。
  VisualStudio如何进行OneNote插件开发?
  (3)设置项目输出;
  VisualStudio如何进行OneNote插件开发?
  (4)生成解决方案;
  VisualStudio如何进行OneNote插件开发?
  (5)安装。
  ①通过VS安装;
  VisualStudio如何进行OneNote插件开发?
  ②通过安装文件安装(可共享该文件)。
  VisualStudio如何进行OneNote插件开发?
  注:安装过程一般保持默认参数,一直下一步即可。

6.OneNote插件展示

  VisualStudio如何进行OneNote插件开发?

参考资料:
[1] cacrle. VisualStudio如何进行桌面软件开发?; 2023-03-18 [accessed 2023-04-06].
[2] johnhuang. 创建属于自己的OneNote插件; 2017-01-20 [accessed 2023-04-06].
[3] 微软官网. How to develop an OneNote 2010 ribbon add-in application; [accessed 2023-04-06].
[4] 微软官网. Deploying a Visual Studio 2010 Tools for Office Solution Using; [accessed 2023-04-06].文章来源地址https://www.toymoban.com/news/detail-479487.html

到了这里,关于VisualStudio如何进行OneNote插件开发?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Office如何通过VSTO进行WORD插件开发?

      VSTO(Visual Studio Tools for Office )是VBA的替代,是一套用于创建自定义Office应用程序的Visual Studio工具包。VSTO可以用Visual Basic 或者Visual C#扩展Office应用程序(例如Word、Excel、PPT)。本文通过VSTO进行Word插件开发总结,并进行记录。    (1)安装Visual Studio   在百度等浏览器

    2024年02月16日
    浏览(34)
  • 使用DevExpress22.X(Patch)控件库在VisualStudio2022使用C#进行Winform、WPF应用的开发,看这一篇就够了!

            写在开头,Dev Express是个十分强大的控件库(下文简称Dev),但碍于其高昂的使用费用,“出于学习目的”,我们一般使用的都是Patch版本(在版权意识日趋加强的当下,不要提那两个字,现在加上那些字,百度都搜不出内容)。         最重要的 Patch资源 (包括

    2024年02月09日
    浏览(84)
  • Visual Studio 2019安装vsix插件及Gitee.VisualStudio安装包

    网上安装 Gitee.VisualStudio插件 速度较慢,可以从百度网盘下载 链接:https://pan.baidu.com/s/16WLjWHMTMUSRfyt_SKxFWA?pwd=74cd 提取码:74cd 下载成功之后,是一个后缀名为vsix的文件 win+R打开运行,输入“cmd” 如果Visual Studio 2019是装在别的盘里,那么需要先切换路径,我是装在了D盘,步骤

    2024年02月11日
    浏览(51)
  • 【工具】OneNote如何彻底退出开机自启动?

    OneNote是microsoft一个非常高效且方便的笔记记录类软件工具。一般用于轻量级的笔记,比如应用,记录,办公,等等方面。 但是每次打开电脑时,即使在不使用的情况下,系统会默认启动OneNote软件,占用一定的资源,那么该如何关闭OneNote呢? 方法一,在软件后台关掉启动 打

    2024年02月11日
    浏览(92)
  • 如何进行Web插件性能优化

    作者:禅与计算机程序设计艺术 随着互联网web应用的快速发展、普及化,无论从功能和界面设计上,还是服务性能方面,WordPress都在逐步成为一种热门技术。其插件开发者也越来越多地用到WordPress作为平台,实现各种功能。但与其他技术不同的是,WordPress作为最流行的内容管

    2024年02月07日
    浏览(35)
  • 使用VisualStudio2022插件(Visual Studio Installer Projects 2022)打包 .Net 6 框架下的 WPF项目 为安装文件

    目录 更新说明(2024/01/22) 序言 一、还是安装Visual Studio Installer Projects 2022插件 二、创建Setup Project项目 2.1 在现有解决方案中添加Setup Project项目 2.2 (更新)添加需要打包的文件  2.2.1 准备添加输出项。 2.2.2 【核心】添加 WpfMain 项目输出。 2.2.3 添加 WpfPluginManager 项目输出。

    2024年02月03日
    浏览(107)
  • VisualStudio如何配置PCL点云库?

      因笔者课题涉及点云处理,需要通过PCL进行点云数据分析处理,查阅现有网络资料,实现了VisualStudio2015(x86)配置PCL1.8.1点云库,本文记录实现配置的过程。    (1)下载PCL   下载地址: https://github.com/PointCloudLibrary/pcl/releases/tag/pcl-1.8.1   笔者的VS软件为32位的VS2015,

    2024年02月06日
    浏览(44)
  • 【VisualStudio】使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月10日
    浏览(76)
  • 使用VSCode clangd插件进行linux内核代码阅读和嵌入式开发

    在进行 Linux 内核代码阅读和嵌入式开发时,选择合适的开发工具至关重要。VSCode 是一个流行的跨平台编辑器,并且它的扩展生态系统非常强大。在这篇博客中,我们将介绍如何使用 VSCode Clangd 插件来提高 Linux 内核代码的阅读和嵌入式开发效率。 Clangd 是一个基于 Clang 的语言

    2024年02月09日
    浏览(49)
  • VisualStudio[WPF/.NET]基于CommunityToolkit.Mvvm架构开发

    项目模板选择如下: 暂时随机填一个目标框架,待会改: 双击“解决方案资源管理器”中项目CU-APP, 打开项目工程文件CU-APP.csproj, 修改目标框架 TargetFramework 为.net framework 4.7.2 ;  C#语言版本 LangVersion 为  9.0  \\\"工具\\\" - \\\"NuGet包管理器\\\",“管理解决方案的NuGet程序包(N)”,  或者,

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包