Tipp 0099 Childfenster von Fremdanwendungen überwachen
Autor/Einsender:
Datum:
  Elmar Leinen
12.07.2001
Entwicklungsumgebung:   VB 5
Mit FindWindow, z.B. in Kombination mit GetWindowText ist es möglich, Informationen über das (Haupt-)Fenster von Fremd-Programmen zu bekommen.
Möchte man jedoch ein Childfenster (z.B. anhand seines Klassennamens) überwachen und evtl. Text-Inhalte dieses Fensters ermitteln, ist es nötig, auf EnumChildWindows zu zugreifen. Der Klassenname des Childfensters/Hauptfensters muss allerdings vorher mit einem ClasSpy-Programm bestimmt werden, also bekannt sein.
Mit dem folgenden Beispiel kann man die Statusleiste (Klassenname = "msctls_statusbar32"!) im MS-Internet Explorer (IE Klassenname = "IEFrame") überwachen. So erfährt man den momentanen Status des Internet Explorers - z. B. über welchem Link momentan der Mauszeiger steht, ob die Seite fertiggeladen wurde, usw.
Code im Codebereich des Moduls
 
Option Explicit

Declare Function EnumChildWindows Lib "user32" (ByVal _
    hWndParent As Long, ByVal lpEnumFunc As Long, ByVal _
    lParam As Long) As Long

Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam _
    As Long, lParam As Any) As Long

Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
    (ByVal hwnd As Long, ByVal lpClassName As String, ByVal _
    nMaxCount As Long) As Long

Const WM_GETTEXT = &HD

Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam _
    As Long) As Long
  Dim a As String, b As String, g As String, l As Long

  a = Space$(128)
  l = GetClassName(hwnd, a, 128)
  g = Left(a, l)
  l = SendMessage(hwnd, WM_GETTEXT, 128, ByVal a)

  If g = "msctls_statusbar32" Then _
         Form1.Label1.Caption = Left(a, l)

  EnumChildProc = 1
End Function
 
Code im Codebereich der Form
 
Option Explicit

Private Declare Function FindWindow Lib "user32" Alias _
    "FindWindowA" (ByVal lpClassName As String, ByVal _
    lpWindowName As String) As Long

Dim F As Long

Private Sub Form_Load()
  Me.AutoRedraw = True
  Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
  F = FindWindow("IEFrame", vbNullString)
  Label2.Caption = Str$(F)
  EnumChildWindows F, AddressOf EnumChildProc, ByVal 0&
End Sub
 
Weitere Links zum Thema
Fenster-Handle, -Titel und -Klassennamen ermitteln
Fenster-Handle mit dem Maus-Cursor ermitteln
Prozessende abwarten
Hinweis
Um dieses Beispiel ausführen zu können muss der Microsoft Internet Explorer ab Version 4 installiert sein.

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (3,2 kB) Downloads bisher: [ 2408 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Freitag, 19. August 2011