Focus in Fenster setzen, Problem mit WM_ACTIVATEAPP

24/11/2007 - 18:35 von Jens Müller | Report spam
Hallo,

es ist nötig, den Focus in ein Fenster zu setzen, wenn die Maus darüber
bewegt wird.

Dazu benutze ich untenstehende Funktion.

Der Focus wird richtig gesetzt, Texteingaben gelangen in das Fenster.
Problem dieser Funktion ist nun, dass beim spàteren Deaktivieren des
Fensters nicht wie üblich eine WM_ACTIVATEAPP mit wParam = 0 gesendet
wird, als Nachricht, dass das Fenster deaktiviert wurde.
Diese Benachrichtigung brauche ich aber.

Ich habe mal versuche WM_ACTIVATEAPP mit wParam = 1 und dem alten
Fenster im lParam an das neue Fenster zu senden, aber auch das half
nicht.

Habt Ihr eine Idee, vielleicht auch bezüglich einer besseren
ForceForegroundWindow-Funktion, da das ja doch ein etwas seltsamer
"hack" ist.

Grüße,
Jens

Public Function ForceForegroundWindow(ByVal hWnd As Long) As Boolean

Dim ThreadID1 As Long
Dim ThreadID2 As Long
Dim nRet As Long

' Nothing to do if already in foreground
If hWnd = GetForegroundWindow() Or hWnd = 0 Then
ForceForegroundWindow = True
Else

' First need to get the thread responsible for this window,
' and the thread for the foreground window.

ThreadID1 = GetWindowThreadProcessId(GetForegroundWindow, ByVal
0&)
ThreadID2 = GetWindowThreadProcessId(hWnd, ByVal 0&)

' By sharing input state, threads share their concept of
' the active window.

If ThreadID1 <> ThreadID2 Then
Call AttachThreadInput(ThreadID1, ThreadID2, True)
nRet = SetForegroundWindow(hWnd)
Call AttachThreadInput(ThreadID1, ThreadID2, False)
Else
nRet = SetForegroundWindow(hWnd)
End If

' Restore and repaint
If Not IsIconic(hWnd) Then
Call ShowWindow(hWnd, SW_SHOW)
End If

ForceForegroundWindow = CBool(nRet)
End If
End Function
 

Lesen sie die antworten

#1 Thorsten Albers
25/11/2007 - 19:51 | Warnen spam
Jens Müller schrieb im Beitrag
...
Der Focus wird richtig gesetzt, Texteingaben gelangen in das Fenster.
Problem dieser Funktion ist nun, dass beim spàteren Deaktivieren des
Fensters nicht wie üblich eine WM_ACTIVATEAPP mit wParam = 0 gesendet
wird, als Nachricht, dass das Fenster deaktiviert wurde.
Diese Benachrichtigung brauche ich aber.



Kommt vielleicht ein WM_ACTIVATE statt WM_ACTIVATEAPP?

-
THORSTEN ALBERS Universitàt Freiburg
albers@
uni-freiburg.de
-

Ähnliche fragen