[Win32SS]

- Add utility of setting and clearing the state bits from user space. Use this later.

svn path=/trunk/; revision=56663
This commit is contained in:
James Tabor 2012-05-28 04:49:15 +00:00
parent df4cb8e91f
commit 845ea709c3
5 changed files with 57 additions and 2 deletions

View file

@ -522,6 +522,8 @@ typedef struct _SBINFOEX
#define WNDS_MAXIMIZESTOMONITOR 0x40000000 #define WNDS_MAXIMIZESTOMONITOR 0x40000000
#define WNDS_DESTROYED 0x80000000 #define WNDS_DESTROYED 0x80000000
#define WNDSACTIVEFRAME 0x00000006
// State2 Flags !Not Implemented! // State2 Flags !Not Implemented!
#define WNDS2_WMPAINTSENT 0X00000001 #define WNDS2_WMPAINTSENT 0X00000001
#define WNDS2_ENDPAINTINVALIDATE 0X00000002 #define WNDS2_ENDPAINTINVALIDATE 0X00000002

View file

@ -569,9 +569,9 @@ NtUserCallHwndLock(
break; break;
case HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOW: case HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOW:
TRACE("co_IntSetForegroundWindow 1 %p\n",hWnd); ERR("co_IntSetForegroundWindow 1 %p\n",hWnd);
Ret = co_IntSetForegroundWindow(Window); Ret = co_IntSetForegroundWindow(Window);
TRACE("co_IntSetForegroundWindow 2 \n"); ERR("co_IntSetForegroundWindow 2 \n");
break; break;
case HWNDLOCK_ROUTINE_UPDATEWINDOW: case HWNDLOCK_ROUTINE_UPDATEWINDOW:
@ -749,6 +749,24 @@ NtUserCallHwndParam(
UserLeave(); UserLeave();
return 0; return 0;
} }
case HWNDPARAM_ROUTINE_CLEARWINDOWSTATE:
{
PWND pWnd;
UserEnterExclusive();
pWnd = UserGetWindowObject(hWnd);
if (pWnd) IntClearWindowState(pWnd, (UINT)Param);
UserLeave();
return 0;
}
case HWNDPARAM_ROUTINE_SETWINDOWSTATE:
{
PWND pWnd;
UserEnterExclusive();
pWnd = UserGetWindowObject(hWnd);
if (pWnd) IntSetWindowState(pWnd, (UINT)Param);
UserLeave();
return 0;
}
} }
STUB; STUB;

View file

@ -81,6 +81,9 @@ UserSystemParametersInfo(
PVOID pvParam, PVOID pvParam,
UINT fWinIni); UINT fWinIni);
VOID FASTCALL IntSetWindowState(PWND, UINT);
VOID FASTCALL IntClearWindowState(PWND, UINT);
/*************** MESSAGE.C ***************/ /*************** MESSAGE.C ***************/
BOOL FASTCALL BOOL FASTCALL

View file

@ -6,6 +6,8 @@
#error #error
#endif #endif
BOOL FASTCALL TestState(PWND, UINT);
EXTINLINE BOOL WINAPI EXTINLINE BOOL WINAPI
GetScrollBarInfo(HWND hWnd, LONG idObject, PSCROLLBARINFO psbi) GetScrollBarInfo(HWND hWnd, LONG idObject, PSCROLLBARINFO psbi)
{ {
@ -732,6 +734,18 @@ EXTINLINE BOOL NtUserxSetMessageBox(HWND hWnd)
return NtUserCallHwnd(hWnd, HWND_ROUTINE_SETMSGBOX); return NtUserCallHwnd(hWnd, HWND_ROUTINE_SETMSGBOX);
} }
EXTINLINE VOID NtUserxClearWindowState(PWND pWnd, UINT Flag)
{
if (!TestState(pWnd, Flag)) return;
NtUserCallHwndParam(UserHMGetHandle(pWnd), (DWORD_PTR)Flag, HWNDPARAM_ROUTINE_CLEARWINDOWSTATE);
}
EXTINLINE VOID NtUserxSetWindowState(PWND pWnd, UINT Flag)
{
if (TestState(pWnd, Flag)) return;
NtUserCallHwndParam(UserHMGetHandle(pWnd), (DWORD_PTR)Flag, HWNDPARAM_ROUTINE_SETWINDOWSTATE);
}
EXTINLINE HWND NtUserxSetTaskmanWindow(HWND hWnd) EXTINLINE HWND NtUserxSetTaskmanWindow(HWND hWnd)
{ {
return NtUserCallHwndOpt(hWnd, HWNDOPT_ROUTINE_SETTASKMANWINDOW); return NtUserCallHwndOpt(hWnd, HWNDOPT_ROUTINE_SETTASKMANWINDOW);

View file

@ -257,6 +257,24 @@ TestWindowProcess(PWND Wnd)
(DWORD_PTR)NtCurrentTeb()->ClientId.UniqueProcess ); (DWORD_PTR)NtCurrentTeb()->ClientId.UniqueProcess );
} }
BOOL
FASTCALL
TestState(PWND pWnd, UINT Flag)
{
UINT bit;
bit = 1 << LOWORD(Flag);
switch(HIWORD(Flag))
{
case 0:
return (pWnd->state & bit);
case 1:
return (pWnd->state2 & bit);
case 2:
return (pWnd->ExStyle2 & bit);
}
return FALSE;
}
PUSER_HANDLE_ENTRY PUSER_HANDLE_ENTRY
FASTCALL FASTCALL
GetUser32Handle(HANDLE handle) GetUser32Handle(HANDLE handle)