- Implement ReplyMessage and kernel support for InSendMessage and GetMessageTime.

svn path=/trunk/; revision=40820
This commit is contained in:
James Tabor 2009-05-06 18:49:53 +00:00
parent b107dc759a
commit 9a36bd47a2
5 changed files with 33 additions and 10 deletions

View file

@ -1071,6 +1071,7 @@ GetMessageTime(VOID)
{
PUSER32_THREAD_DATA ThreadData = User32GetThreadData();
return(ThreadData->LastMessage.time);
// return NtUserGetThreadState(THREADSTATE_GETMESSAGETIME);
}
@ -1090,8 +1091,7 @@ InSendMessage(VOID)
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;
// 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
/* return NtUserGetThreadState(THREADSTATE_INSENDMESSAGE); */
return 0;
return NtUserGetThreadState(THREADSTATE_INSENDMESSAGE);
}
/*
* @unimplemented
* @implemented
*/
BOOL
WINAPI
ReplyMessage(
LRESULT lResult)
{
UNIMPLEMENTED;
return FALSE;
return NtUserCallOneParam(lResult, ONEPARAM_ROUTINE_REPLYMESSAGE);
}

View file

@ -1721,7 +1721,8 @@ enum ThreadStateRoutines
THREADSTATE_ACTIVEWINDOW,
THREADSTATE_CAPTUREWINDOW,
THREADSTATE_PROGMANWINDOW,
THREADSTATE_TASKMANWINDOW
THREADSTATE_TASKMANWINDOW,
THREADSTATE_GETMESSAGETIME
};
DWORD

View file

@ -38,6 +38,7 @@ typedef struct _THREADINFO
PDESKTOPINFO pDeskInfo;
PCLIENTINFO pClientInfo;
FLONG TIF_flags;
LONG timeLast;
HANDLE hDesktop;
UINT cPaintsReady; /* Count of paints pending. */
UINT cTimersReady; /* Count of timers pending. */

View file

@ -1359,7 +1359,7 @@ UserPostMessage(HWND Wnd,
IntGetCursorLocation(pti->Desktop->WindowStation,
&KernelModeMsg.pt);
KeQueryTickCount(&LargeTickCount);
KernelModeMsg.time = MsqCalculateMessageTime(&LargeTickCount);
pti->timeLast = KernelModeMsg.time = MsqCalculateMessageTime(&LargeTickCount);
MsqPostMessage(Window->MessageQueue, &KernelModeMsg,
NULL != MsgMemoryEntry && 0 != KernelModeMsg.lParam,
QS_POSTMESSAGE);

View file

@ -96,6 +96,28 @@ NtUserGetThreadState(
RETURN( (DWORD)GetW32ThreadInfo()->pDeskInfo->hTaskManWindow);
case THREADSTATE_ACTIVEWINDOW:
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);