'Hallo...
'dieses Beispiel ermöglicht es den Acrobat Reader trotz wechselnder Klassennamen
'über einen Teil der Titelzeilenbeschriftung, die beim Acrobat Reader immer mit
'"Acrobat Reader" anfängt, auch wenn ein Dokument im Acrobat Reader geöffnet
' ist,
'zu schließen.
'Ist der Acrobat Reader nicht aktiv passiert in diesem Beispiel nichts, sonst
' wird
'der Acrobat Reader geschlossen.
'NG.: 06.02.03
'IN eine Form
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case Is = 0:
Dim lRet As Long
Call GetAcrobatReaderClassname(0, "*Acrobat*", "*")
Case Is = 1: Unload Me
End Select
End Sub
'IN ein Modul
Private Declare Function GetDesktopWindow Lib "user32" () _
As Long
Private Declare Function GetWindow Lib "user32" _
(ByVal hwnd As Long, _
ByVal wCmd As Long) _
As Long
Private Declare Function GetClassName Lib "user32" _
Alias "GetClassNameA" _
(ByVal hwnd As Long, _
ByVal lpClassName As String, _
ByVal nMaxCount As Long) _
As Long
Private Declare Function GetWindowText Lib "user32" _
Alias "GetWindowTextA" _
(ByVal hwnd As Long, _
ByVal lpString As String, _
ByVal cch As Long) _
As Long
Private Enum FindWnd
GW_HWNDNEXT = 2
GW_CHILD = 5
End Enum
Private Type ClassValue
sGetClass As String
sGetCaption As String
End Type
Private Const mBuffer = 255&
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" _
(ByVal sClassName As String, _
ByVal lpWindowName As String) _
As Long
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) _
As Long
Private Const WM_SYSCOMMAND = &H112
Private Const SC_CLOSE = &HF060
Public Sub GetAcrobatReaderClassname(ByVal lFirstHwnd As Long, _
sTitleName As String, _
sClass As String)
Static n As Long
Dim lHwnd As Long
Dim lRet As Long
Dim cv As ClassValue
If n = 0 Then '''
If lFirstHwnd = 0 Then lFirstHwnd = GetDesktopWindow()
End If
n = n + 1
lHwnd = GetWindow(lFirstHwnd, GW_CHILD)
Do Until lHwnd = 0
With cv
.sGetCaption = Space$(mBuffer)
lRet = GetWindowText(lHwnd, .sGetCaption, mBuffer)
.sGetCaption = Left(.sGetCaption, lRet)
.sGetClass = Space$(mBuffer)
lRet = GetClassName(lHwnd, .sGetClass, mBuffer)
.sGetClass = Left(.sGetClass, lRet)
If (.sGetCaption Like sTitleName) And (.sGetClass Like sClass) Then
Debug.Print lHwnd; cv.sGetClass
Dim hHandle As Long
hHandle = FindWindow(.sGetClass, vbNullString)
Debug.Print hHandle; " hHandle"
Call SendMessage(hHandle, WM_SYSCOMMAND, SC_CLOSE, 0&)
End If
End With
lHwnd = GetWindow(lHwnd, GW_HWNDNEXT)
Loop
n = n - 1
End Sub
'MfG
'Frank |