54 RECTL rclAnd, rclMonitor, rclWindow;
134 if (WndPrev &&
Clear)
139 ERR(
"Application is keeping itself Active to prevent the change!\n");
160 pti = pWnd->
head.pti;
198 TRACE(
"IDAW E : Nothing to do, Active is NULL! pti 0x%p tid 0x%p\n",pti,
tid);
202 TRACE(
"IDAW : pti 0x%p tid 0x%p\n",pti,
tid);
204 if (ptiCurrent != pti)
242 ptiPrev = pwndPrev->
head.pti;
246 if (InAAPM) pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
247 if (ptiCurrent != pti)
280 for (phWnd =
List; *phWnd; ++phWnd)
283 if ( cWindow && cWindow->
head.pti == ptiPrev )
304 if (InAAPM) pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
305 if (ptiCurrent != pti)
344 if (InAAPM) pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
345 if (ptiCurrent != pti)
419 pti->
TIF_flags &= ~TIF_ALLOWFOREGROUNDACTIVATE;
420 pti->
ppi->W32PF_flags &= ~W32PF_ALLOWFOREGROUNDACTIVATE;
439 ERR(
"MakeWindowActive Failed!\n");
461 pti->
MessageQueue->QF_flags &= ~QF_EVENTDEACTIVATEREMOVED;
495 HWND *phwndTopLevel, *phwndCurrent;
496 PWND pwndCurrent, pwndDesktop;
499 if (
Window->spwndParent == pwndDesktop )
502 phwndCurrent = phwndTopLevel;
521 ptiOld = WindowPrev ? WindowPrev->
head.pti :
NULL;
539 for (phWnd =
List; *phWnd; ++phWnd)
542 if (cWindow && cWindow->
head.pti == ptiOld)
551 ptiOld->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
558 for (phWnd =
List; *phWnd; ++phWnd)
561 if (cWindow && cWindow->
head.pti == ptiNew)
588 TRACE(
"Widow was minimized\n");
606 Window->state &= ~WNDS_NONCPAINT;
621 ThreadQueue->
QF_flags &= ~QF_FOCUSNULLSINCEACTIVE;
632 if (!pWnd || ThreadQueue == pWnd->
head.pti->MessageQueue)
691 if (
Message->dwQEvent == EventLast)
717 pti->
TIF_flags &= ~TIF_ALLOWFOREGROUNDACTIVATE;
723 ppi->W32PF_flags &= ~W32PF_ALLOWFOREGROUNDACTIVATE;
788 ptiChg = Wnd->head.pti;
812 pumq = pti ? pti->MessageQueue :
NULL;
817 if ( pumq != pumqPrev )
839 pumq = pti ? pti->MessageQueue :
NULL;
895 pumq = pti ? pti->MessageQueue :
NULL;
897 if ( pumqPrev && pumq == pumqPrev )
935 TRACE(
"SetForegroundAndFocusWindow(%x, %s)\n",
hWnd, (MouseActivate ?
"TRUE" :
"FALSE"));
940 if (Wnd && PrevForegroundQueue)
942 if (Wnd->head.pti->MessageQueue == PrevForegroundQueue)
950 else if (Wnd->head.pti->MessageQueue->spwndActive == Wnd)
986 if (!Wnd)
return FALSE;
996 else if (Wnd->head.pti->MessageQueue->spwndActive == Wnd)
998 TRACE(
"Same Active and Wnd.\n");
1031 PWND pWndChg, WndPrev;
1041 ASSERT(ThreadQueue != 0);
1060 if ( ThreadQueue != Wnd->head.pti->MessageQueue )
1072 if ( Wnd == pWndChg )
1085 ERR(
"SetActiveWindow: WH_CBT Call Hook return!\n");
1089 ThreadQueue->
QF_flags &= ~QF_EVENTDEACTIVATEREMOVED;
1110 pWndChg != WndPrev ||
1114 ERR(
"SetActiveWindow: Summary ERROR, active state changed!\n");
1118 if (!WndPrev) ThreadQueue->
QF_flags &= ~QF_FOCUSNULLSINCEACTIVE;
1152 pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
1159 Wnd->state &= ~WNDS_BEINGACTIVATED;
1186 ASSERT(ThreadQueue != 0);
1190 BOOL Ret, DoFG, AllowFG;
1192 if (ThreadQueue == Wnd->head.pti->MessageQueue)
1239 pti->
TIF_flags &= ~TIF_ALLOWFOREGROUNDACTIVATE;
1251 TRACE(
"Mouse Active\n");
1281 TRACE(
"USAW: Previous active window\n");
1306 TRACE(
"USAW: Nothing\n");
1323 ASSERT(ThreadQueue != 0);
1333 return hWndPrev ? (
IntIsWindow(hWndPrev) ? hWndPrev : 0) : 0;
1336 if (
Window->head.pti->MessageQueue != ThreadQueue)
1338 ERR(
"SetFocus Must have the same Q!\n");
1353 ERR(
"SetFocus 1 WH_CBT Call Hook return!\n");
1370 ERR(
"SetFocus: Set Foreground and Focus Failed!\n");
1381 ERR(
"SetFocus: Set Active Failed!\n");
1391 ERR(
"SetFocus: Top window did not go active!\n");
1407 ERR(
"SetFocus: 2 WH_CBT Call Hook return!\n");
1414 return hWndPrev ? (
IntIsWindow(hWndPrev) ? hWndPrev : 0) : 0;
1421 if (!ForegroundQueue)
1442 TRACE(
"Enter IntGetCapture\n");
1448 TRACE(
"Leave IntGetCapture, ret=%p\n", Ret);
1468 if (
Window->head.pti->MessageQueue != ThreadQueue)
1470 ERR(
"Window Thread does not match Current!\n");
1497 ThreadQueue->
QF_flags &= ~QF_CAPTURELOCKED;
1632 ERR(
"ptiLastInput is SET!!\n");
1647 TRACE(
"Enter NtUserGetForegroundWindow\n");
1652 TRACE(
"Leave NtUserGetForegroundWindow, ret=%p\n", Ret);
1665 TRACE(
"Enter NtUserSetActiveWindow(%p)\n",
hWnd);
1673 ERR(
"NtUserSetActiveWindow: Invalid handle 0x%p!\n",
hWnd);
1690 TRACE(
"Leave NtUserSetActiveWindow, ret=%p\n", Ret);
1703 TRACE(
"Enter NtUserSetCapture(%p)\n",
hWnd);
1708 TRACE(
"Leave NtUserSetCapture, ret=%p\n", Ret);
1723 TRACE(
"Enter NtUserSetFocus(%p)\n",
hWnd);
1730 ERR(
"NtUserSetFocus: Invalid handle 0x%p!\n",
hWnd);
1744 TRACE(
"Leave NtUserSetFocus, ret=%p\n",
ret);
#define UlongToHandle(ul)
#define DBG_DEFAULT_CHANNEL(ch)
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
#define ERROR_ACCESS_DENIED
static const WCHAR Message[]
HWND APIENTRY NtUserSetActiveWindow(HWND hWnd)
BOOL FASTCALL co_IntMouseActivateWindow(PWND Wnd)
BOOL FASTCALL FindRemoveEventMsg(PTHREADINFO pti, DWORD Event, DWORD EventLast)
BOOL FASTCALL IntDeactivateWindow(PTHREADINFO pti, HANDLE tid)
BOOL FASTCALL IntLockSetForegroundWindow(UINT uLockCode)
HWND APIENTRY NtUserSetCapture(HWND hWnd)
BOOL FASTCALL CanForceFG(PPROCESSINFO ppi)
BOOL FASTCALL co_IntSendDeactivateMessages(HWND hWndPrev, HWND hWnd, BOOL Clear)
BOOL FASTCALL IntAllowSetForegroundWindow(DWORD dwProcessId)
VOID FASTCALL IntActivateWindow(PWND Wnd, PTHREADINFO pti, HANDLE tid, DWORD Type)
HWND FASTCALL IntGetThreadFocusWindow(VOID)
HWND FASTCALL co_UserSetFocus(PWND Window)
BOOL FASTCALL ToggleFGActivate(PTHREADINFO pti)
BOOL FASTCALL IntCheckFullscreen(PWND Window)
BOOL FASTCALL UserSetActiveWindow(_In_opt_ PWND Wnd)
HWND FASTCALL IntGetCaptureWindow(VOID)
BOOL FASTCALL co_IntSendActivateMessages(PWND WindowPrev, PWND Window, BOOL MouseActivate, BOOL Async)
BOOL FASTCALL IsFGLocked(VOID)
PUSER_MESSAGE_QUEUE gpqForeground
BOOL FASTCALL IsAllowedFGActive(PTHREADINFO pti, PWND Wnd)
BOOL FASTCALL co_IntMakeWindowActive(PWND Window)
PTHREADINFO gptiForeground
BOOL FASTCALL IntIsWindowFullscreen(PWND Window)
HWND APIENTRY NtUserGetForegroundWindow(VOID)
HWND FASTCALL co_UserSetCapture(HWND hWnd)
HWND APIENTRY IntGetCapture(VOID)
VOID FASTCALL UpdateShellHook(PWND Window)
VOID FASTCALL IntSendFocusMessages(PTHREADINFO pti, PWND pWnd)
BOOL FASTCALL co_IntSetForegroundWindow(PWND Window)
BOOL FASTCALL co_IntSetForegroundMessageQueue(_In_opt_ PWND Wnd, _In_ PTHREADINFO pti, _In_ BOOL MouseActivate, _In_ DWORD Type)
BOOL FASTCALL IntReleaseCapture(VOID)
BOOL FASTCALL co_IntSetForegroundWindowMouse(PWND Window)
HWND APIENTRY NtUserSetFocus(HWND hWnd)
BOOL FASTCALL co_IntSetActiveWindow(_In_ PWND Wnd, _In_ BOOL bMouse, _In_ BOOL bFocus, _In_ BOOL Async)
HWND FASTCALL UserGetActiveWindow(VOID)
static BOOL FASTCALL co_IntSetForegroundAndFocusWindow(_In_opt_ PWND Wnd, _In_ BOOL MouseActivate, _In_ BOOL bFlash)
VOID IntFocusSetInputContext(PWND pWnd, BOOL bActivate, BOOL bCallback)
PUSER_MESSAGE_QUEUE gpqForegroundPrev
HWND FASTCALL UserGetForegroundWindow(VOID)
BOOL FASTCALL IntUserSetActiveWindow(_In_ PWND Wnd, _In_ BOOL bMouse, _In_ BOOL bFocus, _In_ BOOL Async)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
#define IMS_IMEDEACTIVATE
#define WNDS_BEINGACTIVATED
#define PUSIF_PALETTEDISPLAY
#define UserHMGetHandle(obj)
#define MSQ_STATE_MOVESIZE
#define MSQ_STATE_CAPTURE
#define TIF_INACTIVATEAPPMSG
#define MSQ_STATE_MENUOWNER
#define TIF_ALLOWFOREGROUNDACTIVATE
#define RtlEqualMemory(dst, src, len)
#define ExFreePoolWithTag(_P, _T)
VOID FASTCALL ClearMsgBitsMask(PTHREADINFO pti, UINT MessageBits)
VOID FASTCALL MsqDestroyMessage(PUSER_MESSAGE Message)
VOID FASTCALL MsqReleaseModifierKeys(PUSER_MESSAGE_QUEUE MessageQueue)
HWND FASTCALL MsqSetStateWindow(PTHREADINFO pti, ULONG Type, HWND hWnd)
VOID FASTCALL co_MsqInsertMouseMessage(MSG *Msg, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Hook)
VOID FASTCALL MsqPostMessage(PTHREADINFO pti, MSG *Msg, BOOLEAN HardwareMessage, DWORD MessageBits, DWORD dwQEvent, LONG_PTR ExtraInfo)
#define QF_ACTIVATIONCHANGE
#define QF_EVENTDEACTIVATEREMOVED
@ WM_ASYNC_SETACTIVEWINDOW
#define QF_FOCUSNULLSINCEACTIVE
PVOID NTAPI PsGetProcessWin32Process(PEPROCESS Process)
NTSTATUS NTAPI PsLookupProcessByProcessId(IN HANDLE ProcessId, OUT PEPROCESS *Process)
PVOID NTAPI PsGetCurrentProcessWin32Process(VOID)
HANDLE NTAPI PsGetThreadId(IN PETHREAD Thread)
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
LRESULT APIENTRY co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
VOID FASTCALL co_WinPosActivateOtherWindow(PWND Wnd)
BOOLEAN FASTCALL co_WinPosSetWindowPos(PWND Window, HWND WndInsertAfter, INT x, INT y, INT cx, INT cy, UINT flags)
BOOL FASTCALL ActivateOtherWindowMin(PWND Wnd)
BOOL FASTCALL IntGetWindowRect(PWND Wnd, RECTL *Rect)
PPROCESSINFO gppiInputProvider
VOID FASTCALL UserLeave(VOID)
VOID FASTCALL UserEnterExclusive(VOID)
static __inline VOID UserDerefObjectCo(PVOID obj)
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
struct _LIST_ENTRY * Flink
LIST_ENTRY PostedMessagesListHead
struct _WND * spwndDefaultIme
struct _USER_MESSAGE_QUEUE * MessageQueue
struct _WND * spwndParent
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define CONTAINING_RECORD(address, type, field)
PWND FASTCALL UserGetWindowObject(HWND hWnd)
#define ASSERT_REFS_CO(_obj_)
_Must_inspect_result_ _In_ WDFCMRESLIST List
#define IntDereferenceThreadInfo(pti)
#define W32PF_ALLOWFOREGROUNDACTIVATE
#define IntReferenceThreadInfo(pti)
#define W32PF_SETFOREGROUNDALLOWED
BOOL FASTCALL RECTL_bIntersectRect(_Out_ RECTL *prclDst, _In_ const RECTL *prcl1, _In_ const RECTL *prcl2)
FORCEINLINE VOID RECTL_vSetRect(_Out_ RECTL *prcl, _In_ LONG left, _In_ LONG top, _In_ LONG right, _In_ LONG bottom)
#define ValidateHwndNoErr(hwnd)
PWND FASTCALL UserGetDesktopWindow(VOID)
VOID FASTCALL IntSetFocusMessageQueue(PUSER_MESSAGE_QUEUE NewQueue)
PUSER_MESSAGE_QUEUE FASTCALL IntGetFocusMessageQueue(VOID)
VOID co_IntShellHookNotify(WPARAM Message, WPARAM wParam, LPARAM lParam)
PDESKTOP gpdeskInputDesktop
PWND FASTCALL co_GetDesktopWindow(PWND pWnd)
VOID FASTCALL IntNotifyWinEvent(DWORD Event, PWND pWnd, LONG idObject, LONG idChild, DWORD flags)
PPROCESSINFO ppiScrnSaver
LRESULT FASTCALL co_IntSendMessageWithCallBack(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, SENDASYNCPROC CompletionCallback, ULONG_PTR CompletionCallbackContext, ULONG_PTR *uResult)
BOOL FASTCALL UserSendNotifyMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
LONG NTAPI UserGetSystemMetrics(ULONG Index)
PMONITOR NTAPI UserGetPrimaryMonitor(VOID)
HWND *FASTCALL IntWinListChildren(PWND Window)
PWND FASTCALL VerifyWnd(PWND pWnd)
BOOL FASTCALL IntIsWindow(HWND hWnd)
BOOL FASTCALL IntIsWindowVisible(PWND Wnd)
PWND FASTCALL IntGetNonChildAncestor(PWND pWnd)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
#define IS_WND_IMELIKE(pWnd)
#define IntGetWndThreadId(WndObj)
static VOID WndSetLastActive(_Inout_ PWND pwnd, _In_opt_ PWND pwndLastActive)
#define WM_QUERYNEWPALETTE
#define HSHELL_RUDEAPPACTIVATED
#define WM_CAPTURECHANGED
#define WM_PALETTEISCHANGING
#define ObDereferenceObject