Command Availability
The Visual Studio context determines which commands are available. The context can change depending on the current project, the current editor, the VSPackages that are loaded, and other aspects of the integrated development environment (IDE).
Command Contexts
The following command contexts are the most common.
IDE Commands provided by the IDE are always available.
VSPackage VSPackages can define when commands are to be displayed or hidden.
Project Project commands appear only for the currently selected project.
Editor Only one editor can be active at a time. Commands from the active editor are available. An editor works closely with a language service. The language service must process its commands in the context of the associated editor.
File type An editor can load more than one type of file. The available commands can change depending on the file type.
Active window The last active document window sets the user interface (UI) context for key bindings. However, a tool window that has a key-binding table that resembles the internal Web browser could also set the UI context. For multi-tabbed document windows such as the HTML editor, every tab has a different command context GUID. After a tool window is registered, it is always available on the View menu.
UI Context UI contexts are identified by the values of the VSConstants.UICONTEXT class, for example, UICONTEXT_SolutionBuilding when the solution is being built, or UICONTEXT_Debugging when the debugger is active. Multiple UI contexts can be active at the same time.
Defining Custom Context GUIDs
If an appropriate command context GUID is not already defined, you can define one in your VSPackage and then program it to be active or inactive as required to control the visibility of your commands.
Register context GUIDs by calling the GetCmdUIContextCookie method.
Get the state of a context GUID by calling the IsCmdUIContextActive method.
Turn context GUIDs on and off by calling the SetCmdUIContext method.
Warning
Make sure that your VSPackage does not affect any existing context GUIDs because other VSPackages may depend on them.