引用TypeLib Information TLBINF32.DLLOption Explicit Private Sub Command1_Click() iterateMembers Text1 End Sub Sub iterateMembers(obj As Object) Dim TLI As New TLIApplication, ret As Variant Dim interface As InterfaceInfo Dim member As MemberInfo On Error Resume Next Set interface = TLI.InterfaceInfoFromObject(obj) Dim index As Long, tempstr As String ReDim str(interface.Members.Count) As String index = 0 For Each member In interface.Members tempstr = "" tempstr = tempstr & member.Name & vbTab & member.VTableOffset & vbTab & Hex$(member.MemberId) & _ vbTab & member.HelpString 'get property value; using memberID is faster than member.Name ret = TLI.InvokeHook(Text1, member.MemberId, INVOKE_PROPERTYGET) 'adjust long values; convert to hex (else shows neg value) If TypeName(ret) = "Long" Then ret = "&H" & Hex(ret) & "&" tempstr = tempstr & vbTab & ret & vbTab & "long" Else tempstr = tempstr & vbTab & ret & vbTab & TypeName(ret) End If 'store row data in array str(index) = tempstr index = index + 1 Next Set TLI = Nothing fillGrid str() End SubSub fillGrid(str() As String) Dim x As Long 'grid routine-------------------------------------------- MSFlexGrid1.Visible = False Me.MSFlexGrid1.Clear MSFlexGrid1.Rows = 1 'interface.Members.Count '6 data items;Property;Vtable;memberID;Helpstring;Value;Type MSFlexGrid1.Cols = 6 MSFlexGrid1.ColWidth(3) = 3080 MSFlexGrid1.ColWidth(4) = 1200 'setup fixed columm headers Me.MSFlexGrid1.TextArray(0 * 4 + 0) = "Property" Me.MSFlexGrid1.TextArray(0 * 4 + 1) = "VtableOffset" Me.MSFlexGrid1.TextArray(0 * 4 + 2) = "MemberID" Me.MSFlexGrid1.TextArray(0 * 4 + 3) = "Help String" Me.MSFlexGrid1.TextArray(0 * 4 + 4) = "Value" Me.MSFlexGrid1.TextArray(0 * 4 + 5) = "Type" 'from fixed row add item '_Default is repeated twice; x ->x-1; minor wrinkle For x = 1 To UBound(str()) - 1 'interface.Members.Count - 1 MSFlexGrid1.AddItem str(x), x Next x MSFlexGrid1.Visible = TrueEnd Sub Private Sub Command2_Click() iterateMembers Label1 End SubPrivate Sub Command3_Click() iterateMembers Command4 End SubPrivate Sub Command5_Click() iterateMembers Me.Check1 End SubPrivate Sub Command6_Click() iterateMembers Me.Option1 End SubPrivate Sub Command7_Click() iterateMembers Me.Combo1 End SubPrivate Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) MSFlexGrid1.ToolTipText = MSFlexGrid1.TextMatrix(MSFlexGrid1.MouseRow, MSFlexGrid1.MouseCol)End SubSub takestr(str() As String) Dim x As Long For x = 0 To UBound(str()) MsgBox str(x) Next End Sub
Private Sub Command1_Click()
iterateMembers Text1
End Sub
Sub iterateMembers(obj As Object)
Dim TLI As New TLIApplication, ret As Variant
Dim interface As InterfaceInfo
Dim member As MemberInfo On Error Resume Next
Set interface = TLI.InterfaceInfoFromObject(obj)
Dim index As Long, tempstr As String
ReDim str(interface.Members.Count) As String index = 0
For Each member In interface.Members
tempstr = ""
tempstr = tempstr & member.Name & vbTab & member.VTableOffset & vbTab & Hex$(member.MemberId) & _
vbTab & member.HelpString
'get property value; using memberID is faster than member.Name
ret = TLI.InvokeHook(Text1, member.MemberId, INVOKE_PROPERTYGET)
'adjust long values; convert to hex (else shows neg value)
If TypeName(ret) = "Long" Then
ret = "&H" & Hex(ret) & "&"
tempstr = tempstr & vbTab & ret & vbTab & "long"
Else
tempstr = tempstr & vbTab & ret & vbTab & TypeName(ret)
End If
'store row data in array
str(index) = tempstr
index = index + 1 Next Set TLI = Nothing
fillGrid str()
End SubSub fillGrid(str() As String)
Dim x As Long
'grid routine--------------------------------------------
MSFlexGrid1.Visible = False
Me.MSFlexGrid1.Clear
MSFlexGrid1.Rows = 1 'interface.Members.Count
'6 data items;Property;Vtable;memberID;Helpstring;Value;Type
MSFlexGrid1.Cols = 6
MSFlexGrid1.ColWidth(3) = 3080
MSFlexGrid1.ColWidth(4) = 1200
'setup fixed columm headers
Me.MSFlexGrid1.TextArray(0 * 4 + 0) = "Property"
Me.MSFlexGrid1.TextArray(0 * 4 + 1) = "VtableOffset"
Me.MSFlexGrid1.TextArray(0 * 4 + 2) = "MemberID"
Me.MSFlexGrid1.TextArray(0 * 4 + 3) = "Help String"
Me.MSFlexGrid1.TextArray(0 * 4 + 4) = "Value"
Me.MSFlexGrid1.TextArray(0 * 4 + 5) = "Type"
'from fixed row add item
'_Default is repeated twice; x ->x-1; minor wrinkle
For x = 1 To UBound(str()) - 1 'interface.Members.Count - 1
MSFlexGrid1.AddItem str(x), x
Next x
MSFlexGrid1.Visible = TrueEnd Sub
Private Sub Command2_Click()
iterateMembers Label1
End SubPrivate Sub Command3_Click()
iterateMembers Command4
End SubPrivate Sub Command5_Click()
iterateMembers Me.Check1
End SubPrivate Sub Command6_Click()
iterateMembers Me.Option1
End SubPrivate Sub Command7_Click()
iterateMembers Me.Combo1
End SubPrivate Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
MSFlexGrid1.ToolTipText = MSFlexGrid1.TextMatrix(MSFlexGrid1.MouseRow, MSFlexGrid1.MouseCol)End SubSub takestr(str() As String)
Dim x As Long
For x = 0 To UBound(str())
MsgBox str(x)
Next
End Sub