Es kann schon von Interesse sein, zu wissen, ob das
eigene Programm auch das ist, mit dem der User gerade arbeitet, es also das aktive
Programm ist.
Zum Beispiel könnte man fortlaufende Programmaktionen beenden oder den Intervall
erweitern, wenn das Programm nicht das aktive ist, schaut sich die Auswertung ja keiner an
oder aber Sie senden ein Meldefenster oder oder oder, wie immer kann ich gar nicht so
schief um die Ecke denken, wie Sie das für sich einsetzbar machen.
Für unser Demoprojekt bauen Sie auf eine Form ein Labelobjekt (Label1) und einen Timer
(Timer1).
Geben sie nun folgenden Code in die entsprechenden Events.
Allgemein/Deklarationen
Private Declare Function GetForegroundWindow Lib "user32" () 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 Declare Function GetWindowTextLength Lib "user32" Alias
"GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Allgemein/GetFGWTitle
Private Function GetFGWTitle() As String Dim
lngHWnd As Long, lngTextLen As Long
Dim strBuffer As String
'Handle des aktiven Fensters
lngHWnd = GetForegroundWindow()
lngTextLen = GetWindowTextLength(lngHWnd)
strBuffer = String$(lngTextLen + 1, 0)
lngTextLen = GetWindowText(lngHWnd, strBuffer, Len(strBuffer))
strBuffer = Left$(strBuffer, lngTextLen)
GetFGWTitle = strBuffer
End Function
Timer1_Timer
If GetFGWTitle() = "VB-Homepage" Then
'Text
Modifizieren
Label1.Caption = "Hurra ich bin das aktive Fenster"
Else
Label1.Caption = "Warum arbeitet den keiner mit mir."
End If
Das ganze Geheimnis liegt im Ermitteln des
Titelleistentextes der aktiven Anwendung. Liegt dieser vor, so muß er nur noch mit dem
Titelleistentext der eigenen Anwendung verglichen werden um zu wissen, ob das eigene
Programm das aktive ist, also den Focus besitzt. |