first commit

This commit is contained in:
LittleBoy 2023-12-12 16:53:12 +08:00
commit 9b55e8b683
251 changed files with 164542 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/node_modules/
bin

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
.vs/TestWordAddIn1/v17/.suo Normal file

Binary file not shown.

37
TestWordAddIn1.sln Normal file
View File

@ -0,0 +1,37 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.33516.290
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestWordAddIn1", "TestWordAddIn1\TestWordAddIn1.csproj", "{E12FB108-CC54-49E3-B606-872B9805F9FA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Webview2WinFormsApp", "Webview2WinFormsApp\Webview2WinFormsApp.csproj", "{283CE9EF-73B6-478A-B177-1B9174220C35}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UtilLib", "UtilLib\UtilLib.csproj", "{724D79C5-93B5-4BD7-9964-A05CCEFD3BFA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E12FB108-CC54-49E3-B606-872B9805F9FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E12FB108-CC54-49E3-B606-872B9805F9FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E12FB108-CC54-49E3-B606-872B9805F9FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E12FB108-CC54-49E3-B606-872B9805F9FA}.Release|Any CPU.Build.0 = Release|Any CPU
{283CE9EF-73B6-478A-B177-1B9174220C35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{283CE9EF-73B6-478A-B177-1B9174220C35}.Debug|Any CPU.Build.0 = Debug|Any CPU
{283CE9EF-73B6-478A-B177-1B9174220C35}.Release|Any CPU.ActiveCfg = Release|Any CPU
{283CE9EF-73B6-478A-B177-1B9174220C35}.Release|Any CPU.Build.0 = Release|Any CPU
{724D79C5-93B5-4BD7-9964-A05CCEFD3BFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{724D79C5-93B5-4BD7-9964-A05CCEFD3BFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{724D79C5-93B5-4BD7-9964-A05CCEFD3BFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{724D79C5-93B5-4BD7-9964-A05CCEFD3BFA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7C87838C-07BB-41AF-9F47-1F995065934E}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestWordAddIn1
{
public class AppConfig
{
public static readonly string PanelName = "校对王";
}
}

16
TestWordAddIn1/Bridge.cs Normal file
View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestWordAddIn1
{
public class Bridge
{
public void Test()
{
System.Windows.Forms.MessageBox.Show("Test on C# Bridge!");
}
}
}

17
TestWordAddIn1/Enums.cs Normal file
View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestWordAddIn1
{
public enum OfficeType
{
Word,
WPS
}
internal class Enums
{
}
}

92
TestWordAddIn1/Form1.Designer.cs generated Normal file
View File

@ -0,0 +1,92 @@
namespace TestWordAddIn1
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.panel1 = new System.Windows.Forms.Panel();
this.button1 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.BackgroundImage = global::TestWordAddIn1.Properties.Resources.android_chrome_192x192;
this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Top;
this.pictureBox1.Location = new System.Drawing.Point(0, 0);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(800, 200);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// panel1
//
this.panel1.Controls.Add(this.button1);
this.panel1.Controls.Add(this.pictureBox1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(800, 450);
this.panel1.TabIndex = 1;
//
// button1
//
this.button1.Font = new System.Drawing.Font("微软雅黑", 24F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button1.Location = new System.Drawing.Point(307, 206);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(181, 62);
this.button1.TabIndex = 1;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.panel1);
this.Name = "Form1";
this.Text = "Form1";
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button button1;
}
}

25
TestWordAddIn1/Form1.cs Normal file
View File

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TestWordAddIn1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Test");
}
}
}

120
TestWordAddIn1/Form1.resx Normal file
View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

23
TestWordAddIn1/Http.cs Normal file
View File

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace TestWordAddIn1
{
internal class Http
{
public static String Get(string url)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
var res = req.GetResponse();
using (var reader = new StreamReader(res.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
}
}

View File

@ -0,0 +1,145 @@
using Microsoft.Office.Interop.Word;
using System;
using System.Drawing;
using System.Windows.Forms;
using UtilLib;
namespace TestWordAddIn1
{
public partial class ProofreadItem : UserControl
{
private readonly Color BG_NORMAL = Color.WhiteSmoke;
private readonly Color BG_HOVER = Color.AliceBlue;
private readonly Color BG_ACTIVE = Color.AliceBlue;
private DiffItem diffItem;
private int currentStart;
private Document document;
private Bookmark bookmark;
private bool processed = false;
public ProofreadItem()
{
InitializeComponent();
this.BackColor = BG_NORMAL;
this.document = Globals.ThisAddIn.Application.ActiveDocument;
}
private void ProofreadItem_MouseEnter(object sender, EventArgs e)
{
this.BackColor = BG_HOVER;
Console.WriteLine("ProofreadItem_MouseEnter");
}
private void ProofreadItem_MouseLeave(object sender, EventArgs e)
{
this.BackColor = BG_NORMAL;
Console.WriteLine("ProofreadItem_MouseLeave");
}
private void ProofreadItem_Click(object sender, EventArgs e)
{
this.BackColor = BG_ACTIVE;
Console.WriteLine("ProofreadItem_Click");
}
private void AddBookmark(Color color)
{
int rangeStart = this.currentStart + this.diffItem.Start,
rangeEnd = this.currentStart + this.diffItem.End;
Range r = this.document.Range(rangeStart, rangeEnd);
this.bookmark = this.document.Bookmarks.Add("mark_" + this.diffItem.Id, r);
if (this.diffItem.Tag != "i")
{
r.Shading.BackgroundPatternColor = (WdColor)ColorTranslator.ToOle(color);
}
}
public void SetProofreadItem(DiffItem it, int start)
{
this.diffItem = it;
this.currentStart = start;
this.ProcessView();
var typeConfig = TypeConfig.Get(it.Type);
type.Text = typeConfig.Text;
type.Visible = false;
var c = Colors.FromHex(typeConfig.Color);
typePanel.BackColor = c;
//if (it.Tag != "i")
//{
AddBookmark(c);
//}
if (it.Type == ProofreadType.blackWord
|| it.Type == ProofreadType.blackWordBlock
|| it.Type == ProofreadType.sensitive)
{
description.Text = "【敏感词】建议查看";
}
else
{
if (it.Tag == "r")
{
origin.Text = it.Origin + ">" + it.Text;
description.Text = string.Format("【{0}】建议选用“{1}”", typeConfig.Text, it.Text);
}
else if (it.Tag == "i")
{
origin.Text = it.Text + " 新增";
description.Text = string.Format("【{0}】建议新增", typeConfig.Text);
}
else
{
origin.Text = it.Origin + " 删除";
description.Text = string.Format("【{0}】建议删除", typeConfig.Text);
}
}
}
private void ProcessView()
{
var showBtn = this.diffItem.IsAccept == AcceptEnum.Default;
btnAccept.Visible = showBtn;
btnIgnore.Visible = showBtn;
processStatus.Visible = !showBtn;
if (!showBtn)
{
processStatus.Text = (this.diffItem.IsAccept == AcceptEnum.Accept) ? "已采纳" : "已忽略";
}
}
private void ProofreadItem_Load(object sender, EventArgs e)
{
}
private void btnIgnore_Click(object sender, EventArgs e)
{
if (this.diffItem.IsAccept != AcceptEnum.Default) return;
this.diffItem.IsAccept = AcceptEnum.Ignore;
this.bookmark.Range.Shading.BackgroundPatternColor = WdColor.wdColorAutomatic;
MessageBox.Show("忽略" + this.currentStart + this.diffItem.Text);
this.ProcessView();
}
private void btnAccept_Click(object sender, EventArgs e)
{
if (this.diffItem.IsAccept != AcceptEnum.Default) return;
this.diffItem.IsAccept = AcceptEnum.Accept;
var rng = this.bookmark.Range;
rng.Shading.BackgroundPatternColor = WdColor.wdColorAutomatic;
if (this.diffItem.Tag == "d")
{
rng.Delete();
}
else
{
rng.Text = this.diffItem.Text;
}
this.ProcessView();
}
}
}

147
TestWordAddIn1/ProofreadItem.designer.cs generated Normal file
View File

@ -0,0 +1,147 @@
using System.Drawing;
using System.Windows.Forms;
namespace TestWordAddIn1
{
partial class ProofreadItem
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.origin = new System.Windows.Forms.Label();
this.type = new System.Windows.Forms.Label();
this.description = new System.Windows.Forms.Label();
this.btnAccept = new System.Windows.Forms.Button();
this.btnIgnore = new System.Windows.Forms.Button();
this.typePanel = new System.Windows.Forms.Panel();
this.processStatus = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// origin
//
this.origin.AutoSize = true;
this.origin.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.origin.Location = new System.Drawing.Point(18, 10);
this.origin.Name = "origin";
this.origin.Size = new System.Drawing.Size(49, 20);
this.origin.TabIndex = 0;
this.origin.Text = "origin";
//
// type
//
this.type.AutoSize = true;
this.type.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.type.Location = new System.Drawing.Point(69, 11);
this.type.Name = "type";
this.type.Size = new System.Drawing.Size(38, 20);
this.type.TabIndex = 1;
this.type.Text = "type";
//
// description
//
this.description.AutoSize = true;
this.description.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.description.Location = new System.Drawing.Point(12, 36);
this.description.Name = "description";
this.description.Size = new System.Drawing.Size(84, 20);
this.description.TabIndex = 2;
this.description.Text = "description";
//
// btnAccept
//
this.btnAccept.BackgroundImage = global::TestWordAddIn1.Properties.Resources.check;
this.btnAccept.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.btnAccept.Cursor = System.Windows.Forms.Cursors.Hand;
this.btnAccept.Location = new System.Drawing.Point(222, 13);
this.btnAccept.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnAccept.Name = "btnAccept";
this.btnAccept.Size = new System.Drawing.Size(26, 26);
this.btnAccept.TabIndex = 3;
this.btnAccept.UseVisualStyleBackColor = true;
this.btnAccept.Click += new System.EventHandler(this.btnAccept_Click);
//
// btnIgnore
//
this.btnIgnore.BackgroundImage = global::TestWordAddIn1.Properties.Resources.minus_bold;
this.btnIgnore.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.btnIgnore.Cursor = System.Windows.Forms.Cursors.Hand;
this.btnIgnore.Location = new System.Drawing.Point(258, 13);
this.btnIgnore.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.btnIgnore.Name = "btnIgnore";
this.btnIgnore.Size = new System.Drawing.Size(26, 26);
this.btnIgnore.TabIndex = 4;
this.btnIgnore.UseVisualStyleBackColor = true;
this.btnIgnore.Click += new System.EventHandler(this.btnIgnore_Click);
//
// typePanel
//
this.typePanel.BackColor = System.Drawing.Color.Black;
this.typePanel.Location = new System.Drawing.Point(0, 0);
this.typePanel.Name = "typePanel";
this.typePanel.Size = new System.Drawing.Size(4, 70);
this.typePanel.TabIndex = 5;
//
// processStatus
//
this.processStatus.AutoSize = true;
this.processStatus.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.processStatus.Location = new System.Drawing.Point(222, 18);
this.processStatus.Name = "processStatus";
this.processStatus.Size = new System.Drawing.Size(50, 20);
this.processStatus.TabIndex = 6;
this.processStatus.Text = "label1";
//
// ProofreadItem
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.WhiteSmoke;
this.Controls.Add(this.processStatus);
this.Controls.Add(this.typePanel);
this.Controls.Add(this.btnIgnore);
this.Controls.Add(this.btnAccept);
this.Controls.Add(this.description);
this.Controls.Add(this.type);
this.Controls.Add(this.origin);
this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.Name = "ProofreadItem";
this.Size = new System.Drawing.Size(300, 70);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private Label origin;
private Label type;
private Label description;
private Button btnAccept;
private Button btnIgnore;
private Panel typePanel;
private Label processStatus;
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,79 @@
namespace TestWordAddIn1
{
partial class ProofreadPanel
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.SuspendLayout();
//
// button1
//
this.button1.BackColor = System.Drawing.SystemColors.HotTrack;
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.ForeColor = System.Drawing.Color.White;
this.button1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.button1.Location = new System.Drawing.Point(16, 14);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(117, 31);
this.button1.TabIndex = 0;
this.button1.Text = "开始校对";
this.button1.UseVisualStyleBackColor = false;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// panel1
//
this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panel1.AutoScroll = true;
this.panel1.Location = new System.Drawing.Point(16, 61);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(304, 606);
this.panel1.TabIndex = 1;
//
// ProofreadPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.Controls.Add(this.panel1);
this.Controls.Add(this.button1);
this.Name = "ProofreadPanel";
this.Size = new System.Drawing.Size(340, 686);
this.Load += new System.EventHandler(this.ProofreadPanel_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Panel panel1;
}
}

View File

@ -0,0 +1,131 @@
using Microsoft.Office.Interop.Word;
using Microsoft.Web.WebView2.Core;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Runtime.ConstrainedExecution;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using UtilLib;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Header;
namespace TestWordAddIn1
{
public partial class ProofreadPanel : UserControl
{
private CoreWebView2Environment env;
private readonly int ItemHeight = 75;
private readonly List<ProofreadItem> Items = new List<ProofreadItem>();
public ProofreadPanel()
{
InitializeComponent();
}
private void ProofreadPanel_Load(object sender, EventArgs e)
{
//InitWebview();
}
public void SendMessage(string action, object data)
{
//string json = JsonConvert.SerializeObject(new WebActionMessage(action, data));
//webView21.CoreWebView2.PostWebMessageAsJson(json);
}
//public async void InitWebview()
//{
//if (env == null)
//{
// // 自定义环境位置
// env = await CoreWebView2Environment.CreateAsync(null, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "/web/user_data");
// webView21.CoreWebView2InitializationCompleted += WebView21_CoreWebView2InitializationCompleted;
// await webView21.EnsureCoreWebView2Async(env);
//}
//webView21.Source = new Uri(AppDomain.CurrentDomain.BaseDirectory + "\\web\\index.html");
////
//webView21.CoreWebView2.AddHostObjectToScript("bridge", new Bridge());
//}
private void WebView21_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
{
}
private void webView21_Click(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
var app = Globals.ThisAddIn.Application;
var doc = app.ActiveDocument;
var content = doc.Content.Text.Trim();
if (content.Length > 0)
{
if (MessageBox.Show("将会清空文档内容并加载示例内容,确定继续操作?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
{
return;
}
// doc.Select();
var rng = doc.Range(0, content.Length);
rng.Delete();
}
var result = API.GetProofreadResult();
if (result == null)
{
MessageBox.Show("加载数据失败,请重试");
return;
}
var cur = app.Selection;
if (app.Options.Overtype)
{
// 禁用
app.Options.Overtype = false;
}
if (cur.Type != WdSelectionType.wdSelectionIP)
{
MessageBox.Show("异常");
return;
}
InitDocument(result);
}
private void InitDocument(ProofreadResult result)
{
var app = Globals.ThisAddIn.Application;
var cur = app.Selection;
var doc = app.ActiveDocument;
int index = 0;
foreach (var correct in result.CorrectedSet)
{
cur.TypeText(correct.Insert);
var rng = cur.Range;
if (correct.Diffs != null)
{
foreach (var it in correct.Diffs)
{
ProofreadItem item = new ProofreadItem();
item.SetProofreadItem(it, correct.Offset);
Items.Add(item);
if (it.Tag == "d")
{
var curg = doc.Range(correct.Offset + it.Start, correct.Offset + it.End);
// 设置玄宗效果
}
item.Location = new System.Drawing.Point(10, (ItemHeight + 10) * index);
panel1.Controls.Add(item);
index++;
}
}
}
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,38 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("TestWordAddIn1")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TestWordAddIn1")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//将 ComVisible 设置为 false 将使此程序集中的类型
//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型,
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("1fa7f1e1-a05f-4129-a40d-62134d43270d")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,123 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace TestWordAddIn1.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TestWordAddIn1.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap android_chrome_192x192 {
get {
object obj = ResourceManager.GetObject("android-chrome-192x192", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap check {
get {
object obj = ResourceManager.GetObject("check", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap favicon {
get {
object obj = ResourceManager.GetObject("favicon", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap minus_bold {
get {
object obj = ResourceManager.GetObject("minus-bold", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap search_check {
get {
object obj = ResourceManager.GetObject("search-check", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap search_proofread {
get {
object obj = ResourceManager.GetObject("search-proofread", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -0,0 +1,139 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="search-proofread" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\search-proofread.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="minus-bold" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\minus-bold.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="favicon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\favicon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="check" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\check.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="android-chrome-192x192" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\android-chrome-192x192.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="search-check" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\search-check.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace TestWordAddIn1.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 617 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

161
TestWordAddIn1/Ribbon1.Designer.cs generated Normal file
View File

@ -0,0 +1,161 @@
namespace TestWordAddIn1
{
partial class Ribbon1 : Microsoft.Office.Tools.Ribbon.RibbonBase
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
public Ribbon1()
: base(Globals.Factory.GetRibbonFactory())
{
InitializeComponent();
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.tab1 = this.Factory.CreateRibbonTab();
this.group1 = this.Factory.CreateRibbonGroup();
this.button1 = this.Factory.CreateRibbonButton();
this.btnLoadDocument = this.Factory.CreateRibbonButton();
this.button3 = this.Factory.CreateRibbonButton();
this.group2 = this.Factory.CreateRibbonGroup();
this.btnProofread = this.Factory.CreateRibbonButton();
this.btnOpenForm = this.Factory.CreateRibbonButton();
this.button8 = this.Factory.CreateRibbonButton();
this.button6 = this.Factory.CreateRibbonButton();
this.tab1.SuspendLayout();
this.group1.SuspendLayout();
this.group2.SuspendLayout();
this.SuspendLayout();
//
// tab1
//
this.tab1.ControlId.ControlIdType = Microsoft.Office.Tools.Ribbon.RibbonControlIdType.Office;
this.tab1.Groups.Add(this.group1);
this.tab1.Groups.Add(this.group2);
this.tab1.Label = "测试加载项";
this.tab1.Name = "tab1";
//
// group1
//
this.group1.Items.Add(this.button1);
this.group1.Items.Add(this.btnLoadDocument);
this.group1.Items.Add(this.button3);
this.group1.Label = "分组1";
this.group1.Name = "group1";
//
// button1
//
this.button1.Label = "获取当前文本";
this.button1.Name = "button1";
this.button1.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.button1_Click);
//
// btnLoadDocument
//
this.btnLoadDocument.Label = "加载文档";
this.btnLoadDocument.Name = "btnLoadDocument";
this.btnLoadDocument.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.button2_Click);
//
// button3
//
this.button3.Label = "插入";
this.button3.Name = "button3";
this.button3.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.button3_Click);
//
// group2
//
this.group2.Items.Add(this.btnProofread);
this.group2.Items.Add(this.btnOpenForm);
this.group2.Items.Add(this.button8);
this.group2.Items.Add(this.button6);
this.group2.Label = "分组2";
this.group2.Name = "group2";
//
// btnProofread
//
this.btnProofread.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge;
this.btnProofread.Image = global::TestWordAddIn1.Properties.Resources.search_proofread;
this.btnProofread.Label = "开始校验";
this.btnProofread.Name = "btnProofread";
this.btnProofread.ShowImage = true;
this.btnProofread.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.button4_Click);
//
// btnOpenForm
//
this.btnOpenForm.Image = global::TestWordAddIn1.Properties.Resources.favicon;
this.btnOpenForm.Label = "打开原生窗口";
this.btnOpenForm.Name = "btnOpenForm";
this.btnOpenForm.ShowImage = true;
this.btnOpenForm.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.btnOpenForm_Click);
//
// button8
//
this.button8.Label = "测试3";
this.button8.Name = "button8";
this.button8.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.button8_Click);
//
// button6
//
this.button6.Label = "保存文档";
this.button6.Name = "button6";
this.button6.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.button6_Click);
//
// Ribbon1
//
this.Name = "Ribbon1";
this.RibbonType = "Microsoft.Word.Document";
this.Tabs.Add(this.tab1);
this.Load += new Microsoft.Office.Tools.Ribbon.RibbonUIEventHandler(this.Ribbon1_Load);
this.tab1.ResumeLayout(false);
this.tab1.PerformLayout();
this.group1.ResumeLayout(false);
this.group1.PerformLayout();
this.group2.ResumeLayout(false);
this.group2.PerformLayout();
this.ResumeLayout(false);
}
#endregion
internal Microsoft.Office.Tools.Ribbon.RibbonTab tab1;
internal Microsoft.Office.Tools.Ribbon.RibbonGroup group1;
internal Microsoft.Office.Tools.Ribbon.RibbonButton button1;
internal Microsoft.Office.Tools.Ribbon.RibbonButton btnLoadDocument;
internal Microsoft.Office.Tools.Ribbon.RibbonButton button3;
internal Microsoft.Office.Tools.Ribbon.RibbonGroup group2;
internal Microsoft.Office.Tools.Ribbon.RibbonButton btnProofread;
internal Microsoft.Office.Tools.Ribbon.RibbonButton btnOpenForm;
internal Microsoft.Office.Tools.Ribbon.RibbonButton button8;
internal Microsoft.Office.Tools.Ribbon.RibbonButton button6;
}
partial class ThisRibbonCollection
{
internal Ribbon1 Ribbon1
{
get { return this.GetRibbon<Ribbon1>(); }
}
}
}

175
TestWordAddIn1/Ribbon1.cs Normal file
View File

@ -0,0 +1,175 @@
using Microsoft.Office.Interop.Word;
using Microsoft.Office.Tools.Ribbon;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using UtilLib;
namespace TestWordAddIn1
{
public partial class Ribbon1
{
private Microsoft.Office.Interop.Word.Application wordApp;
private Document document;
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
wordApp = Globals.ThisAddIn.Application;
Console.WriteLine("插件加载完成");
}
private void button1_Click(object sender, RibbonControlEventArgs e)
{
var currentText = wordApp.ActiveDocument.Range().Text;
Debug.WriteLine(currentText);
System.Windows.Forms.MessageBox.Show("Test:" + currentText);
}
private void button4_Click(object sender, RibbonControlEventArgs e)
{
// 开始校对
//var doc = wordApp.ActiveDocument;
//var content = doc.Content.Text.Trim();
//if (content.Length == 0)
//{
// System.Windows.Forms.MessageBox.Show("内容为空");
// return;
//}
Globals.ThisAddIn.SetPanelVisible(true);
}
void addMarks()
{
document = wordApp.ActiveDocument;
Range rng = document.Range(2, 4);
document.Bookmarks.Add("s24", rng);
}
private void btnOpenForm_Click(object sender, RibbonControlEventArgs e)
{
Form1 f1 = new Form1();
f1.ShowDialog();
}
private void button8_Click(object sender, RibbonControlEventArgs e)
{
//var paragrahs = wordApp.ActiveDocument.Paragraphs;
Document doc = wordApp.ActiveDocument;
object start = 0;
object end = 4;
System.Windows.Forms.MessageBox.Show("选择0,4");
// 设置区域位置
Range range = doc.Range(ref start, ref end); // 从 start索引从0开始到end前一个字符(不包含end)
range.Select(); // 选中区域
System.Windows.Forms.MessageBox.Show("即将全选");
wordApp.ActiveDocument.Select(); // 全选
var sentences = doc.Sentences;
System.Windows.Forms.MessageBox.Show("句子总计:" + sentences.Count);
if (sentences.Count >= 2)
{
System.Windows.Forms.MessageBox.Show("选中第2个句子");
var s2 = sentences[2]; // 句子的索引从1开始
doc.Range(s2.Start, s2.End).Select();
}
System.Windows.Forms.MessageBox.Show("选择2,5");
// 设置区域位置
Range rng = doc.Range(2, 5);
rng.Select(); //
System.Windows.Forms.MessageBox.Show("向后选择多2个字符");
// 按字符向后移动
rng.MoveEnd(WdUnits.wdCharacter, 2);
// 字符向前移动
//rng.MoveStart(WdUnits.wdCharacter, 2);
rng.Select();
Thread.Sleep(2000);
// 选择第1段
rng = doc.Paragraphs[1].Range;
rng.Select();
Thread.Sleep(1000);
rng.Collapse(WdCollapseDirection.wdCollapseEnd); // 折叠(wdCollapseEnd:向后wdCollapseStart:向前)
System.Windows.Forms.MessageBox.Show("插入新字符");
rng.Text = "插入新字符";
rng.Select();
}
private void button6_Click(object sender, RibbonControlEventArgs e)
{
wordApp.ActiveDocument.Save();
}
private void button3_Click(object sender, RibbonControlEventArgs e)
{
document = wordApp.ActiveDocument;
var txt = "在文档开头指定一个范围,并插入文本 New Text。\n再说一下这个问题哈";
Selection cur = wordApp.Selection;
if (cur.Type != WdSelectionType.wdSelectionIP)
{
MessageBox.Show("异常");
return;
}
cur.TypeText(txt);
AddBookmark(1, 3, "#ff0000");
AddBookmark(4, 6, "#00ff00");
}
private Bookmark AddBookmark(int rangeStart, int rangeEnd,string color)
{
var doc = wordApp.ActiveDocument;
Range r = doc.Range(rangeStart, rangeEnd);
var mark = doc.Bookmarks.Add("mark_" + rangeStart + "_" + rangeEnd, r);
r.Shading.BackgroundPatternColor = (WdColor)ColorTranslator.ToOle(Colors.FromHex(color));
return mark;
}
private ProofreadResult GetSource()
{
var content = Http.Get("http://test.wx.wm-app.xyz/proofread.json");
var result = JsonConvert.DeserializeObject<Response<ProofreadResult>>(content);
return result.Data;
}
// 加载文档
private void button2_Click(object sender, RibbonControlEventArgs e)
{
document = wordApp.ActiveDocument;
var cur = wordApp.Selection;
if (wordApp.Options.Overtype)
{
// 禁用
wordApp.Options.Overtype = false;
}
if (cur.Type != WdSelectionType.wdSelectionIP)
{
System.Windows.Forms.MessageBox.Show("异常");
return;
}
var result = GetSource();
result.CorrectedSet.ForEach(it =>
{
cur.TypeText(it.Insert);
});
//for (int i = 0; i < 20; i++)
//{
// cur.TypeText("-->" + i);
// cur.TypeParagraph();
// Thread.Sleep(1000);
//}
//cur.TypeText("在文档开头指定一个范围,并插入文本 New Text。\n下面的代码示例可用于文档级自定义项。");
//}
}
}
}

120
TestWordAddIn1/Ribbon1.resx Normal file
View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,305 @@
<Project ToolsVersion="17.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<!--
This section defines project-level properties.
AssemblyName
Name of the output assembly.
Configuration
Specifies a default value for debug.
OutputType
Must be "Library" for VSTO.
Platform
Specifies what CPU the output of this project can run on.
NoStandardLibraries
Set to "false" for VSTO.
RootNamespace
In C#, this specifies the namespace given to new files. In VB, all objects are
wrapped in this namespace at runtime.
-->
<PropertyGroup>
<ProjectTypeGuids>{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{E12FB108-CC54-49E3-B606-872B9805F9FA}</ProjectGuid>
<OutputType>Library</OutputType>
<NoStandardLibraries>false</NoStandardLibraries>
<RootNamespace>TestWordAddIn1</RootNamespace>
<AssemblyName>TestWordAddIn1</AssemblyName>
<LoadBehavior>3</LoadBehavior>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<DefineConstants>VSTO40</DefineConstants>
<BootstrapperEnabled>true</BootstrapperEnabled>
<BootstrapperComponentsLocation>HomeSite</BootstrapperComponentsLocation>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.VSTORuntime.4.0">
<Visible>False</Visible>
<ProductName>Microsoft Visual Studio 2010 Tools for Office Runtime %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<PropertyGroup>
<!--
OfficeApplication
Add-in host application
-->
<OfficeApplication>Word</OfficeApplication>
</PropertyGroup>
<!--
This section defines properties that are set when the "Debug" configuration is selected.
DebugSymbols
If "true", create symbols (.pdb). If "false", do not create symbols.
DefineConstants
Constants defined for the preprocessor.
EnableUnmanagedDebugging
If "true", starting the debugger will attach both managed and unmanaged debuggers.
Optimize
If "true", optimize the build output. If "false", do not optimize.
OutputPath
Output path of project relative to the project file.
WarningLevel
Warning level for the compiler.
-->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
<DefineConstants>$(DefineConstants);DEBUG;TRACE</DefineConstants>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<!--
This section defines properties that are set when the "Release" configuration is selected.
DebugSymbols
If "true", create symbols (.pdb). If "false", do not create symbols.
DefineConstants
Constants defined for the preprocessor.
EnableUnmanagedDebugging
If "true", starting the debugger will attach both managed and unmanaged debuggers.
Optimize
If "true", optimize the build output. If "false", do not optimize.
OutputPath
Output path of project relative to the project file.
WarningLevel
Warning level for the compiler.
-->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
<DefineConstants>$(DefineConstants);TRACE</DefineConstants>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<!--
This section specifies references for the project.
-->
<ItemGroup>
<Reference Include="Accessibility" />
<Reference Include="Microsoft.Web.WebView2.Core, Version=1.0.2151.40, Culture=neutral, PublicKeyToken=2a8ab48044d2601e, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Web.WebView2.1.0.2151.40\lib\net45\Microsoft.Web.WebView2.Core.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Web.WebView2.WinForms, Version=1.0.2151.40, Culture=neutral, PublicKeyToken=2a8ab48044d2601e, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Web.WebView2.1.0.2151.40\lib\net45\Microsoft.Web.WebView2.WinForms.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Web.WebView2.Wpf, Version=1.0.2151.40, Culture=neutral, PublicKeyToken=2a8ab48044d2601e, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Web.WebView2.1.0.2151.40\lib\net45\Microsoft.Web.WebView2.Wpf.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.Office.Tools.v4.0.Framework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.VisualStudio.Tools.Applications.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.Office.Tools, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.Office.Tools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.Office.Tools.Word, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.Office.Tools.Common.v4.0.Utilities, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Reference Include="Office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<Private>False</Private>
<EmbedInteropTypes>true</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
<Private>False</Private>
<EmbedInteropTypes>true</EmbedInteropTypes>
</Reference>
<Reference Include="stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<Private>False</Private>
</Reference>
</ItemGroup>
<!--
This section defines the user source files that are part of the project.
A "Compile" element specifies a source file to compile.
An "EmbeddedResource" element specifies an .resx file for embedded resources.
A "None" element specifies a file that is not to be passed to the compiler (for instance,
a text file or XML file).
The "AppDesigner" element specifies the directory where the application properties files
can be found.
-->
<ItemGroup>
<Compile Include="AppConfig.cs" />
<Compile Include="Bridge.cs" />
<Compile Include="Enums.cs" />
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Http.cs" />
<Compile Include="ProofreadItem.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ProofreadItem.designer.cs">
<DependentUpon>ProofreadItem.cs</DependentUpon>
</Compile>
<Compile Include="ProofreadPanel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ProofreadPanel.Designer.cs">
<DependentUpon>ProofreadPanel.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ProofreadItem.resx">
<DependentUpon>ProofreadItem.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ProofreadPanel.resx">
<DependentUpon>ProofreadPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="Ribbon1.resx">
<DependentUpon>Ribbon1.cs</DependentUpon>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
<Compile Include="Ribbon1.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Ribbon1.Designer.cs">
<DependentUpon>Ribbon1.cs</DependentUpon>
</Compile>
<Compile Include="ThisAddIn.cs">
<SubType>Code</SubType>
</Compile>
<None Include="TestWordAddIn1_TemporaryKey.pfx" />
<None Include="ThisAddIn.Designer.xml">
<DependentUpon>ThisAddIn.cs</DependentUpon>
</None>
<Compile Include="ThisAddIn.Designer.cs">
<DependentUpon>ThisAddIn.Designer.xml</DependentUpon>
</Compile>
<AppDesigner Include="Properties\" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\favicon.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\android-chrome-192x192.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\search-proofread.png" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\UtilLib\UtilLib.csproj">
<Project>{724d79c5-93b5-4bd7-9964-a05ccefd3bfa}</Project>
<Name>UtilLib</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="Resources\minus-bold.png" />
<None Include="Resources\check.png" />
<None Include="Resources\search-check.png" />
<Content Include="web\index.html">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>TestWordAddIn1_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>0618754C31A0C743191F0D2976885003BA3EB202</ManifestCertificateThumbprint>
</PropertyGroup>
<!-- Include the build rules for a C# project. -->
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- Include additional build rules for an Office application add-in. -->
<Import Project="$(VSToolsPath)\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets" Condition="'$(VSToolsPath)' != ''" />
<!-- This section defines VSTO properties that describe the host-changeable project properties. -->
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{BAA0C2D2-18E2-41B9-852F-F413020CAA33}">
<ProjectProperties HostName="Word" HostPackage="{29A7B9D7-A7F1-4328-8EF0-6B2D1A56B2C1}" OfficeVersion="15.0" VstxVersion="4.0" ApplicationType="Word" Language="cs" TemplatesPath="" DebugInfoExeName="#Software\Microsoft\Office\16.0\Word\InstallRoot\Path#WINWORD.EXE" DebugInfoCommandLine="/x" AddItemTemplatesGuid="{51063C3A-E220-4D12-8922-BDA915ACD783}" />
<Host Name="Word" GeneratedCodeNamespace="TestWordAddIn1" IconIndex="0">
<HostItem Name="ThisAddIn" Code="ThisAddIn.cs" CanonicalName="AddIn" CanActivate="false" IconIndex="1" Blueprint="ThisAddIn.Designer.xml" GeneratedCode="ThisAddIn.Designer.cs" />
</Host>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
<Import Project="..\packages\Microsoft.Web.WebView2.1.0.2151.40\build\Microsoft.Web.WebView2.targets" Condition="Exists('..\packages\Microsoft.Web.WebView2.1.0.2151.40\build\Microsoft.Web.WebView2.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.Web.WebView2.1.0.2151.40\build\Microsoft.Web.WebView2.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Web.WebView2.1.0.2151.40\build\Microsoft.Web.WebView2.targets'))" />
</Target>
</Project>

Binary file not shown.

237
TestWordAddIn1/ThisAddIn.Designer.cs generated Normal file
View File

@ -0,0 +1,237 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
#pragma warning disable 414
namespace TestWordAddIn1 {
///
[Microsoft.VisualStudio.Tools.Applications.Runtime.StartupObjectAttribute(0)]
[global::System.Security.Permissions.PermissionSetAttribute(global::System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
public sealed partial class ThisAddIn : Microsoft.Office.Tools.AddInBase {
internal Microsoft.Office.Tools.CustomTaskPaneCollection CustomTaskPanes;
internal Microsoft.Office.Tools.SmartTagCollection VstoSmartTags;
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
private global::System.Object missing = global::System.Type.Missing;
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
internal Microsoft.Office.Interop.Word.Application Application;
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
public ThisAddIn(global::Microsoft.Office.Tools.Word.ApplicationFactory factory, global::System.IServiceProvider serviceProvider) :
base(factory, serviceProvider, "AddIn", "ThisAddIn") {
Globals.Factory = factory;
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
protected override void Initialize() {
base.Initialize();
this.Application = this.GetHostItem<Microsoft.Office.Interop.Word.Application>(typeof(Microsoft.Office.Interop.Word.Application), "Application");
Globals.ThisAddIn = this;
global::System.Windows.Forms.Application.EnableVisualStyles();
this.InitializeCachedData();
this.InitializeControls();
this.InitializeComponents();
this.InitializeData();
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
protected override void FinishInitialization() {
this.InternalStartup();
this.OnStartup();
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
protected override void InitializeDataBindings() {
this.BeginInitialization();
this.BindToData();
this.EndInitialization();
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void InitializeCachedData() {
if ((this.DataHost == null)) {
return;
}
if (this.DataHost.IsCacheInitialized) {
this.DataHost.FillCachedData(this);
}
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void InitializeData() {
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void BindToData() {
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
private void StartCaching(string MemberName) {
this.DataHost.StartCaching(this, MemberName);
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
private void StopCaching(string MemberName) {
this.DataHost.StopCaching(this, MemberName);
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
private bool IsCached(string MemberName) {
return this.DataHost.IsCached(this, MemberName);
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void BeginInitialization() {
this.BeginInit();
this.CustomTaskPanes.BeginInit();
this.VstoSmartTags.BeginInit();
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void EndInitialization() {
this.VstoSmartTags.EndInit();
this.CustomTaskPanes.EndInit();
this.EndInit();
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void InitializeControls() {
this.CustomTaskPanes = Globals.Factory.CreateCustomTaskPaneCollection(null, null, "CustomTaskPanes", "CustomTaskPanes", this);
this.VstoSmartTags = Globals.Factory.CreateSmartTagCollection(null, null, "VstoSmartTags", "VstoSmartTags", this);
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void InitializeComponents() {
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
private bool NeedsFill(string MemberName) {
return this.DataHost.NeedsFill(this, MemberName);
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
protected override void OnShutdown() {
this.VstoSmartTags.Dispose();
this.CustomTaskPanes.Dispose();
base.OnShutdown();
}
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
internal sealed partial class Globals {
///
private Globals() {
}
private static ThisAddIn _ThisAddIn;
private static global::Microsoft.Office.Tools.Word.ApplicationFactory _factory;
private static ThisRibbonCollection _ThisRibbonCollection;
internal static ThisAddIn ThisAddIn {
get {
return _ThisAddIn;
}
set {
if ((_ThisAddIn == null)) {
_ThisAddIn = value;
}
else {
throw new System.NotSupportedException();
}
}
}
internal static global::Microsoft.Office.Tools.Word.ApplicationFactory Factory {
get {
return _factory;
}
set {
if ((_factory == null)) {
_factory = value;
}
else {
throw new System.NotSupportedException();
}
}
}
internal static ThisRibbonCollection Ribbons {
get {
if ((_ThisRibbonCollection == null)) {
_ThisRibbonCollection = new ThisRibbonCollection(_factory.GetRibbonFactory());
}
return _ThisRibbonCollection;
}
}
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")]
internal sealed partial class ThisRibbonCollection : Microsoft.Office.Tools.Ribbon.RibbonCollectionBase {
///
internal ThisRibbonCollection(global::Microsoft.Office.Tools.Ribbon.RibbonFactory factory) :
base(factory) {
}
}
}

View File

@ -0,0 +1,5 @@
<hostitem:hostItem hostitem:baseType="Microsoft.Office.Tools.AddInBase" hostitem:namespace="TestWordAddIn1" hostitem:className="ThisAddIn" hostitem:identifier="ThisAddIn" hostitem:primaryCookie="AddIn" hostitem:master="true" hostitem:factoryType="Microsoft.Office.Tools.Word.ApplicationFactory" hostitem:startupIndex="0" xmlns:hostitem="http://schemas.microsoft.com/2004/VisualStudio/Tools/Applications/HostItem.xsd">
<hostitem:hostObject hostitem:name="Application" hostitem:identifier="Application" hostitem:type="Microsoft.Office.Interop.Word.Application" hostitem:cookie="Application" hostitem:modifier="Internal" />
<hostitem:hostControl hostitem:name="CustomTaskPanes" hostitem:identifier="CustomTaskPanes" hostitem:type="Microsoft.Office.Tools.CustomTaskPaneCollection" hostitem:primaryCookie="CustomTaskPanes" hostitem:modifier="Internal" />
<hostitem:hostControl hostitem:name="VstoSmartTags" hostitem:identifier="VstoSmartTags" hostitem:type="Microsoft.Office.Tools.SmartTagCollection" hostitem:primaryCookie="VstoSmartTags" hostitem:modifier="Internal" />
</hostitem:hostItem>

215
TestWordAddIn1/ThisAddIn.cs Normal file
View File

@ -0,0 +1,215 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Microsoft.Office.Interop.Word;
using System.Runtime.InteropServices;
using CustomTaskPane = Microsoft.Office.Tools.CustomTaskPane;
using System.Windows.Forms;
namespace TestWordAddIn1
{
public partial class ThisAddIn
{
public OfficeType officeType = OfficeType.Word;
public string applicationStartupPath;
public bool proofreadPanelOpen;
private ProofreadPanel proofreadPanel;
private Dictionary<Document, CustomTaskPane> myTaskPanes;
private CustomTaskPane myCustomTaskPane;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
this.applicationStartupPath = System.Windows.Forms.Application.ProductName;
if (applicationStartupPath.Contains("WPS"))
{
this.officeType = OfficeType.WPS;
return;
}
var eventInfo = new ComAwareEventInfo(typeof(ApplicationEvents4_Event), "DocumentOpen");
var handler = new ApplicationEvents4_DocumentOpenEventHandler(Application_DocumentOpen);
// 监听文档相关操作
//eventInfo.AddEventHandler(this, handler);
//new ComAwareEventInfo(typeof(ApplicationEvents4_Event), "NewDocument").AddEventHandler(Application, new ApplicationEvents4_NewDocumentEventHandler(Application_NewDocument));
//new ComAwareEventInfo(typeof(ApplicationEvents4_Event), "WindowActivate").AddEventHandler(Application, new ApplicationEvents4_WindowActivateEventHandler(Application_WindowActivate));
//new ComAwareEventInfo(typeof(ApplicationEvents4_Event), "WindowDeactivate").AddEventHandler(Application, new ApplicationEvents4_WindowDeactivateEventHandler(Application_WindowDeactivate));
}
/// <summary>
/// 隐藏所有的面板
/// </summary>
void HideAllPane()
{
foreach (CustomTaskPane customTaskPane in CustomTaskPanes)
{
customTaskPane.Visible = false;
}
}
private void Application_NewDocument(Document doc)
{
Console.WriteLine("Application_NewDocument");
InitProofreadPanel();
HideAllPane();
}
private void Application_DocumentOpen(Document doc)
{
Console.WriteLine("Application_DocumentOpen");
InitProofreadPanel();
HideAllPane();
}
private void Application_DocumentChange()
{
Console.WriteLine("Application_DocumentChange");
ShowTaskPaneForActiveDocument();
}
private void ShowTaskPaneForActiveDocument()
{
// 获取当前文档
Document activeDocument = Application.ActiveDocument;
// 如果现有任务不包含文档则直接返回
if (!myTaskPanes.ContainsKey(activeDocument))
{
return;
}
// 显示当前文档panel隐藏其他文档panel
foreach (var item in myTaskPanes)
{
if (item.Key == activeDocument)
{
item.Value.Visible = true;
}
else
{
item.Value.Visible = false;
}
}
}
public void Application_WindowActivate_WPS(Document document, Window window)
{
Console.WriteLine("Application_WindowActivate_WPS");
if (myCustomTaskPane == null)
{
InitProofreadPanel();
}
}
public void Application_WindowActivate(Document document, Window window)
{
Console.WriteLine("Application_WindowActivate");
//bool flag = true;
//if (myTaskPanes != null)
//{
// foreach (KeyValuePair<Document,CustomTaskPane> customTaskPane in myTaskPanes)
// {
// if (customTaskPane.Key == Application.ActiveDocument)
// {
// flag = false;
// myCustomTaskPane = customTaskPane.Value;
// proofreadPanel = userControls[Application.ActiveDocument];
// myCustomTaskPane.Visible = customTaskPanesVisible[Application.ActiveDocument];
// break;
// }
// }
// if (flag)
// {
// NewCustomTaskPane();
// }
//}
//else
//{
// NewCustomTaskPane();
//}
//Globals.Ribbons.Ribbon.button_viewOn.Visible = !myCustomTaskPane.Visible;
//Globals.Ribbons.Ribbon.button_viewOff.Visible = myCustomTaskPane.Visible;
}
public void Application_WindowDeactivate(Document document, Window window)
{
Console.WriteLine("Application_WindowDeactivate");
//if (customTaskPanesVisible.ContainsKey(document))
//{
// customTaskPanesVisible[document] = myCustomTaskPane.Visible;
//}
//else
//{
// customTaskPanesVisible.Add(document, myCustomTaskPane.Visible);
//}
}
/// <summary>
/// 面板最小宽度
/// </summary>
private static readonly int MIN_WIDTH = 380;
void InitProofreadPanel()
{
if(this.myCustomTaskPane == null)
{
// 创建
proofreadPanel = new ProofreadPanel();
// 添加到panes
this.myCustomTaskPane = CustomTaskPanes.Add(proofreadPanel, AppConfig.PanelName);
// 先隐藏
this.myCustomTaskPane.Visible = false;
myCustomTaskPane.Width = MIN_WIDTH;
this.myCustomTaskPane.VisibleChanged += OnProofreadPanel_VisibleChange;
// 添加到集合
//this.myTaskPanes.Add(Application.ActiveDocument, this.myCustomTaskPane);
}
}
// 当面板的显示变化时
private void OnProofreadPanel_VisibleChange(object sender, EventArgs e)
{
if(this.myCustomTaskPane != null && myCustomTaskPane.Width < MIN_WIDTH)
{
this.myCustomTaskPane.Width = MIN_WIDTH;
}
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
public void SetPanelVisible(bool open)
{
if (this.proofreadPanelOpen == open) return;
this.InitProofreadPanel();
this.proofreadPanelOpen = open;
this.myCustomTaskPane.Visible = this.proofreadPanelOpen;
}
public bool TogglePanelVisible()
{
this.proofreadPanelOpen = !this.proofreadPanelOpen;
this.myCustomTaskPane.Visible = this.proofreadPanelOpen;
return this.proofreadPanelOpen;
}
#region VSTO
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
}
}

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]

View File

@ -0,0 +1 @@
46fabd4c02277f5287e9e4cc8a8baf270df54dfc

View File

@ -0,0 +1,31 @@
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\TestWordAddIn1.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\TestWordAddIn1.pdb
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\TestWordAddIn1.dll.manifest
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\TestWordAddIn1.vsto
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\Microsoft.Office.Tools.Common.v4.0.Utilities.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Debug\TestWordAddIn1.csproj.AssemblyReference.cache
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Debug\TestWordAddIn1.Properties.Resources.resources
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Debug\TestWordAddIn1.Ribbon1.resources
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Debug\TestWordAddIn1.csproj.GenerateResource.cache
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Debug\TestWordAddIn1.csproj.CoreCompileInputs.cache
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Debug\TestWordAddIn1.csproj.CopyComplete
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Debug\TestWordAddIn1.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Debug\TestWordAddIn1.pdb
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Debug\TestWordAddIn1.Form1.resources
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\Newtonsoft.Json.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\Newtonsoft.Json.xml
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Debug\TestWordAddIn1.ProofreadPanel.resources
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\runtimes\win-x86\native\WebView2Loader.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\runtimes\win-x64\native\WebView2Loader.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\runtimes\win-arm64\native\WebView2Loader.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\Microsoft.Web.WebView2.Core.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\Microsoft.Web.WebView2.WinForms.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\Microsoft.Web.WebView2.Wpf.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\Microsoft.Web.WebView2.Core.xml
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\Microsoft.Web.WebView2.WinForms.xml
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\Microsoft.Web.WebView2.Wpf.xml
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\web\index.html
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Debug\TestWordAddIn1.ProofreadItem.resources
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\UtilLib.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\UtilLib.pdb
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Debug\UtilLib.dll.config

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]

View File

@ -0,0 +1 @@
487d1bb5458f1f46fd33ce520a82e0b8d2655794

View File

@ -0,0 +1,14 @@
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Release\TestWordAddIn1.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Release\TestWordAddIn1.pdb
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Release\TestWordAddIn1.dll.manifest
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Release\TestWordAddIn1.vsto
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\bin\Release\Microsoft.Office.Tools.Common.v4.0.Utilities.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Release\TestWordAddIn1.csproj.AssemblyReference.cache
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Release\TestWordAddIn1.Form1.resources
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Release\TestWordAddIn1.Properties.Resources.resources
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Release\TestWordAddIn1.Ribbon1.resources
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Release\TestWordAddIn1.csproj.GenerateResource.cache
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Release\TestWordAddIn1.csproj.CoreCompileInputs.cache
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Release\TestWordAddIn1.csproj.CopyComplete
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Release\TestWordAddIn1.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\TestWordAddIn1\obj\Release\TestWordAddIn1.pdb

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Web.WebView2" version="1.0.2151.40" targetFramework="net462" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net462" />
</packages>

View File

@ -0,0 +1,24 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>test</title>
</head>
<body>
<button onclick="sendToBehavior()">xxx</button>
<button onclick="testBridge()">xxx</button>
<script>
function sendToBehavior() {
window.postMessage(JSON.stringify({
code: 1, message: 'from web'
}));
}
function testBridge() {
console.log(window.bridge)
}
window.addEventListener('message', e => {
console.log('on-message', e)
})
</script>
</body>
</html>

20
UtilLib/API.cs Normal file
View File

@ -0,0 +1,20 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UtilLib
{
public class API
{
private static readonly string API_URL = "http://test.wx.wm-app.xyz/proofread.json";
public static ProofreadResult GetProofreadResult()
{
var content = Http.Get(API_URL);
var result = JsonConvert.DeserializeObject<Response<ProofreadResult>>(content);
return result.Data;
}
}
}

28
UtilLib/AcceptEnum.cs Normal file
View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UtilLib
{
public enum AcceptEnum
{
/// <summary>
/// 默认(未处理)
/// </summary>
Default = 0,
/// <summary>
/// 复核
/// </summary>
Review = 1,
/// <summary>
/// 采纳
/// </summary>
Accept = 2,
/// <summary>
/// 忽略
/// </summary>
Ignore = 3
}
}

6
UtilLib/App.config Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
</startup>
</configuration>

26
UtilLib/Colors.cs Normal file
View File

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UtilLib
{
public class Colors
{
public static Color FromHex(string hex)
{
hex = hex.TrimStart('#');
int hexValue = Convert.ToInt32(hex, 16);
byte red = (byte)((hexValue >> 16) & 0xFF);
byte green = (byte)((hexValue >> 8) & 0xFF);
byte blue = (byte)(hexValue & 0xFF);
return FromRGB(red, green, blue);
}
public static Color FromRGB(byte red, byte green, byte blue)
{
return Color.FromArgb(red, green, blue);
}
}
}

19
UtilLib/Correct.cs Normal file
View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UtilLib
{
public class Correct
{
public string Key { get; set; }
public int Offset { get; set; }
public string New_text { get; set; }
public string Insert { get; set; }
public int Insert_len { get; set; }
public List<DiffItem> Diffs { get; set; }
}
}

21
UtilLib/DiffItem.cs Normal file
View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UtilLib
{
public class DiffItem
{
public string Tag { get; set; }
public string Origin { get; set; }
public string Text { get; set; }
public int Start { get; set; }
public int End { get; set; }
public int Id { get; set; }
public int Idx { get; set; }
public AcceptEnum IsAccept { get; set; }
public ProofreadType Type { get; set; }
}
}

19
UtilLib/Http.cs Normal file
View File

@ -0,0 +1,19 @@
using System;
using System.IO;
using System.Net;
namespace UtilLib
{
internal class Http
{
public static String Get(string url)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
var res = req.GetResponse();
using (var reader = new StreamReader(res.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
}
}

View File

@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UtilLib
{
public class ProofreadResult
{
public object AbnormalCount { get; set; }
public List<Correct> CorrectedSet { get; set; }
public object History { get; set; }
/*
"id": 1326,
"isBlackWord": true,
"isOrigin": 2,
"isWhiteWord": true,
"name": "失业在家的日子-最新",
"status": 3
*/
public int Id { get; set; }
public bool IsBlackWord { get; set; }
public int IsOrigin { get; set; }
public bool IsWhiteWord { get; set; }
public int Status { get; set; }
public string Name { get; set; }
}
}

72
UtilLib/ProofreadType.cs Normal file
View File

@ -0,0 +1,72 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UtilLib
{
public enum ProofreadType
{
/// <summary>
/// 未知
/// </summary>
unknown,
/// <summary>
/// 黑名单
/// </summary>
blackWord,
/**
*
*/
characterError,
/**
*
*/
wordError,
/**
*
*/
numberError,
/**
*
*/
unitsError,
/**
*
*/
punctuationError,
/**
*
*/
grammarError,
/**
*
*/
knowledgeableError,
/**
*
*/
tendentiousError,
/**
*
*/
inconsistentError,
/**
*
*/
formatError,
/// <summary>
/// 敏感词
/// </summary>
sensitive,
/// <summary>
/// 黑名单-替换
/// </summary>
blackWordReplace = 14,
/// <summary>
/// 黑名单-拦截
/// </summary>
blackWordBlock = 15,
}
}

16
UtilLib/Response.cs Normal file
View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UtilLib
{
public class Response<T>
{
public int Code { get; set; }
public string Msg { get; set; }
public T Data { get; set; }
}
}

83
UtilLib/TypeConfig.cs Normal file
View File

@ -0,0 +1,83 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UtilLib
{
public class TypeConfig
{
/*
{id:[ProofreadTypeEnum.blackWord, ProofreadTypeEnum.blackWordBlock, ProofreadTypeEnum.blackWordReplace], type: 'black',acceptAll:[ProofreadTypeEnum.blackWordReplace],ignoreAll:[ProofreadTypeEnum.blackWordBlock, ProofreadTypeEnum.blackWordReplace], count: 0, text: '', color: '#2A2A2A',key:'blackWord'},
{id:ProofreadTypeEnum.characterError,type: 'char', count: 0, text: '', color: '#FD6643',key:'characterError'},
{ id: ProofreadTypeEnum.wordError,type: 'word', count: 0, text: '', color: '#29CEC0',key: 'wordError'},
{ id: ProofreadTypeEnum.numberError,type: 'number', count: 0, text: '', color: '#c9c9c9',key: 'numberError'},
{ id: ProofreadTypeEnum.punctuationError,type: 'symbol', count: 0, text: '', color: '#558CB7',key: 'punctuationError'},
{ id: ProofreadTypeEnum.unitsError,type: 'unit', count: 0, text: '', color: '#77F1AE',key: 'unitsError'},
{ id: ProofreadTypeEnum.grammarError,type: 'syntax', count: 0, text: '', color: '#CDAFE5',key: 'grammarError'},
{ id: ProofreadTypeEnum.knowledgeableError,type: 'info', count: 0, text: '', color: '#B2CCE6',key: 'knowledgeableError'},
{ id: ProofreadTypeEnum.tendentiousError,type: 'tendency', count: 0, text: '', color: '#E2AACA',key: 'tendentiousError'},
{ id: ProofreadTypeEnum.inconsistentError,type: 'inconsistent', count: 0, text: '', color: '#E0AAAC',key: 'inconsistentError'},
{ id: ProofreadTypeEnum.formatError,type: 'format', count: 0, text: '', color: '#E9D0A7',key: 'formatError'},
{ id: ProofreadTypeEnum.sensitive,type: 'sensitive', count: 0, text: '', color: '#e971ba',key: 'sensitive'},
*/
public ProofreadType Type { get; set; }
public string Text { get; set; }
public string Name { get; set; }
public string Color { get; set; }
public static TypeConfig BlackWord = new TypeConfig(ProofreadType.blackWord, "黑名单", "black", "#2A2A2A");
public static TypeConfig BlackWordBlock = new TypeConfig(ProofreadType.blackWordBlock, "黑名单", "black", "#2A2A2A");
public static TypeConfig BlackWordReplace = new TypeConfig(ProofreadType.blackWordReplace, "黑名单", "black", "#2A2A2A");
public static TypeConfig CharacterError = new TypeConfig(ProofreadType.characterError, "提示", "characterError", "#FD6643");
public static TypeConfig WordError = new TypeConfig(ProofreadType.wordError, "词错", "wordError", "#29CEC0");
public static TypeConfig NumberError = new TypeConfig(ProofreadType.numberError, "数字错", "numberError", "#c9c9c9");
public static TypeConfig PunctuationError = new TypeConfig(ProofreadType.punctuationError, "标点错", "punctuationError", "#558CB7");
public static TypeConfig UnitsError = new TypeConfig(ProofreadType.unitsError, "计量单位错", "unitsError", "#77F1AE");
public static TypeConfig GrammarError = new TypeConfig(ProofreadType.grammarError, "语法错误", "grammarError", "#CDAFE5");
public static TypeConfig KnowledgeableError = new TypeConfig(ProofreadType.knowledgeableError, "知识性错误", "knowledgeableError", "#B2CCE6");
public static TypeConfig TendentiousError = new TypeConfig(ProofreadType.tendentiousError, "倾向性错误", "tendentiousError", "#E2AACA");
public static TypeConfig InconsistentError = new TypeConfig(ProofreadType.inconsistentError, "不一致错误", "inconsistentError", "#E0AAAC");
public static TypeConfig FormatError = new TypeConfig(ProofreadType.formatError, "格式错误", "formatError", "#E9D0A7");
public static TypeConfig Sensitive = new TypeConfig(ProofreadType.sensitive, "敏感词", "sensitive", "#e971ba");
private static Dictionary<ProofreadType, TypeConfig> AllTypeConfig = null;
public TypeConfig(ProofreadType type, string text, string name, string color)
{
this.Type = type;
this.Text = text;
this.Name = name;
this.Color = color;
}
public TypeConfig()
{
}
static void Init()
{
if (AllTypeConfig != null) return;
AllTypeConfig = new Dictionary<ProofreadType, TypeConfig>();
AllTypeConfig.Add(ProofreadType.punctuationError, PunctuationError);
AllTypeConfig.Add(ProofreadType.numberError, NumberError);
AllTypeConfig.Add(ProofreadType.tendentiousError, TendentiousError);
AllTypeConfig.Add(ProofreadType.wordError, WordError);
AllTypeConfig.Add(ProofreadType.blackWord, BlackWord);
AllTypeConfig.Add(ProofreadType.blackWordBlock, BlackWordBlock);
AllTypeConfig.Add(ProofreadType.blackWordReplace, BlackWordReplace);
AllTypeConfig.Add(ProofreadType.characterError, CharacterError);
AllTypeConfig.Add(ProofreadType.formatError, FormatError);
AllTypeConfig.Add(ProofreadType.grammarError, GrammarError);
AllTypeConfig.Add(ProofreadType.inconsistentError, InconsistentError);
AllTypeConfig.Add(ProofreadType.knowledgeableError, KnowledgeableError);
AllTypeConfig.Add(ProofreadType.sensitive, Sensitive);
}
public static TypeConfig Get(ProofreadType type)
{
Init();
return AllTypeConfig[type];
}
}
}

65
UtilLib/UtilLib.csproj Normal file
View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{724D79C5-93B5-4BD7-9964-A05CCEFD3BFA}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>UtilLib</RootNamespace>
<AssemblyName>UtilLib</AssemblyName>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net" />
<Reference Include="System.Net.Http.WebRequest" />
</ItemGroup>
<ItemGroup>
<Compile Include="AcceptEnum.cs" />
<Compile Include="API.cs" />
<Compile Include="Colors.cs" />
<Compile Include="Correct.cs" />
<Compile Include="DiffItem.cs" />
<Compile Include="Http.cs" />
<Compile Include="Response.cs" />
<Compile Include="ProofreadResult.cs" />
<Compile Include="ProofreadType.cs" />
<Compile Include="TypeConfig.cs" />
<Compile Include="WebActionMessage.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UtilLib
{
public class WebActionMessage
{
public WebActionMessage()
{ }
public WebActionMessage(string action, object data)
{
Action = action;
Data = data;
}
public string Action { get; set; }
public object Data { get; set; }
}
}

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]

View File

@ -0,0 +1 @@
fb8f34c352a3d8044db8982ce7a7eb73c62ae6db

View File

@ -0,0 +1,10 @@
C:\Users\home-dev\source\repos\TestWordAddIn1\UtilLib\obj\Debug\UtilLib.csproj.AssemblyReference.cache
C:\Users\home-dev\source\repos\TestWordAddIn1\UtilLib\obj\Debug\UtilLib.csproj.CoreCompileInputs.cache
C:\Users\home-dev\source\repos\TestWordAddIn1\UtilLib\bin\Debug\UtilLib.dll.config
C:\Users\home-dev\source\repos\TestWordAddIn1\UtilLib\bin\Debug\UtilLib.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\UtilLib\bin\Debug\UtilLib.pdb
C:\Users\home-dev\source\repos\TestWordAddIn1\UtilLib\bin\Debug\Newtonsoft.Json.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\UtilLib\bin\Debug\Newtonsoft.Json.xml
C:\Users\home-dev\source\repos\TestWordAddIn1\UtilLib\obj\Debug\UtilLib.csproj.CopyComplete
C:\Users\home-dev\source\repos\TestWordAddIn1\UtilLib\obj\Debug\UtilLib.dll
C:\Users\home-dev\source\repos\TestWordAddIn1\UtilLib\obj\Debug\UtilLib.pdb

Binary file not shown.

Binary file not shown.

4
UtilLib/packages.config Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net462" />
</packages>

View File

@ -0,0 +1,119 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
//using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace Webview2WinFormsApp
{
class AutoAdaptWindowsSize //窗口缩放对象
{
double formOriginalWidth;//窗体高度原始宽度
double formOriginalHeight;//窗体原始
double scaleX;//水平缩放比例
double scaleY;//垂直缩放比例
readonly Dictionary<string, string> ControlsInfo = new Dictionary<string, string>();//控件中心Left,Top,控件Width,控件Height,控件字体Size
private Form _form;
Panel Win_Panel1 = new Panel();
public AutoAdaptWindowsSize(Form form)
{
_form = form;
//代码生成一个容器panel1添加至窗体
_form.Controls.Add(Win_Panel1);
Win_Panel1.BorderStyle = BorderStyle.None; //容器border样式
Win_Panel1.Dock = DockStyle.Fill; //设置填充,下面添加控件至容器完成后,容器会填充窗口
Win_Panel1.BackColor = Color.Transparent; // 这里默认的背景颜色是form的背景颜色如果form页面时图片需要将这里的颜色设置成透明否则会被覆盖。
//将窗体所有控件添加至panel1
while (_form.Controls[0].Name.Trim() != "")
{
foreach (Control item in _form.Controls)
{
if (item.Name.Trim() != "" && item.Name.Trim() != Win_Panel1.Name.Trim())
{
Win_Panel1.Controls.Add(item);
}
}
}
//保存窗体和控件初始大小
InitControlsInfo(Win_Panel1);
}
public void InitControlsInfo(Control ctrlContainer)
{
if (ctrlContainer.Parent == _form)//获取窗体的高度和宽度
{
formOriginalWidth = Convert.ToDouble(ctrlContainer.Width);
formOriginalHeight = Convert.ToDouble(ctrlContainer.Height);
}
foreach (Control item in ctrlContainer.Controls)
{
if (item.Name.Trim() != "")
{
//添加信息:键值:控件名,内容:据左边距离,距顶部距离,控件宽度,控件高度,控件字体。
ControlsInfo.Add(item.Name, (item.Left + item.Width / 2) + "," + (item.Top + item.Height / 2) + "," + item.Width + "," + item.Height + "," + item.Font.Size);
}
if ((item as UserControl) == null && item.Controls.Count > 0)
{
InitControlsInfo(item);
}
}
}
public void FormSizeChanged()
{
try
{
if (ControlsInfo.Count > 0)//如果字典中有数据,即窗体改变
{
ControlsZoomScale(Win_Panel1);//表示pannel控件
ControlsChange(Win_Panel1);
}
}
catch { }
}
private void ControlsZoomScale(Control ctrlContainer)
{
scaleX = (Convert.ToDouble(ctrlContainer.Width) / formOriginalWidth);
scaleY = (Convert.ToDouble(ctrlContainer.Height) / formOriginalHeight);
}
// 改变控件大小
private void ControlsChange(Control ctrlContainer)
{
double[] pos = new double[5];//pos数组保存当前控件中心Left,Top,控件Width,控件Height,控件字体Size
foreach (Control item in ctrlContainer.Controls)//遍历控件
{
if (item.Name.Trim() != "")//如果控件名不是空,则执行
{
if ((item as UserControl) == null && item.Controls.Count > 0)//如果不是自定义控件
{
ControlsChange(item);//循环执行
}
string[] strs = ControlsInfo[item.Name].Split(',');//从字典中查出的数据,以‘,’分割成字符串组
for (int i = 0; i < 5; i++)
{
pos[i] = Convert.ToDouble(strs[i]);//添加到临时数组
}
double itemWidth = pos[2] * scaleX; //计算控件宽度double类型
double itemHeight = pos[3] * scaleY; //计算控件高度
item.Left = Convert.ToInt32(pos[0] * scaleX - itemWidth / 2);//计算控件距离左边距离
item.Top = Convert.ToInt32(pos[1] * scaleY - itemHeight / 2);//计算控件距离顶部距离
item.Width = Convert.ToInt32(itemWidth);//控件宽度int类型
item.Height = Convert.ToInt32(itemHeight);//控件高度
if (float.Parse((pos[4] * Math.Min(scaleX, scaleY)).ToString()) != 0) //缩放字体大小不能为0
{ item.Font = new Font(item.Font.Name, float.Parse((pos[4] * Math.Min(scaleX, scaleY)).ToString())); } //字体
}
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More