Very interesting code over at Florent Breheret's SeleniumBasic
This caught my eye.
Private Declare PtrSafe Function FindWindowExA Lib "user32.dll" ( _
ByVal hwndParent As LongPtr, _
ByVal hwndChildAfter As LongPtr, _
ByVal lpszClass As String, _
ByVal lpszWindow As String) As Long
Private Declare PtrSafe Function AccessibleObjectFromWindow Lib "oleacc.dll" ( _
ByVal hwnd As LongPtr, _
ByVal dwId As Long, _
ByRef riid As Any, _
ByRef ppvObject As IAccessible) As Long
''
' Returns all the active instances of Excel
''
Public Function GetExcelInstances() As Collection
Dim guid&(0 To 4), app As Object, hwnd
guid(0) = &H20400
guid(1) = &H0
guid(2) = &HC0
guid(3) = &H46000000
Set GetExcelInstances = New Collection
Do
hwnd = FindWindowExA(0, hwnd, "XLMAIN", vbNullString)
If hwnd = 0 Then Exit Do
hwnd = FindWindowExA(hwnd, 0, "XLDESK", vbNullString)
If hwnd Then
hwnd = FindWindowExA(hwnd, 0, "EXCEL7", vbNullString)
If hwnd Then
If AccessibleObjectFromWindow(hwnd, &HFFFFFFF0, guid(0), app) = 0 Then
GetExcelInstances.Add app.Application
End If
End If
End If
Loop
End Function
No comments:
Post a Comment