mirror of
https://github.com/reactos/reactos.git
synced 2025-04-29 18:48:53 +00:00
- Implement ReplyMessage and kernel support for InSendMessage and GetMessageTime.
svn path=/trunk/; revision=40820
This commit is contained in:
parent
b107dc759a
commit
9a36bd47a2
5 changed files with 33 additions and 10 deletions
|
@ -1071,6 +1071,7 @@ GetMessageTime(VOID)
|
||||||
{
|
{
|
||||||
PUSER32_THREAD_DATA ThreadData = User32GetThreadData();
|
PUSER32_THREAD_DATA ThreadData = User32GetThreadData();
|
||||||
return(ThreadData->LastMessage.time);
|
return(ThreadData->LastMessage.time);
|
||||||
|
// return NtUserGetThreadState(THREADSTATE_GETMESSAGETIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1090,8 +1091,7 @@ InSendMessage(VOID)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FALSE;
|
return(NtUserGetThreadState(THREADSTATE_INSENDMESSAGE) != ISMEX_NOSEND);
|
||||||
/* return(NtUserGetThreadState(THREADSTATE_INSENDMESSAGE) != ISMEX_NOSEND);*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1105,23 +1105,22 @@ InSendMessageEx(
|
||||||
{
|
{
|
||||||
PCLIENTTHREADINFO pcti = GetWin32ClientInfo()->pClientThreadInfo;
|
PCLIENTTHREADINFO pcti = GetWin32ClientInfo()->pClientThreadInfo;
|
||||||
// FIXME("ISMEX %x\n",pcti);
|
// FIXME("ISMEX %x\n",pcti);
|
||||||
if (pcti && !(pcti->CTI_flags & CTI_INSENDMESSAGE)) return ISMEX_NOSEND;
|
if (pcti && !(pcti->CTI_flags & CTI_INSENDMESSAGE))
|
||||||
|
return ISMEX_NOSEND;
|
||||||
else
|
else
|
||||||
/* return NtUserGetThreadState(THREADSTATE_INSENDMESSAGE); */
|
return NtUserGetThreadState(THREADSTATE_INSENDMESSAGE);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
ReplyMessage(
|
ReplyMessage(
|
||||||
LRESULT lResult)
|
LRESULT lResult)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
return NtUserCallOneParam(lResult, ONEPARAM_ROUTINE_REPLYMESSAGE);
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1721,7 +1721,8 @@ enum ThreadStateRoutines
|
||||||
THREADSTATE_ACTIVEWINDOW,
|
THREADSTATE_ACTIVEWINDOW,
|
||||||
THREADSTATE_CAPTUREWINDOW,
|
THREADSTATE_CAPTUREWINDOW,
|
||||||
THREADSTATE_PROGMANWINDOW,
|
THREADSTATE_PROGMANWINDOW,
|
||||||
THREADSTATE_TASKMANWINDOW
|
THREADSTATE_TASKMANWINDOW,
|
||||||
|
THREADSTATE_GETMESSAGETIME
|
||||||
};
|
};
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
|
|
|
@ -38,6 +38,7 @@ typedef struct _THREADINFO
|
||||||
PDESKTOPINFO pDeskInfo;
|
PDESKTOPINFO pDeskInfo;
|
||||||
PCLIENTINFO pClientInfo;
|
PCLIENTINFO pClientInfo;
|
||||||
FLONG TIF_flags;
|
FLONG TIF_flags;
|
||||||
|
LONG timeLast;
|
||||||
HANDLE hDesktop;
|
HANDLE hDesktop;
|
||||||
UINT cPaintsReady; /* Count of paints pending. */
|
UINT cPaintsReady; /* Count of paints pending. */
|
||||||
UINT cTimersReady; /* Count of timers pending. */
|
UINT cTimersReady; /* Count of timers pending. */
|
||||||
|
|
|
@ -1359,7 +1359,7 @@ UserPostMessage(HWND Wnd,
|
||||||
IntGetCursorLocation(pti->Desktop->WindowStation,
|
IntGetCursorLocation(pti->Desktop->WindowStation,
|
||||||
&KernelModeMsg.pt);
|
&KernelModeMsg.pt);
|
||||||
KeQueryTickCount(&LargeTickCount);
|
KeQueryTickCount(&LargeTickCount);
|
||||||
KernelModeMsg.time = MsqCalculateMessageTime(&LargeTickCount);
|
pti->timeLast = KernelModeMsg.time = MsqCalculateMessageTime(&LargeTickCount);
|
||||||
MsqPostMessage(Window->MessageQueue, &KernelModeMsg,
|
MsqPostMessage(Window->MessageQueue, &KernelModeMsg,
|
||||||
NULL != MsgMemoryEntry && 0 != KernelModeMsg.lParam,
|
NULL != MsgMemoryEntry && 0 != KernelModeMsg.lParam,
|
||||||
QS_POSTMESSAGE);
|
QS_POSTMESSAGE);
|
||||||
|
|
|
@ -96,6 +96,28 @@ NtUserGetThreadState(
|
||||||
RETURN( (DWORD)GetW32ThreadInfo()->pDeskInfo->hTaskManWindow);
|
RETURN( (DWORD)GetW32ThreadInfo()->pDeskInfo->hTaskManWindow);
|
||||||
case THREADSTATE_ACTIVEWINDOW:
|
case THREADSTATE_ACTIVEWINDOW:
|
||||||
RETURN ( (DWORD)UserGetActiveWindow());
|
RETURN ( (DWORD)UserGetActiveWindow());
|
||||||
|
case THREADSTATE_INSENDMESSAGE:
|
||||||
|
{
|
||||||
|
DWORD Ret = ISMEX_NOSEND;
|
||||||
|
PUSER_MESSAGE_QUEUE MessageQueue =
|
||||||
|
((PTHREADINFO)PsGetCurrentThreadWin32Thread())->MessageQueue;
|
||||||
|
DPRINT1("THREADSTATE_INSENDMESSAGE\n");
|
||||||
|
|
||||||
|
if (!IsListEmpty(&MessageQueue->SentMessagesListHead))
|
||||||
|
{
|
||||||
|
Ret = ISMEX_SEND;
|
||||||
|
}
|
||||||
|
else if (!IsListEmpty(&MessageQueue->NotifyMessagesListHead))
|
||||||
|
{
|
||||||
|
/* FIXME Need to set message flag when in callback mode with notify */
|
||||||
|
Ret = ISMEX_NOTIFY;
|
||||||
|
}
|
||||||
|
/* FIXME Need to set message flag if replied to or ReplyMessage */
|
||||||
|
RETURN( Ret);
|
||||||
|
}
|
||||||
|
case THREADSTATE_GETMESSAGETIME:
|
||||||
|
/* FIXME Needs more work! */
|
||||||
|
RETURN( ((PTHREADINFO)PsGetCurrentThreadWin32Thread())->timeLast);
|
||||||
}
|
}
|
||||||
RETURN( 0);
|
RETURN( 0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue