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);
}
Können Sie den Code zeigen, wo Sie in die Click-Ereignisse auf Datei-Anschlüsse belegt sind -> Schließen oder andere Menüpunkte? –
@@ Colin Zabransky - bitte lassen Sie mich wissen, wenn Sie einen anderen Teil des Projekts benötigen. – Arun
@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