我录制了一个包含按键F12(转到定义)的宏,但是录音省略了传递给DTE.ExecuteCommand的第二个参数,导致宏在执行期间崩溃。据推测,第二个arg是我想要找到的函数的名称,但我无法弄清楚如何获取并传递该值。如果我选择函数或方法名称(但不是args或类前缀),我可以使用DTE.ActiveDocument.Selection.Text.ToString来传递选择,但不是跳转到定义,而是返回两者。 h文件和查找符号结果窗口中的.cpp文件。
(而且我不确定选择是否真的是我想要的,虽然我可能会让宏选择“正确的东西”,如果这是要走的路。有没有办法看看F12传递的是什么,只是看看它是什么样的?或者更好的是,找出F12正在传递的程序对象?
Vs2010 Pro
答案 0 :(得分:2)
通过IVsUIShell工作运行相同的命令:
Dim cmd As EnvDTE.Command
Dim shell As Microsoft.VisualStudio.Shell.Interop.IVsUIShell
Dim arg As Object
Dim guid As System.Guid
Dim serviceProvider As System.IServiceProvider
serviceProvider = New Microsoft.VisualStudio.Shell.ServiceProvider(CType(DTE, Microsoft.VisualStudio.OLE.Interop.IServiceProvider))
shell = serviceProvider.GetService(GetType(Microsoft.VisualStudio.Shell.Interop.SVsUIShell))
cmd = DTE.Commands.Item("Edit.GoToDefinition", 0)
guid = New System.Guid(cmd.Guid)
shell.PostExecCommand(guid, cmd.ID, 0, arg)
代码在Visual Commander中工作。要从Visual Studio宏IDE运行它,您需要添加对
的引用Microsoft.VisualStudio.OLE.Interop.dll
Microsoft.VisualStudio.Shell.10.0.dll
Microsoft.VisualStudio.Shell.Interop.dll
Microsoft.VisualStudio.Shell.Interop.8.0.dll
Microsoft.VisualStudio.Shell.Interop.9.0.dll
要添加引用,首先需要将这些文件复制到Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies directory。