55 RECTL rclAnd, rclMonitor, rclWindow;
135 if (WndPrev &&
Clear)
140 ERR(
"Application is keeping itself Active to prevent the change!\n");
162 pti = pWnd->
head.pti;
201 TRACE(
"IDAW E : Nothing to do, Active is NULL! pti 0x%p tid 0x%p\n",pti,
tid);
205 TRACE(
"IDAW : pti 0x%p tid 0x%p\n",pti,
tid);
207 if (ptiCurrent != pti)
245 ptiPrev = pwndPrev->
head.pti;
249 if (InAAPM) pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
250 if (ptiCurrent != pti)
283 for (phWnd =
List; *phWnd; ++phWnd)
286 if ( cWindow && cWindow->
head.pti == ptiPrev )
307 if (InAAPM) pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
308 if (ptiCurrent != pti)
347 if (InAAPM) pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
348 if (ptiCurrent != pti)
422 pti->
TIF_flags &= ~TIF_ALLOWFOREGROUNDACTIVATE;
423 pti->
ppi->W32PF_flags &= ~W32PF_ALLOWFOREGROUNDACTIVATE;
442 ERR(
"MakeWindowActive Failed!\n");
464 pti->
MessageQueue->QF_flags &= ~QF_EVENTDEACTIVATEREMOVED;
498 HWND *phwndTopLevel, *phwndCurrent;
499 PWND pwndCurrent, pwndDesktop;
502 if (
Window->spwndParent == pwndDesktop )
505 phwndCurrent = phwndTopLevel;
524 ptiOld = WindowPrev ? WindowPrev->
head.pti :
NULL;
542 for (phWnd =
List; *phWnd; ++phWnd)
545 if (cWindow && cWindow->
head.pti == ptiOld)
554 ptiOld->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
561 for (phWnd =
List; *phWnd; ++phWnd)
564 if (cWindow && cWindow->
head.pti == ptiNew)
591 TRACE(
"Widow was minimized\n");
609 Window->state &= ~WNDS_NONCPAINT;
625 ThreadQueue->
QF_flags &= ~QF_FOCUSNULLSINCEACTIVE;
636 if (!pWnd || ThreadQueue == pWnd->
head.pti->MessageQueue)
695 if (
Message->dwQEvent == EventLast)
721 pti->
TIF_flags &= ~TIF_ALLOWFOREGROUNDACTIVATE;
727 ppi->W32PF_flags &= ~W32PF_ALLOWFOREGROUNDACTIVATE;
792 ptiChg = Wnd->head.pti;
816 pumq = pti ? pti->MessageQueue :
NULL;
821 if ( pumq != pumqPrev )
843 pumq = pti ? pti->MessageQueue :
NULL;
899 pumq = pti ? pti->MessageQueue :
NULL;
901 if ( pumqPrev && pumq == pumqPrev )
939 TRACE(
"SetForegroundAndFocusWindow(%x, %s)\n",
hWnd, (MouseActivate ?
"TRUE" :
"FALSE"));
944 if (Wnd && PrevForegroundQueue)
946 if (Wnd->head.pti->MessageQueue == PrevForegroundQueue)
954 else if (Wnd->head.pti->MessageQueue->spwndActive == Wnd)
990 if (!Wnd)
return FALSE;
1000 else if (Wnd->head.pti->MessageQueue->spwndActive == Wnd)
1002 TRACE(
"Same Active and Wnd.\n");
1035 PWND pWndChg, WndPrev;
1045 ASSERT(ThreadQueue != 0);
1064 if ( ThreadQueue != Wnd->head.pti->MessageQueue )
1076 if ( Wnd == pWndChg )
1089 ERR(
"SetActiveWindow: WH_CBT Call Hook return!\n");
1093 ThreadQueue->
QF_flags &= ~QF_EVENTDEACTIVATEREMOVED;
1114 pWndChg != WndPrev ||
1118 ERR(
"SetActiveWindow: Summary ERROR, active state changed!\n");
1122 if (!WndPrev) ThreadQueue->
QF_flags &= ~QF_FOCUSNULLSINCEACTIVE;
1156 pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
1163 Wnd->state &= ~WNDS_BEINGACTIVATED;
1190 ASSERT(ThreadQueue != 0);
1194 BOOL Ret, DoFG, AllowFG;
1196 if (ThreadQueue == Wnd->head.pti->MessageQueue)
1243 pti->
TIF_flags &= ~TIF_ALLOWFOREGROUNDACTIVATE;
1255 TRACE(
"Mouse Active\n");
1286 TRACE(
"USAW: Previous active window\n");
1311 TRACE(
"USAW: Nothing\n");
1329 ASSERT(ThreadQueue != 0);
1339 return hWndPrev ? (
IntIsWindow(hWndPrev) ? hWndPrev : 0) : 0;
1342 if (
Window->head.pti->MessageQueue != ThreadQueue)
1344 ERR(
"SetFocus Must have the same Q!\n");
1359 ERR(
"SetFocus 1 WH_CBT Call Hook return!\n");
1376 ERR(
"SetFocus: Set Foreground and Focus Failed!\n");
1387 ERR(
"SetFocus: Set Active Failed!\n");
1397 ERR(
"SetFocus: Top window did not go active!\n");
1413 ERR(
"SetFocus: 2 WH_CBT Call Hook return!\n");
1420 return hWndPrev ? (
IntIsWindow(hWndPrev) ? hWndPrev : 0) : 0;
1449 TRACE(
"Enter IntGetCapture\n");
1455 TRACE(
"Leave IntGetCapture, ret=%p\n", Ret);
1475 if (
Window->head.pti->MessageQueue != ThreadQueue)
1477 ERR(
"Window Thread does not match Current!\n");
1504 ThreadQueue->
QF_flags &= ~QF_CAPTURELOCKED;
1611 if (dwProcessId != ASFW_ANY)
1632 if (dwProcessId == ASFW_ANY)
1639 ERR(
"ptiLastInput is SET!!\n");
1654 TRACE(
"Enter NtUserGetForegroundWindow\n");
1659 TRACE(
"Leave NtUserGetForegroundWindow, ret=%p\n", Ret);
1672 TRACE(
"Enter NtUserSetActiveWindow(%p)\n",
hWnd);
1680 ERR(
"NtUserSetActiveWindow: Invalid handle 0x%p!\n",
hWnd);
1697 TRACE(
"Leave NtUserSetActiveWindow, ret=%p\n", Ret);
1710 TRACE(
"Enter NtUserSetCapture(%p)\n",
hWnd);
1715 TRACE(
"Leave NtUserSetCapture, ret=%p\n", Ret);
1730 TRACE(
"Enter NtUserSetFocus(%p)\n",
hWnd);
1737 ERR(
"NtUserSetFocus: Invalid handle 0x%p!\n",
hWnd);
1751 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
#define ValidateHwndNoErr(hwnd)
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)
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