54 RECTL rclAnd, rclMonitor, rclWindow;
134 if (WndPrev &&
Clear)
139 ERR(
"Application is keeping itself Active to prevent the change!\n");
161 pti = pWnd->
head.pti;
200 TRACE(
"IDAW E : Nothing to do, Active is NULL! pti 0x%p tid 0x%p\n",pti,
tid);
204 TRACE(
"IDAW : pti 0x%p tid 0x%p\n",pti,
tid);
206 if (ptiCurrent != pti)
244 ptiPrev = pwndPrev->
head.pti;
248 if (InAAPM) pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
249 if (ptiCurrent != pti)
282 for (phWnd =
List; *phWnd; ++phWnd)
285 if ( cWindow && cWindow->
head.pti == ptiPrev )
306 if (InAAPM) pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
307 if (ptiCurrent != pti)
346 if (InAAPM) pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
347 if (ptiCurrent != pti)
421 pti->
TIF_flags &= ~TIF_ALLOWFOREGROUNDACTIVATE;
422 pti->
ppi->W32PF_flags &= ~W32PF_ALLOWFOREGROUNDACTIVATE;
441 ERR(
"MakeWindowActive Failed!\n");
463 pti->
MessageQueue->QF_flags &= ~QF_EVENTDEACTIVATEREMOVED;
497 HWND *phwndTopLevel, *phwndCurrent;
498 PWND pwndCurrent, pwndDesktop;
501 if (
Window->spwndParent == pwndDesktop )
504 phwndCurrent = phwndTopLevel;
523 ptiOld = WindowPrev ? WindowPrev->
head.pti :
NULL;
541 for (phWnd =
List; *phWnd; ++phWnd)
544 if (cWindow && cWindow->
head.pti == ptiOld)
553 ptiOld->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
560 for (phWnd =
List; *phWnd; ++phWnd)
563 if (cWindow && cWindow->
head.pti == ptiNew)
590 TRACE(
"Widow was minimized\n");
608 Window->state &= ~WNDS_NONCPAINT;
624 ThreadQueue->
QF_flags &= ~QF_FOCUSNULLSINCEACTIVE;
635 if (!pWnd || ThreadQueue == pWnd->
head.pti->MessageQueue)
694 if (
Message->dwQEvent == EventLast)
720 pti->
TIF_flags &= ~TIF_ALLOWFOREGROUNDACTIVATE;
726 ppi->W32PF_flags &= ~W32PF_ALLOWFOREGROUNDACTIVATE;
791 ptiChg = Wnd->head.pti;
815 pumq = pti ? pti->MessageQueue :
NULL;
820 if ( pumq != pumqPrev )
842 pumq = pti ? pti->MessageQueue :
NULL;
898 pumq = pti ? pti->MessageQueue :
NULL;
900 if ( pumqPrev && pumq == pumqPrev )
938 TRACE(
"SetForegroundAndFocusWindow(%x, %s)\n",
hWnd, (MouseActivate ?
"TRUE" :
"FALSE"));
943 if (Wnd && PrevForegroundQueue)
945 if (Wnd->head.pti->MessageQueue == PrevForegroundQueue)
953 else if (Wnd->head.pti->MessageQueue->spwndActive == Wnd)
989 if (!Wnd)
return FALSE;
999 else if (Wnd->head.pti->MessageQueue->spwndActive == Wnd)
1001 TRACE(
"Same Active and Wnd.\n");
1034 PWND pWndChg, WndPrev;
1044 ASSERT(ThreadQueue != 0);
1063 if ( ThreadQueue != Wnd->head.pti->MessageQueue )
1075 if ( Wnd == pWndChg )
1088 ERR(
"SetActiveWindow: WH_CBT Call Hook return!\n");
1092 ThreadQueue->
QF_flags &= ~QF_EVENTDEACTIVATEREMOVED;
1113 pWndChg != WndPrev ||
1117 ERR(
"SetActiveWindow: Summary ERROR, active state changed!\n");
1121 if (!WndPrev) ThreadQueue->
QF_flags &= ~QF_FOCUSNULLSINCEACTIVE;
1155 pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
1162 Wnd->state &= ~WNDS_BEINGACTIVATED;
1189 ASSERT(ThreadQueue != 0);
1193 BOOL Ret, DoFG, AllowFG;
1195 if (ThreadQueue == Wnd->head.pti->MessageQueue)
1242 pti->
TIF_flags &= ~TIF_ALLOWFOREGROUNDACTIVATE;
1254 TRACE(
"Mouse Active\n");
1285 TRACE(
"USAW: Previous active window\n");
1310 TRACE(
"USAW: Nothing\n");
1328 ASSERT(ThreadQueue != 0);
1338 return hWndPrev ? (
IntIsWindow(hWndPrev) ? hWndPrev : 0) : 0;
1341 if (
Window->head.pti->MessageQueue != ThreadQueue)
1343 ERR(
"SetFocus Must have the same Q!\n");
1358 ERR(
"SetFocus 1 WH_CBT Call Hook return!\n");
1375 ERR(
"SetFocus: Set Foreground and Focus Failed!\n");
1386 ERR(
"SetFocus: Set Active Failed!\n");
1396 ERR(
"SetFocus: Top window did not go active!\n");
1412 ERR(
"SetFocus: 2 WH_CBT Call Hook return!\n");
1419 return hWndPrev ? (
IntIsWindow(hWndPrev) ? hWndPrev : 0) : 0;
1426 if (!ForegroundQueue)
1447 TRACE(
"Enter IntGetCapture\n");
1453 TRACE(
"Leave IntGetCapture, ret=%p\n", Ret);
1473 if (
Window->head.pti->MessageQueue != ThreadQueue)
1475 ERR(
"Window Thread does not match Current!\n");
1502 ThreadQueue->
QF_flags &= ~QF_CAPTURELOCKED;
1637 ERR(
"ptiLastInput is SET!!\n");
1652 TRACE(
"Enter NtUserGetForegroundWindow\n");
1657 TRACE(
"Leave NtUserGetForegroundWindow, ret=%p\n", Ret);
1670 TRACE(
"Enter NtUserSetActiveWindow(%p)\n",
hWnd);
1678 ERR(
"NtUserSetActiveWindow: Invalid handle 0x%p!\n",
hWnd);
1695 TRACE(
"Leave NtUserSetActiveWindow, ret=%p\n", Ret);
1708 TRACE(
"Enter NtUserSetCapture(%p)\n",
hWnd);
1713 TRACE(
"Leave NtUserSetCapture, ret=%p\n", Ret);
1728 TRACE(
"Enter NtUserSetFocus(%p)\n",
hWnd);
1735 ERR(
"NtUserSetFocus: Invalid handle 0x%p!\n",
hWnd);
1749 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)
base of all file and directory entries
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)
#define IS_WND_IMELIKE(pWnd)
#define IntGetWndThreadId(WndObj)
static VOID WndSetLastActive(_Inout_ PWND pwnd, _In_opt_ PWND pwndLastActive)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
#define WM_QUERYNEWPALETTE
#define HSHELL_RUDEAPPACTIVATED
#define WM_CAPTURECHANGED
#define WM_PALETTEISCHANGING
#define ObDereferenceObject