找出激活加载项的主机应用程序
Find out the host application in which Add-In was activated
IDE 加载项是在 VB6 中创建的,适用于 VB6、Excel、Access 等
查看 Application
& AddInInst
参数,传递给初始过程:
Private Sub AddinInstance_OnConnection( _
ByVal Application As Object, _
ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
ByVal AddInInst As Object, _
custom() As Variant)
我找不到任何明确的主机值。我在哪里可以找到主机的参考?
.
主机没有被 VBIDE object 模型显式公开,但是有很多方法可以获取对主机的引用:
检查 vbProject 的引用。宿主引用 通常 是项目的第二个引用。一旦知道引用的名称,就可以构建一个字符串以用于 GetObject
。问题是,如果没有加载 VBProject,或者项目被保护,这个方法将不起作用。
检查 VBE 的标准命令栏中第一个按钮的标题,在 Excel 的情况下是 "View Microsoft Excel (Alt+F11)"。一旦知道主机名,就可以构建一个字符串以用于 GetObject
使用 Properties collection of a vbComponent such as
ThisWorkbook` 来 return 应用程序的引用。此方法仅在项目具有 document-type vbComponent 时才有效。 PowerPoint 和 Access 等主机不一定具有 document-type 组件。此方法还要求至少有一个项目处于打开状态且不受保护:
Dim app As Excel.Application
Set app = _vbe.ActiveVBProject.VBComponents("ThisWorkbook").Properties("Parent").Object
使用辅助功能 (GetAccessibleObject
) 从 VBE 的 ProcessID(您可以从 VBE 的 Hwnd 获得)获取主机句柄。有关详细信息,请参阅下面的问题 link。
Rubberduck 不得不为 VBE 的 C# add-in 中的多个主机做同样的事情。查看 GitHub, and here and also this related issue
上的源代码
IDE 加载项是在 VB6 中创建的,适用于 VB6、Excel、Access 等
查看 Application
& AddInInst
参数,传递给初始过程:
Private Sub AddinInstance_OnConnection( _
ByVal Application As Object, _
ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
ByVal AddInInst As Object, _
custom() As Variant)
我找不到任何明确的主机值。我在哪里可以找到主机的参考?
.
主机没有被 VBIDE object 模型显式公开,但是有很多方法可以获取对主机的引用:
检查 vbProject 的引用。宿主引用 通常 是项目的第二个引用。一旦知道引用的名称,就可以构建一个字符串以用于
GetObject
。问题是,如果没有加载 VBProject,或者项目被保护,这个方法将不起作用。检查 VBE 的标准命令栏中第一个按钮的标题,在 Excel 的情况下是 "View Microsoft Excel (Alt+F11)"。一旦知道主机名,就可以构建一个字符串以用于
GetObject
使用
Properties collection of a vbComponent such as
ThisWorkbook` 来 return 应用程序的引用。此方法仅在项目具有 document-type vbComponent 时才有效。 PowerPoint 和 Access 等主机不一定具有 document-type 组件。此方法还要求至少有一个项目处于打开状态且不受保护:Dim app As Excel.Application Set app = _vbe.ActiveVBProject.VBComponents("ThisWorkbook").Properties("Parent").Object
使用辅助功能 (
GetAccessibleObject
) 从 VBE 的 ProcessID(您可以从 VBE 的 Hwnd 获得)获取主机句柄。有关详细信息,请参阅下面的问题 link。
Rubberduck 不得不为 VBE 的 C# add-in 中的多个主机做同样的事情。查看 GitHub, and here and also this related issue
上的源代码