namespace GreystarToolKit
{
using System;
using Microsoft.Office.Core;
using Extensibility;
using System.Runtime.InteropServices;
using EnvDTE;
using System.Windows.Forms;
using VSUserControlHostLib;
#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 MyAddin21Setup project 
// by right clicking the project in the Solution Explorer, then choosing install.
#endregion

/// <summary>
///   The object for implementing an Add-in.
/// </summary>
/// <seealso class='IDTExtensibility2' />
[GuidAttribute("80458B58-E934-4760-A5FF-14A4A7A89AA7"), ProgId("GreystarToolKit.Connect")]
public class Connect : Object, Extensibility.IDTExtensibility2, IDTCommandTarget
{
/// <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 = (_DTE)application;
addInInstance = (AddIn)addInInst;
if(connectMode == Extensibility.ext_ConnectMode.ext_cm_Startup)
{
object []contextGUIDS = new object[] { };
Commands commands = applicationObject.Commands;
_CommandBars commandBars = applicationObject.CommandBars; // When run, the Add-in wizard prepared the registry for the Add-in.
// At a later time, the Add-in or its commands may become 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) You add new commands or modify commands already defined.
// You will need to re-register the Add-in by building the GreystarToolKitSetup project,
// right-clicking the project in the Solution Explorer, and then choosing install.
// Alternatively, you could execute the ReCreateCommands.reg file the Add-in Wizard generated in
// the project directory, or run 'devenv /setup' from a command prompt.
try
{
Command command = commands.AddNamedCommand(addInInstance, "GreystarToolKit", "GreystarToolKit", "Executes the command for GreystarToolKit", true, 59, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported+(int)vsCommandStatus.vsCommandStatusEnabled);
CommandBar commandBar = (CommandBar)commandBars["Tools"];
CommandBarControl commandBarControl = command.AddControl(commandBar, 1);
}
catch(System.Exception /*e*/)
{
}
}

} /// <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)
{
}

解决方案 »

  1.   


    /// <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)
    {
    } /// <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)
    {
    }

    /// <summary>
    ///      Implements the QueryStatus method of the IDTCommandTarget interface.
    ///      This is called when the command's availability is updated
    /// </summary>
    /// <param term='commandName'>
    /// The name of the command to determine state for.
    /// </param>
    /// <param term='neededText'>
    /// Text that is needed for the command.
    /// </param>
    /// <param term='status'>
    /// The state of the command in the user interface.
    /// </param>
    /// <param term='commandText'>
    /// Text requested by the neededText parameter.
    /// </param>
    /// <seealso class='Exec' />
    public void QueryStatus(string commandName, EnvDTE.vsCommandStatusTextWanted neededText, ref EnvDTE.vsCommandStatus status, ref object commandText)
    {
    if(neededText == EnvDTE.vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
    {
    if(commandName == "GreystarToolKit.Connect.GreystarToolKit")
    {
    status = (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported|vsCommandStatus.vsCommandStatusEnabled;
    }
    }
    } /// <summary>
    ///      Implements the Exec method of the IDTCommandTarget interface.
    ///      This is called when the command is invoked.
    /// </summary>
    /// <param term='commandName'>
    /// The name of the command to execute.
    /// </param>
    /// <param term='executeOption'>
    /// Describes how the command should be run.
    /// </param>
    /// <param term='varIn'>
    /// Parameters passed from the caller to the command handler.
    /// </param>
    /// <param term='varOut'>
    /// Parameters passed from the command handler to the caller.
    /// </param>
    /// <param term='handled'>
    /// Informs the caller if the command was handled or not.
    /// </param>
    /// <seealso class='Exec' />
    public void Exec(string commandName, EnvDTE.vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
    {
    handled = false;
    if(executeOption == EnvDTE.vsCommandExecOption.vsCommandExecOptionDoDefault)
    {
    if(commandName == "GreystarToolKit.Connect.GreystarToolKit")
    {

    object objTemp = null;
    string mGuid = "{858C3FCD-8B39-4540-A592-F31C1520B178}";
    Window w=null;

    w=applicationObject.Windows.CreateToolWindow(addInInstance,"VSUserControlHost.VSUserControlHostCtl","代码生成器 Design By Greystar",mGuid,ref objTemp);
    VSUserControlHostLib.IVSUserControlHostCtl objControl = (VSUserControlHostLib.IVSUserControlHostCtl)objTemp;
    System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();


    objControl.HostUserControl(asm.Location, "GreystarToolKit.MainCtl");
    w.Visible=true;
    w.Activate();
    Window w2=this.applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer);
    // int i=applicationObject.Windows.Count;
    //
    // applicationObject.Windows.Item("{858C3FCD-8B39-4540-A592-F31C1520B178}").Activate();//代码生成器 Design By Greystar


    w.Width=231;
    w.Height=250;
    // w.Left=this.applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer).Left;
    // w.Top=applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer).Top;
    // applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer).LinkedWindows.Add(w);
    w.AutoHides=true;

    handled = true;

    // Window  w2  =applicationObject.Windows.Item(Constants.vsWindowKindSolutionExplorer);   
    // w2.LinkedWindows.Parent.LinkedWindows.Add(w);
    // MessageBox.Show(w2.LinkedWindows.Parent.ToString());


    //   ' Create a linked window frame and dock together the Solution Explorer 
    //   ' and Ouput windows together inside it.
    //  Window Frame = applicationObject.Windows.CreateLinkedWindowFrame(w2, w, vsLinkedWindowType.vsLinkedWindowTypeDocked);
    //   Frame.LinkedWindows.Item(1).LinkedWindowFrame.Activate();
    //

    return;

    }
    }
    }
    private _DTE applicationObject;
    private AddIn addInInstance;

    }
    }
      

  2.   

    谢谢楼上大哥。这帖子我会加分的。不过想问问个问题:你怎么取到858C3FCD-8B39-4540-A592-F31C1520B178这个字符串的?