本文主要是介绍揭秘gapfnScSendMessage数组大部分都是NtUserMessageCall,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
揭秘gapfnScSendMessage数组大部分都是NtUserMessageCall
第一部分A:
client/clmsg.c里面的
RealDefWindowProcWorker函数里面大量调用了CsSendMessage函数
第一部分B:
client/usercli.h文件里有CsSendMessage函数的宏定义
#define CsSendMessage(hwnd, msg, wParam, lParam, xParam, pfn, bAnsi) \
(((msg) >= WM_USER) ? \
NtUserMessageCall(hwnd, msg, wParam, lParam, xParam, pfn, bAnsi) : \
gapfnScSendMessage[MessageTable[msg].iFunction](hwnd, msg, wParam, lParam, xParam, pfn, bAnsi))
第一部分C:
LRESULT RealDefWindowProcWorker(
PWND pwnd,
UINT message,
WPARAM wParam,
LPARAM lParam,
DWORD fAnsi)
{
HWND hwnd = HWq(pwnd);
int icolBack;
int icolFore;
PWND pwndParent;
HWND hwndDefIme;
PWND pwndDefIme;
PIMEUI pimeui;
#if DBG
if (!gfTurboDWP) {
return CsSendMessage(hwnd, message, wParam, lParam, 0L,
FNID_DEFWINDOWPROC, fAnsi);
} else {
#endif
if (FDEFWINDOWMSG(message, DefWindowMsgs)) {
return CsSendMessage(hwnd, message, wParam, lParam, 0L,
FNID_DEFWINDOWPROC, fAnsi);
第二部分: core/ntuser/inc/msgdef.lst
DWORD
NCDESTROY
INLPCREATESTRUCT
INSTRINGNULL
OUTSTRING
#if !defined(FE_SB)
GETTEXTLENGTHS
#endif
INSTRING
INOUTLPPOINT5
INLPDRAWITEMSTRUCT
INOUTLPMEASUREITEMSTRUCT
INLPDELETEITEMSTRUCT
INWPARAMCHAR
INLPHLPSTRUCT
INLPCOMPAREITEMSTRUCT
INOUTLPWINDOWPOS
INLPWINDOWPOS
COPYGLOBALDATA
COPYDATA
INLPHELPINFOSTRUCT
INOUTSTYLECHANGE
INOUTNCCALCSIZE
DWORDOPTINLPMSG
INOUTLPRECT
OPTOUTLPDWORDOPTOUTLPDWORD
OUTLPRECT
INCNTOUTSTRING
POPTINLPUINT
INOUTLPSCROLLINFO
INCBOXSTRING
OUTCBOXSTRING
INLBOXSTRING
OUTLBOXSTRING
POUTLPINT
OUTDWORDINDWORD
INOUTNEXTMENU
INDEVICECHANGE
INLPMDICREATESTRUCT
INOUTDRAG
INDESTROYCLIPBRD
INPAINTCLIPBRD
INSIZECLIPBRD
INCNTOUTSTRINGNULL
KERNELONLY
DDEINIT
SENTDDEMSG
#ifdef FE_SB
GETDBCSTEXTLENGTHS
EMGETSEL
EMSETSEL
INWPARAMDBCSCHAR
CBGETEDITSEL
IMECONTROL
#endif
INOUTMENUGETOBJECT
POWERBROADCAST
LOGONNOTIFY
INLPKDRAWSWITCHWND
OUTLPCOMBOBOXINFO
OUTLPSCROLLBARINFO
第三部分:core/ntuser/client/usercli.h
/*
* Message thunks.
*/
#define fnCOPYDATA NtUserMessageCall
#define fnDDEINIT NtUserMessageCall
#define fnDWORD NtUserMessageCall
#define fnNCDESTROY NtUserMessageCall
#define fnDWORDOPTINLPMSG NtUserMessageCall
#define fnGETTEXTLENGTHS NtUserMessageCall
#define fnGETDBCSTEXTLENGTHS NtUserMessageCall
#define fnINLPCREATESTRUCT NtUserMessageCall
#define fnINLPCOMPAREITEMSTRUCT NtUserMessageCall
#define fnINLPDELETEITEMSTRUCT NtUserMessageCall
#define fnINLPDRAWITEMSTRUCT NtUserMessageCall
#define fnINLPHELPINFOSTRUCT NtUserMessageCall
#define fnINLPHLPSTRUCT NtUserMessageCall
#define fnINLPWINDOWPOS NtUserMessageCall
#define fnINOUTDRAG NtUserMessageCall
#define fnINOUTLPMEASUREITEMSTRUCT NtUserMessageCall
#define fnINOUTLPPOINT5 NtUserMessageCall
#define fnINOUTLPRECT NtUserMessageCall
#define fnINOUTLPSCROLLINFO NtUserMessageCall
#define fnINOUTLPWINDOWPOS NtUserMessageCall
#define fnINOUTNCCALCSIZE NtUserMessageCall
#define fnINOUTNEXTMENU NtUserMessageCall
#define fnINOUTSTYLECHANGE NtUserMessageCall
#define fnOPTOUTLPDWORDOPTOUTLPDWORD NtUserMessageCall
#define fnOUTLPRECT NtUserMessageCall
#define fnPOPTINLPUINT NtUserMessageCall
#define fnPOUTLPINT NtUserMessageCall
#define fnSENTDDEMSG NtUserMessageCall
#define fnOUTDWORDINDWORD NtUserMessageCall
#define fnINOUTMENUGETOBJECT NtUserMessageCall
#define fnINCBOXSTRING NtUserMessageCall
#define fnINCNTOUTSTRING NtUserMessageCall
#define fnINCNTOUTSTRINGNULL NtUserMessageCall
#define fnINLBOXSTRING NtUserMessageCall
#define fnINLPMDICREATESTRUCT NtUserMessageCall
#define fnINSTRING NtUserMessageCall
#define fnINSTRINGNULL NtUserMessageCall
#define fnINWPARAMCHAR NtUserMessageCall
#define fnOUTCBOXSTRING NtUserMessageCall
#define fnOUTLBOXSTRING NtUserMessageCall
#define fnOUTSTRING NtUserMessageCall
#define fnKERNELONLY NtUserMessageCall
#define fnOUTLPCOMBOBOXINFO NtUserMessageCall
#define fnOUTLPSCROLLBARINFO NtUserMessageCall
#define MESSAGEPROTO(func) \
LRESULT CALLBACK fn ## func( \
HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, \
ULONG_PTR xParam, DWORD xpfnWndProc, BOOL bAnsi)
MESSAGEPROTO(COPYGLOBALDATA);
MESSAGEPROTO(INDEVICECHANGE);
MESSAGEPROTO(INPAINTCLIPBRD);
MESSAGEPROTO(INSIZECLIPBRD);
MESSAGEPROTO(IMECONTROL);
MESSAGEPROTO(IMEREQUEST);
MESSAGEPROTO(INWPARAMDBCSCHAR);
MESSAGEPROTO(EMGETSEL);
MESSAGEPROTO(EMSETSEL);
MESSAGEPROTO(CBGETEDITSEL);
第四部分:gapfnScSendMessage[]数组大部分都是 NtUserMessageCall
gapfnScSendMessage[]数组的第16项是fnCOPYGLOBALDATA函数
这篇关于揭秘gapfnScSendMessage数组大部分都是NtUserMessageCall的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!