1

如何在我的 Visual Studio 扩展中拦截文件粘贴事件?
文件粘贴 = 在解决方案资源管理器中粘贴整个文件。

我的目标是对复制的文件应用某些替换。

4

1 回答 1

1

可以使用DTE.Events.CommandEvents( MSDN )typeof(VSConstants.VSStd97CmdID).GUID作为命令 guid 和VSConstants.VSStd97CmdID.Paste命令 id 来拦截它。

例子:

protected override void Initialize() {
    var dte = (DTE)GetService(typeof(DTE));

    var pasteGuid = typeof(VSConstants.VSStd97CmdID).GUID.ToString("B");
    var pasteID = (int)VSConstants.VSStd97CmdID.Paste;

    _pasteEvent = dte.Events.CommandEvents[pasteGuid, pasteID];
    _pasteEvent.BeforeExecute += delegate { Trace.WriteLine("Before paste."); };
    _pasteEvent.AfterExecute += delegate { Trace.WriteLine("After paste."); };
}

这并不完美,因为它也可能在其他情况下拦截粘贴,但这是一个很好的第一步。也可以ItemAdded在粘贴期间观看事件以获取粘贴的项目。

于 2013-03-15T12:20:40.537 回答