揭秘gapfnScSendMessage数组大部分都是NtUserMessageCall

本文主要是介绍揭秘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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125179

相关文章

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家,并整理七大洲和这些国家的KML矢量数据分析分享给大家,如果你需要这些数据,请在文末查看领取方式。 世界上横跨两大洲的国家 地球被分为七个大洲分别是亚洲、欧洲、北美洲、南美洲、非洲、大洋洲和南极洲。 七大洲示意图 其中,南极洲是无人居住的大陆,而其他六个大洲则孕育了众多国家和

三国地理揭秘:为何北伐之路如此艰难,为何诸葛亮无法攻克陇右小城?

俗话说:天时不如地利,不是随便说说,诸葛亮六出祁山,连关中陇右的几座小城都攻不下来,行军山高路险,无法携带和建造攻城器械,是最难的,所以在汉中,无论从哪一方进攻,防守方都是一夫当关,万夫莫开;再加上千里运粮,根本不需要打,司马懿只需要坚守城池拼消耗就能不战而屈人之兵。 另一边,洛阳的虎牢关,一旦突破,洛阳就无险可守,这样的进军路线,才是顺势而为的用兵之道。 读历史的时候我们常常看到某一方势

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

无线领夹麦克风什么牌子好用?揭秘领夹麦克风哪个牌子音质好!

随着短视频行业的星期,围绕着直播和视频拍摄的电子数码类产品也迎来了热销不减的高增长,其中除了数码相机外,最为重要的麦克风也得到了日益增长的高需求,尤其是无线领夹麦克风,近几年可谓是异常火爆。别看小小的一对无线麦克风,它对于视频拍摄的音质起到了极为关键的作用。 不过目前市面上的麦克风品牌种类多到让人眼花缭乱,盲目挑选的话容易踩雷,那么无线领夹麦克风什么牌子好用?今天就给大家推荐几款音质好的

负债不再是障碍?银行信贷“白名单“揭秘

谈及银行信贷产品,常闻有言称存在无需考量负债与查询记录之奇品,此等说法十有八九为中介诱人上钩之辞。轻信之下,恐将步入连环陷阱。除非个人资质出类拔萃,如就职于国央企或事业单位,工龄逾年,五险一金完备,还款能力卓越,或能偶遇线下产品对查询记录稍显宽容,然亦非全然无视。宣称全然不顾者,纯属无稽之谈。 银行非慈善机构,不轻易于困境中援手,更偏爱锦上添花之举。若无坚实资质,即便求助于银行亦难获青睐。反

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,