INFO: SetActiveWindow() and SetForegroundWindow() Clarification

ID: Q97925


The information in this article applies to:
  • Microsoft Win32 Software Development Kit (SDK)
  • Microsoft Windows 2000


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 : kbNTOS kbWinOS2000 kbSDKWin32 kbGrpUser kbWinOS kbWndw
Version : WINDOWS:
Platform : WINDOWS
Issue type : kbinfo


Last Reviewed: January 25, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.