|
本帖最后由 liucqa 于 2012-11-19 15:12 编辑
http://support.microsoft.com/kb/302901/zh-cn
参考此贴,俺写出了第一个可以在Excel和Word自动加载的COM加载项。完全抄袭,给后来者做个样本。
MyCOMAddin.rar
(30.57 KB, 下载次数: 269)
- namespace MyCOMAddin
- {
- using System;
- using Extensibility;
- using System.Runtime.InteropServices;
- //添加
- using System.Reflection;
- using Microsoft.Office.Core;
- #region Read me for Add-in installation and setup information.
- // When run, the Add-in wizard prepared the registry for the Add-in.
- // At a later time, if the Add-in becomes unavailable for reasons such as:
- // 1) You moved this project to a computer other than which is was originally created on.
- // 2) You chose 'Yes' when presented with a message asking if you wish to remove the Add-in.
- // 3) Registry corruption.
- // you will need to re-register the Add-in by building the MyCOMAddinSetup project,
- // right click the project in the Solution Explorer, then choose install.
- #endregion
-
-
- /// <summary>
- /// The object for implementing an Add-in.
- /// </summary>
- /// <seealso class='IDTExtensibility2' />
- [GuidAttribute("9A742429-DAD4-4CE0-BA31-5CEB2E5B9813"), ProgId("MyCOMAddin.Connect")]
- public class Connect : Object, Extensibility.IDTExtensibility2
- {
-
- /// <summary>
- /// Implements the constructor for the Add-in object.
- /// Place your initialization code within this method.
- /// </summary>
- public Connect()
- {
- }
- /// <summary>
- /// Implements the OnConnection method of the IDTExtensibility2 interface.
- /// Receives notification that the Add-in is being loaded.
- /// </summary>
- /// <param term='application'>
- /// Root object of the host application.
- /// </param>
- /// <param term='connectMode'>
- /// Describes how the Add-in is being loaded.
- /// </param>
- /// <param term='addInInst'>
- /// Object representing this Add-in.
- /// </param>
- /// <seealso class='IDTExtensibility2' />
- public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
- {
- applicationObject = application;
- addInInstance = addInInst;
- //添加
- if (connectMode != Extensibility.ext_ConnectMode.ext_cm_Startup)
- {
- OnStartupComplete(ref custom);
- }
- }
- /// <summary>
- /// Implements the OnDisconnection method of the IDTExtensibility2 interface.
- /// Receives notification that the Add-in is being unloaded.
- /// </summary>
- /// <param term='disconnectMode'>
- /// Describes how the Add-in is being unloaded.
- /// </param>
- /// <param term='custom'>
- /// Array of parameters that are host application specific.
- /// </param>
- /// <seealso class='IDTExtensibility2' />
- public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom)
- {
- if (disconnectMode != Extensibility.ext_DisconnectMode.ext_dm_HostShutdown)
- {
- OnBeginShutdown(ref custom);
- }
- applicationObject = null;
- }
- /// <summary>
- /// Implements the OnAddInsUpdate method of the IDTExtensibility2 interface.
- /// Receives notification that the collection of Add-ins has changed.
- /// </summary>
- /// <param term='custom'>
- /// Array of parameters that are host application specific.
- /// </param>
- /// <seealso class='IDTExtensibility2' />
- public void OnAddInsUpdate(ref System.Array custom)
- {
- }
- /// <summary>
- /// Implements the OnStartupComplete method of the IDTExtensibility2 interface.
- /// Receives notification that the host application has completed loading.
- /// </summary>
- /// <param term='custom'>
- /// Array of parameters that are host application specific.
- /// </param>
- /// <seealso class='IDTExtensibility2' />
- public void OnStartupComplete(ref System.Array custom)
- {
- CommandBars oCommandBars;
- CommandBar oStandardBar;
- try
- {
- oCommandBars = (CommandBars)applicationObject.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, applicationObject, null);
- }
- catch (Exception)
- {
- // Outlook has the CommandBars collection on the Explorer object.
- object oActiveExplorer;
- oActiveExplorer = applicationObject.GetType().InvokeMember("ActiveExplorer", BindingFlags.GetProperty, null, applicationObject, null);
- oCommandBars = (CommandBars)oActiveExplorer.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, oActiveExplorer, null);
- }
- // Set up a custom button on the "Standard" commandbar.
- try
- {
- oStandardBar = oCommandBars["Standard"];
- }
- catch (Exception)
- {
- // Access names its main toolbar Database.
- oStandardBar = oCommandBars["Database"];
- }
- // In case the button was not deleted, use the exiting one.
- try
- {
- MyButton = (CommandBarButton)oStandardBar.Controls["My Custom Button"];
- }
- catch (Exception)
- {
- object omissing = System.Reflection.Missing.Value;
- MyButton = (CommandBarButton)oStandardBar.Controls.Add(1, omissing, omissing, omissing, omissing);
- MyButton.Caption = "My Custom Button";
- MyButton.Style = MsoButtonStyle.msoButtonCaption;
- }
- // The following items are optional, but recommended.
- //The Tag property lets you quickly find the control
- //and helps MSO keep track of it when more than
- //one application window is visible. The property is required
- //by some Office applications and should be provided.
- MyButton.Tag = "My Custom Button";
- // The OnAction property is optional but recommended.
- //It should be set to the ProgID of the add-in, so that if
- //the add-in is not loaded when a user presses the button,
- //MSO loads the add-in automatically and then raises
- //the Click event for the add-in to handle.
- MyButton.OnAction = "!<MyCOMAddin.Connect>";
- MyButton.Visible = true;
- MyButton.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(this.MyButton_Click);
- object oName = applicationObject.GetType().InvokeMember("Name", BindingFlags.GetProperty, null, applicationObject, null);
- // Display a simple message to show which application you started in.
- System.Windows.Forms.MessageBox.Show("This Addin is loaded by " + oName.ToString(), "MyCOMAddin");
- oStandardBar = null;
- oCommandBars = null;
- }
- /// <summary>
- /// Implements the OnBeginShutdown method of the IDTExtensibility2 interface.
- /// Receives notification that the host application is being unloaded.
- /// </summary>
- /// <param term='custom'>
- /// Array of parameters that are host application specific.
- /// </param>
- /// <seealso class='IDTExtensibility2' />
- public void OnBeginShutdown(ref System.Array custom)
- {
- object omissing = System.Reflection.Missing.Value;
- System.Windows.Forms.MessageBox.Show("MyCOMAddin Add-in is unloading.");
- MyButton.Delete(omissing);
- MyButton = null;
- }
- private void MyButton_Click(CommandBarButton cmdBarbutton, ref bool cancel)
- {
- System.Windows.Forms.MessageBox.Show("MyButton was Clicked", "MyCOMAddin");
- }
- private object applicationObject;
- private object addInInstance;
- //添加
- private CommandBarButton MyButton;
- }
- }
复制代码
|
|