An extension can subscribe to Visual Studio IDE events in the SetSite method and must unsubscribe from them in the Close method.
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
{
events = DTE.Events;
windowEvents = events.WindowEvents;
windowEvents.WindowActivated += OnWindowActivated;
System.IServiceProvider serviceProvider = package as System.IServiceProvider;
statusBar = serviceProvider.GetService(
typeof(Microsoft.VisualStudio.Shell.Interop.SVsStatusbar)) as
Microsoft.VisualStudio.Shell.Interop.IVsStatusbar;
}
public void Close()
{
windowEvents.WindowActivated -= OnWindowActivated;
}
private void OnWindowActivated(EnvDTE.Window gotFocus, EnvDTE.Window lostFocus)
{
try
{
if (gotFocus.Document != null)
Show(gotFocus.Document.FullName);
else
Show(gotFocus.Caption);
}
catch (System.Exception e)
{
}
}
private void Show(string s)
{
int frozen;
statusBar.IsFrozen(out frozen);
if (frozen == 0)
statusBar.SetText(s);
}
private EnvDTE.Events events;
private EnvDTE.WindowEvents windowEvents;
private Microsoft.VisualStudio.Shell.Interop.IVsStatusbar statusBar;
}
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE_, Microsoft.VisualStudio.Shell.Package package)
{
DTE = DTE_;
events = DTE.Events;
documentEvents = events.DocumentEvents;
documentEvents.DocumentSaved += OnDocumentSaved;
}
public void Close()
{
documentEvents.DocumentSaved -= OnDocumentSaved;
}
private void OnDocumentSaved(EnvDTE.Document doc)
{
if(doc.Language == "C/C++")
RunCppcheck(doc.FullName);
}
private void RunCppcheck(string file)
{
GetOutputPane().Clear();
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = @"C:\Program Files (x86)\Cppcheck\cppcheck.exe";
p.StartInfo.Arguments = "--quiet --verbose --template=vs \"" + file + "\"";
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.OutputDataReceived += (sender, args) => OutputString(args.Data);
p.ErrorDataReceived += (sender, args) => OutputString(args.Data);
p.Start();
p.BeginOutputReadLine();
p.BeginErrorReadLine();
p.WaitForExit();
p.Close();
}
private void OutputString(string line)
{
GetOutputPane().OutputString(line + System.Environment.NewLine);
}
private EnvDTE.OutputWindowPane GetOutputPane()
{
string cppcheckPaneName = "Cppcheck";
foreach (EnvDTE.OutputWindowPane pane in
DTE.ToolWindows.OutputWindow.OutputWindowPanes)
{
if (pane.Name == cppcheckPaneName)
return pane;
}
return DTE.ToolWindows.OutputWindow.OutputWindowPanes.Add(cppcheckPaneName);
}
private EnvDTE80.DTE2 DTE;
private EnvDTE.Events events;
private EnvDTE.DocumentEvents documentEvents;
}
References: System.Xaml
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
{
timer = new System.Windows.Threading.DispatcherTimer();
timer.Interval = System.TimeSpan.FromMilliseconds(1000);
timer.Tick += OnTimer;
timer.Start();
}
public void Close()
{
timer.Stop();
}
private void OnTimer(System.Object o, System.EventArgs a)
{
try
{
if (HideSignIn() && HideFeedback())
;
}
catch (System.Exception e)
{
}
}
private bool HideSignIn()
{
System.Windows.FrameworkElement e =
FindElement(System.Windows.Application.Current.MainWindow,
"PART_MenuBarFrameControlContainer");
if (e != null)
{
e.Visibility = System.Windows.Visibility.Collapsed;
return true;
}
return false;
}
private bool HideFeedback()
{
System.Windows.FrameworkElement e =
FindElement(System.Windows.Application.Current.MainWindow,
"PART_TitleBarFrameControlContainer");
if (e != null)
{
System.Windows.DependencyObject o1 =
System.Windows.Media.VisualTreeHelper.GetChild(e, 0);
System.Windows.DependencyObject o2 =
System.Windows.Media.VisualTreeHelper.GetChild(o1, 0);
System.Windows.DependencyObject o3 =
System.Windows.Media.VisualTreeHelper.GetChild(o2, 0);
if (System.Windows.Media.VisualTreeHelper.GetChildrenCount(o3) == 3)
{
System.Windows.DependencyObject o4 =
System.Windows.Media.VisualTreeHelper.GetChild(o3, 1);
(o4 as System.Windows.FrameworkElement).Visibility =
System.Windows.Visibility.Collapsed;
return true;
}
}
return false;
}
private System.Windows.FrameworkElement FindElement(System.Windows.Media.Visual v, string name)
{
if (v == null)
return null;
for (int i = 0; i < System.Windows.Media.VisualTreeHelper.GetChildrenCount(v); ++i)
{
System.Windows.Media.Visual child =
System.Windows.Media.VisualTreeHelper.GetChild(v, i) as
System.Windows.Media.Visual;
if (child != null)
{
System.Windows.FrameworkElement e =
child as System.Windows.FrameworkElement;
if (e != null && e.Name == name)
return e;
}
System.Windows.FrameworkElement result = FindElement(child, name);
if (result != null)
return result;
}
return null;
}
private System.Windows.Threading.DispatcherTimer timer;
}
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
{
events = DTE.Events;
dteEvents = events.DTEEvents;
dteEvents.OnStartupComplete += OnStartupComplete;
}
public void Close()
{
dteEvents.OnStartupComplete -= OnStartupComplete;
}
private void OnStartupComplete()
{
try
{
HideTitleBar();
}
catch
{
}
}
private bool HideTitleBar()
{
System.Windows.FrameworkElement e =
FindElement(System.Windows.Application.Current.MainWindow,
"MainWindowTitleBar");
if (e != null)
{
e.Visibility = System.Windows.Visibility.Collapsed;
return true;
}
return false;
}
private System.Windows.FrameworkElement FindElement(System.Windows.Media.Visual v, string name)
{
if (v == null)
return null;
for (int i = 0; i < System.Windows.Media.VisualTreeHelper.GetChildrenCount(v); ++i)
{
System.Windows.Media.Visual child =
System.Windows.Media.VisualTreeHelper.GetChild(v, i) as
System.Windows.Media.Visual;
if (child != null)
{
System.Windows.FrameworkElement e =
child as System.Windows.FrameworkElement;
if (e != null && e.Name == name)
return e;
}
System.Windows.FrameworkElement result = FindElement(child, name);
if (result != null)
return result;
}
return null;
}
private EnvDTE.Events events;
private EnvDTE.DTEEvents dteEvents;
}
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE_, Microsoft.VisualStudio.Shell.Package package)
{
DTE = DTE_;
events = DTE.Events;
debuggerEvents = events.DebuggerEvents;
debuggerEvents.OnEnterRunMode += OnEnterRunMode;
}
public void Close()
{
debuggerEvents.OnEnterRunMode -= OnEnterRunMode;
}
private void OnEnterRunMode(EnvDTE.dbgEventReason reason)
{
try
{
if (reason == EnvDTE.dbgEventReason.dbgEventReasonGo)
DTE.MainWindow.WindowState = EnvDTE.vsWindowState.vsWindowStateMinimize;
}
catch
{
}
}
EnvDTE80.DTE2 DTE;
private EnvDTE.Events events;
private EnvDTE.DebuggerEvents debuggerEvents;
}
Imports EnvDTE
Imports EnvDTE80
Imports Microsoft.VisualStudio.Shell
Public Class E
Implements VisualCommanderExt.IExtension
Sub SetSite(DTE_ As DTE2, package As Package) Implements VisualCommanderExt.IExtension.SetSite
DTE = DTE_
events = DTE.Events
buildEvents = events.BuildEvents
AddHandler buildEvents.OnBuildBegin, AddressOf OnBuildBegin
End Sub
Sub Close() Implements VisualCommanderExt.IExtension.Close
RemoveHandler buildEvents.OnBuildBegin, AddressOf OnBuildBegin
End Sub
Private Sub OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As vsBuildAction)
For Each proj As Project In DTE.Solution.Projects
For Each item As ProjectItem In proj.ProjectItems
If (item.Kind <> "{6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}") Then
Continue For
End If
For i As Integer = 1 To item.FileCount
Dim path As String = item.FileNames(i)
If Not System.IO.File.Exists(item.FileNames(i)) Then
WriteToBuildWindow(
"!! Missing file:" & item.FileNames(i) +
" in project " + proj.Name)
End If
Next
Next
Next
End Sub
Private Sub WriteToBuildWindow(ByVal text As String)
Dim ow As OutputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object
Dim build As OutputWindowPane = ow.OutputWindowPanes.Item("Build")
build.OutputString(text & System.Environment.NewLine)
End Sub
private DTE As EnvDTE80.DTE2
private events As EnvDTE.Events
private buildEvents as EnvDTE.BuildEvents
End Class
(Original macro code is here by Simon Mourier.)
Imports EnvDTE
Imports EnvDTE80
Imports Microsoft.VisualStudio.Shell
Public Class E
Implements VisualCommanderExt.IExtension
Sub SetSite(DTE_ As DTE2, package As Package) Implements VisualCommanderExt.IExtension.SetSite
DTE = DTE_
events = DTE.Events
buildEvents = events.BuildEvents
AddHandler buildEvents.OnBuildBegin, AddressOf OnBuildBegin
End Sub
Sub Close() Implements VisualCommanderExt.IExtension.Close
RemoveHandler buildEvents.OnBuildBegin, AddressOf OnBuildBegin
End Sub
Private Sub OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As vsBuildAction)
Dim window As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
Dim output As OutputWindow = CType(window.Object, OutputWindow)
For Each pane As OutputWindowPane In output.OutputWindowPanes
If (pane.Guid = "{2032B126-7C8D-48AD-8026-0E0348004FC0}") Then
pane.Activate()
End If
Next
window.Activate()
End Sub
private DTE As EnvDTE80.DTE2
private events As EnvDTE.Events
private buildEvents as EnvDTE.BuildEvents
End Class
(Original macro code is here by Simon Mourier.)
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE_, Microsoft.VisualStudio.Shell.Package package)
{
DTE = DTE_;
events = DTE.Events;
solutionEvents = events.SolutionEvents;
solutionEvents.BeforeClosing += OnSolutionBeforeClosing;
}
public void Close()
{
solutionEvents.BeforeClosing -= OnSolutionBeforeClosing;
}
private void OnSolutionBeforeClosing()
{
try
{
DTE.ExecuteCommand("Window.CloseAllDocuments");
}
catch (System.Exception e)
{
}
}
EnvDTE80.DTE2 DTE;
private EnvDTE.Events events;
private EnvDTE.SolutionEvents solutionEvents;
}
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE_, Microsoft.VisualStudio.Shell.Package package)
{
DTE = DTE_;
events = DTE.Events;
solutionEvents = events.SolutionEvents;
solutionEvents.Opened += OnSolutionOpened;
if (IsSolutionOpen())
OnSolutionOpened();
}
public void Close()
{
solutionEvents.Opened -= OnSolutionOpened;
}
private void OnSolutionOpened()
{
try
{
if (IsSolutionPathValid())
{
string startupFile = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(DTE.Solution.FullName), "startup.html");
if (System.IO.File.Exists(startupFile))
DTE.ItemOperations.OpenFile(startupFile);
}
}
catch (System.Exception)
{
}
}
private bool IsSolutionOpen()
{
return DTE != null && DTE.Solution != null && DTE.Solution.IsOpen;
}
private bool IsSolutionPathValid()
{
try
{
string path = DTE.Solution.FileName;
return path != null && path.Length > 0 && System.IO.Path.IsPathRooted(path) && System.IO.File.Exists(path);
}
catch (System.Exception)
{
}
return false;
}
EnvDTE80.DTE2 DTE;
private EnvDTE.Events events;
private EnvDTE.SolutionEvents solutionEvents;
}
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE_, Microsoft.VisualStudio.Shell.Package package)
{
DTE = DTE_;
System.Windows.Application.Current.Deactivated += OnDeactivated;
}
public void Close()
{
System.Windows.Application.Current.Deactivated -= OnDeactivated;
}
private void OnDeactivated(object sender, System.EventArgs e)
{
try
{
DTE.ExecuteCommand("File.SaveAll");
}
catch (System.Exception ex)
{
}
}
private EnvDTE80.DTE2 DTE;
}
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
{
if (DTE.Version.Substring(0, 2) == "14") // VS 2015
AddOverlay("15", System.Windows.Media.Brushes.Lime);
}
public void Close()
{
}
private void AddOverlay(string text, System.Windows.Media.Brush color)
{
System.Windows.Media.FormattedText formattedText = new System.Windows.Media.FormattedText(text,
System.Globalization.CultureInfo.CurrentCulture, System.Windows.FlowDirection.LeftToRight,
new System.Windows.Media.Typeface("Arial"), 12, color);
System.Windows.Media.Drawing drawing = new System.Windows.Media.GeometryDrawing(color,
new System.Windows.Media.Pen(color, 1),
formattedText.BuildGeometry(new System.Windows.Point(0, 0)));
System.Windows.Shell.TaskbarItemInfo taskbarItem = new System.Windows.Shell.TaskbarItemInfo();
taskbarItem.Overlay = new System.Windows.Media.DrawingImage(drawing);
System.Windows.Application.Current.MainWindow.TaskbarItemInfo = taskbarItem;
}
}
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
{
vs2015 = DTE.Version.Substring(0, 2) == "14";
if (vs2015)
{
timer = new System.Windows.Threading.DispatcherTimer();
timer.Interval = System.TimeSpan.FromMilliseconds(10);
timer.Tick += OnTimer;
OnStartupComplete();
}
}
public void Close()
{
if (vs2015)
{
timer.Stop();
}
}
private void OnStartupComplete()
{
try
{
timer.Start();
}
catch
{
}
}
private void OnTimer(System.Object o, System.EventArgs a)
{
try
{
timer.Stop();
string localFile = System.IO.Path.Combine(
System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), // %AppData%
@"VS2015RTM.ico");
SetIcon(System.IO.File.Exists(localFile) ? localFile : @"https://vlasovstudio.com/etc/VS2015RTM.ico");
}
catch (System.Exception e)
{
}
}
private void SetIcon(string file)
{
System.Windows.Application.Current.MainWindow.Icon =
new System.Windows.Media.Imaging.BitmapImage(new System.Uri(file));
}
bool vs2015;
private System.Windows.Threading.DispatcherTimer timer;
}
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
{
events = DTE.Events;
commandEvents = events.get_CommandEvents(null, 0);
commands = DTE.Commands as EnvDTE80.Commands2;
commandEvents.BeforeExecute += OnBeforeExecute;
commandEvents.AfterExecute += OnAfterExecute;
}
public void Close()
{
commandEvents.BeforeExecute -= OnBeforeExecute;
commandEvents.AfterExecute -= OnAfterExecute;
}
private void OnBeforeExecute(string Guid, int ID, object CustomIn, object CustomOut, ref bool CancelDefault)
{
string name = GetCommandName(Guid, ID);
if (name == "Debug.Start")
System.Windows.MessageBox.Show("OnBeforeExecute Debug.Start");
}
private void OnAfterExecute(string Guid, int ID, object CustomIn, object CustomOut)
{
string name = GetCommandName(Guid, ID);
if (name == "Debug.Start")
System.Windows.MessageBox.Show("OnAfterExecute Debug.Start");
}
private string GetCommandName(string Guid, int ID)
{
if (Guid == null)
return "null";
try
{
return commands.Item(Guid, ID).Name;
}
catch (System.Exception)
{
}
return "";
}
private EnvDTE.Events events;
private EnvDTE.CommandEvents commandEvents;
private EnvDTE80.Commands2 commands;
}
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
{
timer = new System.Windows.Threading.DispatcherTimer();
timer.Interval = System.TimeSpan.FromMilliseconds(1000);
timer.Tick += OnTimer;
timer.Start();
}
public void Close()
{
timer.Stop();
}
private void OnTimer(System.Object o, System.EventArgs a)
{
try
{
if (HidePublish())
timer.Stop();
}
catch (System.Exception e)
{
}
}
private bool HidePublish()
{
System.Windows.FrameworkElement e =
FindElement(System.Windows.Application.Current.MainWindow,
"PublishCompartment");
if (e != null)
{
e.Visibility = System.Windows.Visibility.Collapsed;
return true;
}
return false;
}
private System.Windows.FrameworkElement FindElement(System.Windows.Media.Visual v, string name)
{
if (v == null)
return null;
for (int i = 0; i < System.Windows.Media.VisualTreeHelper.GetChildrenCount(v); ++i)
{
System.Windows.Media.Visual child =
System.Windows.Media.VisualTreeHelper.GetChild(v, i) as
System.Windows.Media.Visual;
if (child != null)
{
System.Windows.FrameworkElement e =
child as System.Windows.FrameworkElement;
if (e != null && e.Name == name)
return e;
}
System.Windows.FrameworkElement result = FindElement(child, name);
if (result != null)
return result;
}
return null;
}
private System.Windows.Threading.DispatcherTimer timer;
}
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
{
events = DTE.Events;
commandEvents = events.get_CommandEvents(null, 0);
commands = DTE.Commands as EnvDTE80.Commands2;
commandEvents.BeforeExecute += OnBeforeExecute;
}
public void Close()
{
commandEvents.BeforeExecute -= OnBeforeExecute;
}
private void OnBeforeExecute(string Guid, int ID, object CustomIn, object CustomOut, ref bool CancelDefault)
{
string name = GetCommandName(Guid, ID);
if (name.Contains("Rebuild"))
{
if (System.Windows.MessageBox.Show("Are you sure you want to Rebuild?", "Confirm",
System.Windows.MessageBoxButton.YesNo) != System.Windows.MessageBoxResult.Yes)
{
CancelDefault = true;
}
}
}
private string GetCommandName(string Guid, int ID)
{
if (Guid == null)
return "null";
try
{
return commands.Item(Guid, ID).Name;
}
catch (System.Exception)
{
}
return "";
}
private EnvDTE.Events events;
private EnvDTE.CommandEvents commandEvents;
private EnvDTE80.Commands2 commands;
}
(Developed by Pawel Stepniewski)
C#
using EnvDTE;
using EnvDTE80;
using System;
using System.Timers;
using System.Windows.Forms;
public class E : VisualCommanderExt.IExtension
{
public class MyTimer : System.Timers.Timer
{
private Action _action = null;
public MyTimer(Action action, double intervalms) : base(intervalms)
{
_action = action;
base.Elapsed += OnTimedEvent;
}
private void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
{
if (_action != null)
{
_action();
}
}
public void Restart()
{
base.Stop();
base.Start();
}
}
private MyTimer _myTimer;
private void onEveryEvent() {
_myTimer.Restart();
}
private void handler(TextPoint StartPoint, TextPoint EndPoint, int Hint)
{
onEveryEvent();
}
private void selectionOnChange() {
onEveryEvent();
}
public void SetSite(EnvDTE80.DTE2 DTE_, Microsoft.VisualStudio.Shell.Package package)
{
DTE = DTE_;
events = DTE.Events;
textEditEvents = events.TextEditorEvents;
textEditEvents.LineChanged += handler;
selEvents = events.SelectionEvents;
selEvents.OnChange += selectionOnChange;
_myTimer = new MyTimer(MyAction, 5000);
_myTimer.Start();
}
public void Close()
{
textEditEvents.LineChanged -= handler;
selEvents.OnChange -= selectionOnChange;
_myTimer.Stop();
}
private void MyAction()
{
try
{
DTE.ExecuteCommand("File.SaveAll");
}
catch (System.Exception ex)
{
}
}
private EnvDTE80.DTE2 DTE;
private EnvDTE.Events events;
private EnvDTE.TextEditorEvents textEditEvents;
private EnvDTE.SelectionEvents selEvents;
}
public class E : VisualCommanderExt.IExtension
{
const string fileToBlock = "xxx.cs";
public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
{
System.IServiceProvider serviceProvider = package as System.IServiceProvider;
rdt = serviceProvider.GetService(
typeof(Microsoft.VisualStudio.Shell.Interop.SVsRunningDocumentTable)) as
Microsoft.VisualStudio.Shell.Interop.IVsRunningDocumentTable;
rdt.AdviseRunningDocTableEvents(new RunningDocTableEventsSink(rdt, fileToBlock), out sinkCookie);
}
public void Close()
{
rdt.UnadviseRunningDocTableEvents(sinkCookie);
}
Microsoft.VisualStudio.Shell.Interop.IVsRunningDocumentTable rdt;
private uint sinkCookie;
}
class RunningDocTableEventsSink : Microsoft.VisualStudio.Shell.Interop.IVsRunningDocTableEvents
{
public RunningDocTableEventsSink(Microsoft.VisualStudio.Shell.Interop.IVsRunningDocumentTable rdt, string fileToBlock)
{
this.rdt = rdt;
this.fileToBlock = fileToBlock;
}
public int OnAfterAttributeChange(uint docCookie, uint grfAttribs)
{
return Microsoft.VisualStudio.VSConstants.S_OK;
}
public int OnAfterDocumentWindowHide(uint docCookie, Microsoft.VisualStudio.Shell.Interop.IVsWindowFrame pFrame)
{
return Microsoft.VisualStudio.VSConstants.S_OK;
}
public int OnAfterFirstDocumentLock(uint docCookie, uint dwRDTLockType, uint dwReadLocksRemaining, uint dwEditLocksRemaining)
{
return Microsoft.VisualStudio.VSConstants.S_OK;
}
public int OnAfterSave(uint docCookie)
{
return Microsoft.VisualStudio.VSConstants.S_OK;
}
public int OnBeforeDocumentWindowShow(uint docCookie, int fFirstShow, Microsoft.VisualStudio.Shell.Interop.IVsWindowFrame pFrame)
{
try
{
if (GetDocumentName(docCookie).EndsWith(fileToBlock, System.StringComparison.CurrentCultureIgnoreCase))
pFrame.CloseFrame((int)Microsoft.VisualStudio.Shell.Interop.__FRAMECLOSE.FRAMECLOSE_NoSave);
}
catch (System.Exception e)
{
}
return Microsoft.VisualStudio.VSConstants.S_OK;
}
public int OnBeforeLastDocumentUnlock(uint docCookie, uint dwRDTLockType, uint dwReadLocksRemaining, uint dwEditLocksRemaining)
{
return Microsoft.VisualStudio.VSConstants.S_OK;
}
private string GetDocumentName(uint docCookie)
{
uint pgrfRDTFlags;
uint pdwReadLocks;
uint pdwEditLocks;
string pbstrMkDocument;
Microsoft.VisualStudio.Shell.Interop.IVsHierarchy ppHier;
uint pitemid;
System.IntPtr ppunkDocData;
if (rdt.GetDocumentInfo(docCookie, out pgrfRDTFlags, out pdwReadLocks, out pdwEditLocks, out pbstrMkDocument,
out ppHier, out pitemid, out ppunkDocData) == Microsoft.VisualStudio.VSConstants.S_OK)
{
if (pbstrMkDocument != null)
return pbstrMkDocument;
}
return "";
}
Microsoft.VisualStudio.Shell.Interop.IVsRunningDocumentTable rdt;
string fileToBlock;
}
Microsoft.VisualStudio.ComponentModelHost Microsoft.VisualStudio.Text.Logic Microsoft.VisualStudio.Text.UI.WpfC#
using EnvDTE;
using EnvDTE80;
using Microsoft.VisualStudio.ComponentModelHost;
using Microsoft.VisualStudio.Text.Classification;
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
{
SetClassificationOpacity(package as System.IServiceProvider, "UnnecessaryCodeDiagnostic", 1);
}
public void Close()
{
}
private bool SetClassificationOpacity(System.IServiceProvider serviceProvider, string classification, double opacity)
{
IComponentModel componentModel = (IComponentModel)serviceProvider.GetService(typeof(SComponentModel));
IClassificationTypeRegistryService registryService = componentModel.GetService<IClassificationTypeRegistryService>();
IClassificationFormatMap classificationFormatMap =
componentModel.GetService<IClassificationFormatMapService>().GetClassificationFormatMap(category: "text");
IClassificationType classificationType = registryService.GetClassificationType(classification);
if (classificationType == null)
return false;
var properties = classificationFormatMap.GetExplicitTextProperties(classificationType);
var newProperties = properties.SetForegroundOpacity(opacity);
classificationFormatMap.SetExplicitTextProperties(classificationType, newProperties);
return true;
}
}
Copyright 2008 - 2025 Vlasov Studio (Best in class Visual Studio extensions and tools)