2016-06-06 33 views
1

Ich versuche, eine einfache VS-Erweiterung zu schreiben, die angezeigt wird, wenn ein Menü eine Verknüpfung an es angeschlossen hat.Finden Sie die richtige GUID-CommandId-Kombination für Visual Studio-Erweiterung

Wenn also ein Benutzer auf Bearbeiten-> Rückgängig aus dem Menü klickt, möchte ich eine Nachricht 'Strg + Z' anzeigen, damit der Benutzer diese Verknüpfung lernen kann. Das Problem, das ich habe, ist, die GUID und die entsprechende Befehls-ID zu identifizieren. Das Folgende sieht ungefähr richtig aus, aber wenn ich auf Datei-> Schließen klicke, wird der Rückruf nicht aufgerufen.

CommandID menuCommandId = new CommandID(VSConstants.GUID_VSStandardCommandSet97, (int)VSConstants.VSStd97CmdID.FileClose); 

protected override void Initialize() {

Debug.WriteLine (string.Format(CultureInfo.CurrentCulture, "Entering Initialize() of: {0}", this.ToString())); 
    base.Initialize(); 

    // Add our command handlers for menu (commands must exist in the .vsct file) 
    var mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService; 
    if (null != mcs) 
    { 
     // Create the command for the menu item. 

     // https://msdn.microsoft.com/en-us/library/cc826118%28v=vs.120%29.aspx 
     CommandID menuCommandId = new CommandID(GuidList.guidLearnShortcutsCmdSet, (int)PkgCmdIDList.cmdIdLearnShortcuts); 

     //workbench.files.action.closeFile 
     //CommandID menuCommandId = new CommandID(VSConstants.GUID_VSStandardCommandSet97, (int)VSConstants.VSStd97CmdID.FileClose); 
     MenuCommand menuItem = new MenuCommand(MenuItemCallback, menuCommandId); 
     mcs.AddCommand(menuItem); 
    } 
} 

    private void MenuItemCallback(object sender, EventArgs e) 
     { 
      IVsStatusbar statusBar = (IVsStatusbar)GetService(typeof(SVsStatusbar)); 

      MenuCommand btn = (MenuCommand)sender; 

      // Make sure the status bar is not frozen 
      int frozen; 

      statusBar.IsFrozen(out frozen); 

      if (frozen != 0) 
      { 
       statusBar.FreezeOutput(0); 
      } 

      // Set the status bar text and make its display static. 
      statusBar.SetText("Update here."); 

      // Freeze the status bar. 
      statusBar.FreezeOutput(1); 

      // Get the status bar text. 
      string text; 
      statusBar.GetText(out text); 
      System.Windows.Forms.MessageBox.Show(text); 

      // Clear the status bar text. 
      statusBar.FreezeOutput(0); 

     } 
+0

Können Sie den Code zeigen, wo Sie in die Click-Ereignisse auf Datei-Anschlüsse belegt sind -> Schließen oder andere Menüpunkte? –

+0

@@ Colin Zabransky - bitte lassen Sie mich wissen, wenn Sie einen anderen Teil des Projekts benötigen. – Arun

+0

@Arun, was meinst du mit "Identifizieren der GUID und ID". Sie möchten die ID des ausgeführten Befehls und seine Gruppen-GUID erfassen, richtig? – NValchev

Antwort

0

aktivieren VSIPLogging in der Registrierung, sollte Version num höchsten Sie haben oder die, die Sie verwenden.

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\[version num]\General\EnableVSIPLogging = 1 

Klicken Sie dann auf die Symbolleiste oder das Menü, die Sie identifizieren möchten, während STRG + UMSCHALT gedrückt gehalten wird. Dies zeigt einen Dialog mit den Eigenschaften der Befehlsleiste. Beachten Sie die Guid und der CMDID

OLD Artikel, aber es funktioniert immer noch https://blogs.msdn.microsoft.com/dr._ex/2007/04/17/using-enablevsiplogging-to-identify-menus-and-commands-with-vs-2005-sp1/

+0

Danke @Paul für die Antwort. – Arun