Microsoft KB Archive/97925

{|
 * width="100%"|

INFO: SetActiveWindow and SetForegroundWindow Clarification

 * }

Q97925

-

The information in this article applies to:


 * Microsoft Win32 Software Development Kit (SDK)

-

SUMMARY
By default, each thread has an independent input state (its own active window, its own focus window, and so forth). SetActiveWindow always logically sets a thread's active window state. To force a window to the foreground, however, use SetForegroundWindow. SetForegroundWindow activates a window and forces the window into the foreground. SetActiveWindow always activates, but it brings the active window into the foreground only if the thread is the foreground thread.

NOTE: If the target window was not created by the calling thread, the active window status of the calling thread is set to NULL, and the active window status of the thread that created the target window is set to the target window.

Applications can call AttachThreadInput to allow a set of threads to share the same input state. By sharing input state, the threads share their concept of the active window. By doing this, one thread can always activate another thread's window. This function is also useful for sharing focus state, mouse capture state, keyboard state, and window Z-order state among windows created by different threads whose input state is shared.

MORE INFORMATION
On Windows 98 and Windows 2000, SetForegroundWindow is subject to limitations. On Windows 98, if a nonforeground thread calls SetForegroundWindow, passing the handle of a window that was not created by the calling thread, the window is not flashed on the taskbar.

If an application requires that SetForegroundWindow behave the same on all platforms, the foreground lock timeout value should be changed when the application is installed. This can be done from the setup or installation application with the following function call:

SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE); This method allows SetForegroundWindow on Windows 98 and Windows 2000 to behave the same as Windows 95 and Windows NT 4, respectively, for all applications. The setup application should warn the user that this is being done so that the user isn't surprised by the changed behavior.

On Windows 2000, the SystemParametersInfo call fails unless the calling thread has can change the foreground window, so this must be called from a setup or patch application.

Additional query words:

Keywords : kbOSWinNT kbOSWin2000 kbSDKWin32 kbGrpDSUser kbOSWin kbWndw

Issue type : kbinfo

Technology : kbWin32SDKSearch kbAudDeveloper kbSDKSearch kbWin32sSearch