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)
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;
622 ThreadQueue->
QF_flags &= ~QF_FOCUSNULLSINCEACTIVE;
633 if (!pWnd || ThreadQueue == pWnd->
head.pti->MessageQueue)
692 if (
Message->dwQEvent == EventLast)
718 pti->
TIF_flags &= ~TIF_ALLOWFOREGROUNDACTIVATE;
724 ppi->W32PF_flags &= ~W32PF_ALLOWFOREGROUNDACTIVATE;
789 ptiChg = Wnd->head.pti;
813 pumq = pti ? pti->MessageQueue :
NULL;
818 if ( pumq != pumqPrev )
840 pumq = pti ? pti->MessageQueue :
NULL;
896 pumq = pti ? pti->MessageQueue :
NULL;
898 if ( pumqPrev && pumq == pumqPrev )
936 TRACE(
"SetForegroundAndFocusWindow(%x, %s)\n",
hWnd, (MouseActivate ?
"TRUE" :
"FALSE"));
941 if (Wnd && PrevForegroundQueue)
943 if (Wnd->head.pti->MessageQueue == PrevForegroundQueue)
951 else if (Wnd->head.pti->MessageQueue->spwndActive == Wnd)
987 if (!Wnd)
return FALSE;
997 else if (Wnd->head.pti->MessageQueue->spwndActive == Wnd)
999 TRACE(
"Same Active and Wnd.\n");
1032 PWND pWndChg, WndPrev;
1042 ASSERT(ThreadQueue != 0);
1061 if ( ThreadQueue != Wnd->head.pti->MessageQueue )
1073 if ( Wnd == pWndChg )
1086 ERR(
"SetActiveWindow: WH_CBT Call Hook return!\n");
1090 ThreadQueue->
QF_flags &= ~QF_EVENTDEACTIVATEREMOVED;
1111 pWndChg != WndPrev ||
1115 ERR(
"SetActiveWindow: Summary ERROR, active state changed!\n");
1119 if (!WndPrev) ThreadQueue->
QF_flags &= ~QF_FOCUSNULLSINCEACTIVE;
1153 pti->
TIF_flags &= ~TIF_INACTIVATEAPPMSG;
1160 Wnd->state &= ~WNDS_BEINGACTIVATED;
1187 ASSERT(ThreadQueue != 0);
1191 BOOL Ret, DoFG, AllowFG;
1193 if (ThreadQueue == Wnd->head.pti->MessageQueue)
1240 pti->
TIF_flags &= ~TIF_ALLOWFOREGROUNDACTIVATE;
1252 TRACE(
"Mouse Active\n");
1283 TRACE(
"USAW: Previous active window\n");
1290 TRACE(
"USAW:PAW hwnd %p\n",Wnd?Wnd->head.h:
NULL);
1308 TRACE(
"USAW: Nothing\n");
1326 ASSERT(ThreadQueue != 0);
1336 return hWndPrev ? (
IntIsWindow(hWndPrev) ? hWndPrev : 0) : 0;
1339 if (
Window->head.pti->MessageQueue != ThreadQueue)
1341 ERR(
"SetFocus Must have the same Q!\n");
1356 ERR(
"SetFocus 1 WH_CBT Call Hook return!\n");
1373 ERR(
"SetFocus: Set Foreground and Focus Failed!\n");
1384 ERR(
"SetFocus: Set Active Failed!\n");
1394 ERR(
"SetFocus: Top window did not go active!\n");
1404 TRACE(
"Focus: %p -> %p\n", hWndPrev,
Window->head.h);
1410 ERR(
"SetFocus: 2 WH_CBT Call Hook return!\n");
1417 return hWndPrev ? (
IntIsWindow(hWndPrev) ? hWndPrev : 0) : 0;
1446 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;
1609 if (dwProcessId != ASFW_ANY)
1630 if (dwProcessId == ASFW_ANY)
1637 ERR(
"ptiLastInput is SET!!\n");
1652 TRACE(
"Enter NtUserGetForegroundWindow\n");
1658 TRACE(
"Leave NtUserGetForegroundWindow, ret=%p\n",_ret_);
1671 TRACE(
"Enter NtUserSetActiveWindow(%p)\n",
hWnd);
1679 ERR(
"NtUserSetActiveWindow: Invalid handle 0x%p!\n",
hWnd);
1697 TRACE(
"Leave NtUserSetActiveWindow, ret=%p\n",_ret_);
1710 TRACE(
"Enter NtUserSetCapture(%p)\n",
hWnd);
1716 TRACE(
"Leave NtUserSetCapture, ret=%p\n", _ret_);
1732 TRACE(
"Enter NtUserSetFocus(%p)\n",
hWnd);
1739 ERR(
"NtUserSetFocus: Invalid handle 0x%p!\n",
hWnd);
1755 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(a, b, c)
#define ExFreePoolWithTag(_P, _T)
VOID FASTCALL ClearMsgBitsMask(PTHREADINFO pti, UINT MessageBits)
VOID FASTCALL MsqDestroyMessage(PUSER_MESSAGE Message)
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)
#define DECLARE_RETURN(type)
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