Re: VisualStudio.NET & Add-Ins
От: MaxMP Россия  
Дата: 14.11.02 14:57
Оценка: 21 (2)
Здравствуйте Dioran, Вы писали:

D>Доброе время суток!


D>Очень хочется написать add-in к vs что бы контекстное меню на файле проекта (определённого типа) соддержало свой, дополнительный пунктик, что бы потом, с этим файлом, можно было бы что то сделать.


D>Может кто нибудь знает как это делается, или хотя бы где можно найти информацию по этому вопросу.


D>Заранее спасибо.


Вот простейший пример, который создает команду в контекстном меню для файла в солюшен эксплорере. Желательно
сначало создать проект Other Projects/Extensibility Project/Visual Studio.NET Add-in.

using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices;    

using EnvDTE;
using Extensibility;
using Microsoft.Office.Core;

namespace MyAddin1
{

[GuidAttribute("19F6C50D-22A4-42E0-8B35-36165B1B0405"), ProgId("ExpAddin.Connect")]
public class Connect : IDTExtensibility2, IDTCommandTarget
{
    private _DTE dte;
    private AddIn addInInstance;

    public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, 
                                    object addInInst, ref System.Array custom)
    {
        try
        {
            dte = (_DTE)application;
            addInInstance = (AddIn)addInInst;
            
            if(connectMode == Extensibility.ext_ConnectMode.ext_cm_UISetup)
            {
                // Clean up first.
                foreach(Command c in  dte.Commands)
                {
                    if(c.Name != null && c.Name.StartsWith("ExpAddin.Connect"))
                    {
                        c.Delete();
                    }
                }
                
                object[] contextGUIDS = new Object[]{};
                Commands commands = dte.Commands;
                _CommandBars commandBars = dte.CommandBars;
                Command command = commands.AddNamedCommand(
                                                        addInInstance, 
                                                        "TestCommand", 
                                                        "Test Command", 
                                                        "Executes the command for Addin", 
                                                        true,
                                                        59, 
                                                        ref contextGUIDS, 
                                                        (int)vsCommandStatus.vsCommandStatusEnabled | (int)vsCommandStatus.vsCommandStatusSupported);

                CommandBar commandBar = (CommandBar)commandBars["Item"];
                CommandBarControl commandBarControl = command.AddControl(commandBar, 1);
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show("Exception: " + ex);
        }
    }

    public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom)
    {
    }

    public void OnAddInsUpdate(ref System.Array custom)
    {
    }

    public void OnStartupComplete(ref System.Array custom)
    {
    }

    public void OnBeginShutdown(ref System.Array custom)
    {
    }
    
    public void QueryStatus(string commandName, EnvDTE.vsCommandStatusTextWanted neededText, ref EnvDTE.vsCommandStatus status, ref object commandText)
    {
        if(neededText == EnvDTE.vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
        {
            status = (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported|vsCommandStatus.vsCommandStatusEnabled;
        }
    }

    public void Exec(string commandName, EnvDTE.vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
    {
        try
        {
            handled = false;
            if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
            {
                // Do something.
                MessageBox.Show("Hello!");
                handled = true;
                return;
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show("exception " + ex);
        }
    }
}

}


И небольшой reg файл для регистрации аддина:
REGEDIT4
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\7.0\AddIns\ExpAddin.Connect]
"CommandPreload"=dword:1
VisualStudio.NET & Add-Ins
От: Dioran  
Дата: 14.11.02 10:05
Оценка:
Доброе время суток!

Очень хочется написать add-in к vs что бы контекстное меню на файле проекта (определённого типа) соддержало свой, дополнительный пунктик, что бы потом, с этим файлом, можно было бы что то сделать.

Может кто нибудь знает как это делается, или хотя бы где можно найти информацию по этому вопросу.

Заранее спасибо.
Re: VisualStudio.NET & Add-Ins
От: Ursus Россия  
Дата: 14.11.02 10:07
Оценка:
Здравствуйте Dioran, Вы писали:

D>Доброе время суток!


D>Очень хочется написать add-in к vs что бы контекстное меню на файле проекта (определённого типа) соддержало свой, дополнительный пунктик, что бы потом, с этим файлом, можно было бы что то сделать.


D>Может кто нибудь знает как это делается, или хотя бы где можно найти информацию по этому вопросу.


D>Заранее спасибо.


Я бы тоже посмотрел информация оп расширениям Visual Studio и созданию своих шаблонов проектов. Если кто увидит, киньте в меня ссылкой
Да пребудет с тобой Великий Джа
Re[2]: VisualStudio.NET & Add-Ins
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 14.11.02 12:25
Оценка:
Здравствуйте Ursus, Вы писали:

U>Я бы тоже посмотрел информация оп расширениям Visual Studio


http://www.microsoft.com/rus/msdn/magazine/archive/special_1/studio_net.asp
Re[3]: VisualStudio.NET & Add-Ins
От: Dioran  
Дата: 14.11.02 12:49
Оценка:
Здравствуйте Odi$$ey, Вы писали:

O$>http://www.microsoft.com/rus/msdn/magazine/archive/special_1/studio_net.asp

Это всё конечно хорошо. Только в том примере что там приведён, разбираться и разбираться, к тому, же не понятно, можно ли будет на основании того примера сделать то, что я хотел... Может где есть пошаговое объяснение что надо делать? Или статья какая на эту тему?
Re[4]: VisualStudio.NET & Add-Ins
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 14.11.02 12:57
Оценка:
Здравствуйте Dioran, Вы писали:

O$>>http://www.microsoft.com/rus/msdn/magazine/archive/special_1/studio_net.asp

D>Это всё конечно хорошо. Только в том примере что там приведён, разбираться и разбираться, к тому, же не понятно, можно ли будет на основании того примера сделать то, что я хотел... Может где есть пошаговое объяснение что надо делать? Или статья какая на эту тему?


а статья в журнале, купи и разбирайся , ну или оригинал читай — http://msdn.microsoft.com/msdnmag/issues/02/02/VSIDE/default.aspx
Re[2]: VisualStudio.NET & Add-Ins
От: Dioran  
Дата: 15.11.02 09:13
Оценка:
Здравствуйте, MaxMP, Вы писали:

MMP> CommandBar commandBar = (CommandBar)commandBars["Item"];


Я сделал список всех существующих CommandBar (типа ["Item"]).
Где нибудь можно узнать что они означают?

Более конкретно, мне ещё надо вставить в контекстное меню открытого файла.

Спасибо.
Re[3]: VisualStudio.NET & Add-Ins
От: MaxMP Россия  
Дата: 15.11.02 09:26
Оценка:
Здравствуйте, Dioran, Вы писали:

D>Здравствуйте, MaxMP, Вы писали:


MMP>> CommandBar commandBar = (CommandBar)commandBars["Item"];


D>Я сделал список всех существующих CommandBar (типа ["Item"]).

D>Где нибудь можно узнать что они означают?

Да в общем-то и не где, хотя иногда в прессе мелькает. А так, в основном — методом тыка и еще аддинчик-сэмпл есть, CmdBrowser, показывает все зарегистрированные тулбары и комманды в виде иерархии, так что можно разобраться:
http://msdn.microsoft.com/code/default.asp?URL=/code/sample.asp?url=/msdn-files/026/002/516/msdncompositedoc.xml

D>Более конкретно, мне ещё надо вставить в контекстное меню открытого файла.


D>Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.