如何:使用外接程序控制宏

Visual Studio 自动化模型中的 Macros 对象为您提供了一种以编程方式对集成开发环境 (IDE) 中记录的宏进行控制的措施。 通过使用这种措施,您可以:

  • 暂停或继续宏记录器。

  • 将一个或多个代码行添加到正被记录的宏中。

  • 确定宏记录器当前是否正在记录宏。

还可以使用 ExecuteCommand 方法直接对 IDE 发出命令,例如创建新文件。

提示

Macros 对象成员不是为在宏中使用而设计的,只能在外接程序中使用这些对象成员。

下面的 Visual Basic 示例演示如何引用和使用宏自动化模型的各种成员。

提示

显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。 这些过程是在“常规开发设置”处于活动状态时开发的。 若要更改设置,请在“工具”菜单上选择“导入和导出设置”。 有关更多信息,请参见 使用设置

示例

下面的示例检查当前是否正在记录宏。 如果是,该示例就会在其中添加附加代码行。

Public Sub OnConnection(ByVal application As Object, _
  ByVal connectMode As ext_ConnectMode, ByVal addInInst _
  As Object, ByRef custom As Array) Implements _
  IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    macroTest(_applicationObject)
End Sub

Public Sub macroTest(ByVal dte As DTE2)
    Try
        Dim objMac As Macros = dte.Macros
        ' Determine if a macro is recording. If it is, 
        ' add a line of code to it and then let it resume 
        ' recording.
        If objMac.IsRecording = True Then
            objMac.EmitMacroCode _
              ("MsgBox(""This was added by code."")")
        Else
            MsgBox("Macro is not recording.")
        End If
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub
public void OnConnection(object application, ext_ConnectMode 
  connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    macroTest(_applicationObject);
}

public void macroTest(DTE2 dte)
{
    try
    {
        Macros objMac = dte.Macros;
        // Determine if a macro is recording. If it is, 
        // add a line of code to it and then let it resume 
        // recording.
        if (objMac.IsRecording == true)
        {
            objMac.EmitMacroCode(
              "MsgBox(\"This was added by code.\")");
        }
        else
        {
            System.Windows.Forms.MessageBox.Show(
              "Macro is not recording.");
        }
    }
    catch (Exception ex)
    {
        System.Windows.Forms.MessageBox.Show(ex.Message);
    }
}

如果您要记录一个宏并打开一个文本文件,则宏代码将如下所示:

Public Module RecordingModule
    Sub TemporaryMacro()
        DTE.ItemOperations.NewFile("General\Text File")
    End Sub
End Module

在运行代码示例和执行相同操作时,会产生一个附加代码行添加到宏代码中:

Public Module RecordingModule
    Sub TemporaryMacro()
        DTE.ItemOperations.NewFile("General\Text File")
        MsgBox("This line was added by code.")
    End Sub
End Module

请参见

任务

如何:更改窗口特性

如何:创建外接程序

演练:创建向导

概念

使用宏自动执行重复性操作

自动化对象模型图表

其他资源

创建和控制环境窗口

创建外接程序和向导

自动化与扩展性参考