|  | /* | 
|  | * Message spying routines | 
|  | * | 
|  | * Copyright 1994, Bob Amstadt | 
|  | *           1995, Alex Korobka | 
|  | */ | 
|  |  | 
|  | #include <stdlib.h> | 
|  | #include <string.h> | 
|  | #include <stdio.h> | 
|  | #include "windef.h" | 
|  | #include "wingdi.h" | 
|  | #include "wine/winuser16.h" | 
|  | #include "wine/winbase16.h" | 
|  | #include "win.h" | 
|  | #include "module.h" | 
|  | #include "options.h" | 
|  | #include "debugtools.h" | 
|  | #include "spy.h" | 
|  | #include "commctrl.h" | 
|  |  | 
|  | DEFAULT_DEBUG_CHANNEL(message) | 
|  |  | 
|  | #define SPY_MAX_MSGNUM   WM_USER | 
|  | #define SPY_INDENT_UNIT  4  /* 4 spaces */ | 
|  |  | 
|  | static const char * const MessageTypeNames[SPY_MAX_MSGNUM + 1] = | 
|  | { | 
|  | "wm_null",			/* 0x00 */ | 
|  | "WM_CREATE", | 
|  | "WM_DESTROY", | 
|  | "WM_MOVE", | 
|  | "wm_sizewait", | 
|  | "WM_SIZE", | 
|  | "WM_ACTIVATE", | 
|  | "WM_SETFOCUS", | 
|  | "WM_KILLFOCUS", | 
|  | "WM_SETVISIBLE", | 
|  | "WM_ENABLE", | 
|  | "WM_SETREDRAW", | 
|  | "WM_SETTEXT", | 
|  | "WM_GETTEXT", | 
|  | "WM_GETTEXTLENGTH", | 
|  | "WM_PAINT", | 
|  | "WM_CLOSE",			/* 0x10 */ | 
|  | "WM_QUERYENDSESSION", | 
|  | "WM_QUIT", | 
|  | "WM_QUERYOPEN", | 
|  | "WM_ERASEBKGND", | 
|  | "WM_SYSCOLORCHANGE", | 
|  | "WM_ENDSESSION", | 
|  | "wm_systemerror", | 
|  | "WM_SHOWWINDOW", | 
|  | "WM_CTLCOLOR", | 
|  | "WM_WININICHANGE", | 
|  | "WM_DEVMODECHANGE", | 
|  | "WM_ACTIVATEAPP", | 
|  | "WM_FONTCHANGE", | 
|  | "WM_TIMECHANGE", | 
|  | "WM_CANCELMODE", | 
|  | "WM_SETCURSOR",		/* 0x20 */ | 
|  | "WM_MOUSEACTIVATE", | 
|  | "WM_CHILDACTIVATE", | 
|  | "WM_QUEUESYNC", | 
|  | "WM_GETMINMAXINFO", | 
|  | "wm_unused3", | 
|  | "wm_painticon", | 
|  | "WM_ICONERASEBKGND", | 
|  | "WM_NEXTDLGCTL", | 
|  | "wm_alttabactive", | 
|  | "WM_SPOOLERSTATUS", | 
|  | "WM_DRAWITEM", | 
|  | "WM_MEASUREITEM", | 
|  | "WM_DELETEITEM", | 
|  | "WM_VKEYTOITEM", | 
|  | "WM_CHARTOITEM", | 
|  | "WM_SETFONT",		/* 0x30 */ | 
|  | "WM_GETFONT", | 
|  | "WM_SETHOTKEY", | 
|  | "WM_GETHOTKEY", | 
|  | "wm_filesyschange", | 
|  | "wm_isactiveicon", | 
|  | "wm_queryparkicon", | 
|  | "WM_QUERYDRAGICON", | 
|  | "wm_querysavestate", | 
|  | "WM_COMPAREITEM", | 
|  | "wm_testing", | 
|  | NULL, | 
|  | "wm_otherwindowcreated", | 
|  | "wm_otherwindowdestroyed", | 
|  | "wm_activateshellwindow", | 
|  | NULL, | 
|  |  | 
|  | NULL, 		        /* 0x40 */ | 
|  | "wm_compacting", NULL, NULL, | 
|  | "WM_COMMNOTIFY", NULL, | 
|  | "WM_WINDOWPOSCHANGING",	/* 0x0046 */ | 
|  | "WM_WINDOWPOSCHANGED",	/* 0x0047 */ | 
|  | "WM_POWER", NULL, | 
|  | "WM_COPYDATA", | 
|  | "WM_CANCELJOURNAL", NULL, NULL, | 
|  | "WM_NOTIFY", NULL, | 
|  |  | 
|  | /* 0x0050 */ | 
|  | "WM_INPUTLANGCHANGEREQUEST", | 
|  | "WM_INPUTLANGCHANGE", | 
|  | "WM_TCARD", | 
|  | "WM_HELP", | 
|  | "WM_USERCHANGED", | 
|  | "WM_NOTIFYFORMAT", NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x0060 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x0070 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, | 
|  | "WM_CONTEXTMENU", | 
|  | "WM_STYLECHANGING", | 
|  | "WM_STYLECHANGED", | 
|  | "WM_DISPLAYCHANGE", | 
|  | "WM_GETICON", | 
|  |  | 
|  | "WM_SETICON",		/* 0x0080 */ | 
|  | "WM_NCCREATE",		/* 0x0081 */ | 
|  | "WM_NCDESTROY",		/* 0x0082 */ | 
|  | "WM_NCCALCSIZE",		/* 0x0083 */ | 
|  | "WM_NCHITTEST",        	/* 0x0084 */ | 
|  | "WM_NCPAINT",          	/* 0x0085 */ | 
|  | "WM_NCACTIVATE",       	/* 0x0086 */ | 
|  | "WM_GETDLGCODE",		/* 0x0087 */ | 
|  | "WM_SYNCPAINT", | 
|  | "WM_SYNCTASK", NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x0090 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x00A0 */ | 
|  | "WM_NCMOUSEMOVE",		/* 0x00A0 */ | 
|  | "WM_NCLBUTTONDOWN",		/* 0x00A1 */ | 
|  | "WM_NCLBUTTONUP",		/* 0x00A2 */ | 
|  | "WM_NCLBUTTONDBLCLK",	/* 0x00A3 */ | 
|  | "WM_NCRBUTTONDOWN",		/* 0x00A4 */ | 
|  | "WM_NCRBUTTONUP",		/* 0x00A5 */ | 
|  | "WM_NCRBUTTONDBLCLK",	/* 0x00A6 */ | 
|  | "WM_NCMBUTTONDOWN",		/* 0x00A7 */ | 
|  | "WM_NCMBUTTONUP",		/* 0x00A8 */ | 
|  | "WM_NCMBUTTONDBLCLK",	/* 0x00A9 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x00B0 - Win32 Edit controls */ | 
|  | "EM_GETSEL32",              /* 0x00b0 */ | 
|  | "EM_SETSEL32",              /* 0x00b1 */ | 
|  | "EM_GETRECT32",             /* 0x00b2 */ | 
|  | "EM_SETRECT32",             /* 0x00b3 */ | 
|  | "EM_SETRECTNP32",           /* 0x00b4 */ | 
|  | "EM_SCROLL32",              /* 0x00b5 */ | 
|  | "EM_LINESCROLL32",          /* 0x00b6 */ | 
|  | "EM_SCROLLCARET32",         /* 0x00b7 */ | 
|  | "EM_GETMODIFY32",           /* 0x00b8 */ | 
|  | "EM_SETMODIFY32",           /* 0x00b9 */ | 
|  | "EM_GETLINECOUNT32",        /* 0x00ba */ | 
|  | "EM_LINEINDEX32",           /* 0x00bb */ | 
|  | "EM_SETHANDLE32",           /* 0x00bc */ | 
|  | "EM_GETHANDLE32",           /* 0x00bd */ | 
|  | "EM_GETTHUMB32",            /* 0x00be */ | 
|  | NULL,                       /* 0x00bf */ | 
|  |  | 
|  | NULL,                       /* 0x00c0 */ | 
|  | "EM_LINELENGTH32",          /* 0x00c1 */ | 
|  | "EM_REPLACESEL32",          /* 0x00c2 */ | 
|  | NULL,                       /* 0x00c3 */ | 
|  | "EM_GETLINE32",             /* 0x00c4 */ | 
|  | "EM_LIMITTEXT32",           /* 0x00c5 */ | 
|  | "EM_CANUNDO32",             /* 0x00c6 */ | 
|  | "EM_UNDO32",                /* 0x00c7 */ | 
|  | "EM_FMTLINES32",            /* 0x00c8 */ | 
|  | "EM_LINEFROMCHAR32",        /* 0x00c9 */ | 
|  | NULL,                       /* 0x00ca */ | 
|  | "EM_SETTABSTOPS32",         /* 0x00cb */ | 
|  | "EM_SETPASSWORDCHAR32",     /* 0x00cc */ | 
|  | "EM_EMPTYUNDOBUFFER32",     /* 0x00cd */ | 
|  | "EM_GETFIRSTVISIBLELINE32", /* 0x00ce */ | 
|  | "EM_SETREADONLY32",         /* 0x00cf */ | 
|  |  | 
|  | "EM_SETWORDBREAKPROC32",    /* 0x00d0 */ | 
|  | "EM_GETWORDBREAKPROC32",    /* 0x00d1 */ | 
|  | "EM_GETPASSWORDCHAR32",     /* 0x00d2 */ | 
|  | "EM_SETMARGINS32",          /* 0x00d3 */ | 
|  | "EM_GETMARGINS32",          /* 0x00d4 */ | 
|  | "EM_GETLIMITTEXT32",        /* 0x00d5 */ | 
|  | "EM_POSFROMCHAR32",         /* 0x00d6 */ | 
|  | "EM_CHARFROMPOS32",         /* 0x00d7 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x00E0 - Win32 Scrollbars */ | 
|  | "SBM_SETPOS32",             /* 0x00e0 */ | 
|  | "SBM_GETPOS32",             /* 0x00e1 */ | 
|  | "SBM_SETRANGE32",           /* 0x00e2 */ | 
|  | "SBM_GETRANGE32",           /* 0x00e3 */ | 
|  | "SBM_ENABLE_ARROWS32",      /* 0x00e4 */ | 
|  | NULL, | 
|  | "SBM_SETRANGEREDRAW32",     /* 0x00e6 */ | 
|  | NULL, NULL, | 
|  | "SBM_SETSCROLLINFO32",      /* 0x00e9 */ | 
|  | "SBM_GETSCROLLINFO32",      /* 0x00ea */ | 
|  | NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x00F0 - Win32 Buttons */ | 
|  | "BM_GETCHECK32",            /* 0x00f0 */ | 
|  | "BM_SETCHECK32",            /* 0x00f1 */ | 
|  | "BM_GETSTATE32",            /* 0x00f2 */ | 
|  | "BM_SETSTATE32",            /* 0x00f3 */ | 
|  | "BM_SETSTYLE32",            /* 0x00f4 */ | 
|  | "BM_CLICK32",               /* 0x00f5 */ | 
|  | "BM_GETIMAGE32",            /* 0x00f6 */ | 
|  | "BM_SETIMAGE32",            /* 0x00f7 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | "WM_KEYDOWN",		/* 0x0100 */ | 
|  | "WM_KEYUP",			/* 0x0101 */ | 
|  | "WM_CHAR",			/* 0x0102 */ | 
|  | "WM_DEADCHAR",		/* 0x0103 */ | 
|  | "WM_SYSKEYDOWN",		/* 0x0104 */ | 
|  | "WM_SYSKEYUP",		/* 0x0105 */ | 
|  | "WM_SYSCHAR",		/* 0x0106 */ | 
|  | "WM_SYSDEADCHAR",		/* 0x0107 */ | 
|  | "WM_KEYLAST",		/* 0x0108 */ | 
|  | NULL, | 
|  | "WM_CONVERTREQUEST", | 
|  | "WM_CONVERTRESULT", | 
|  | "WM_INTERIM", | 
|  | "WM_IME_STARTCOMPOSITION",	/* 0x010d */ | 
|  | "WM_IME_ENDCOMPOSITION",	/* 0x010e */ | 
|  | "WM_IME_COMPOSITION",	/* 0x010f */ | 
|  |  | 
|  | "WM_INITDIALOG",		/* 0x0110 */ | 
|  | "WM_COMMAND",		/* 0x0111 */ | 
|  | "WM_SYSCOMMAND",       	/* 0x0112 */ | 
|  | "WM_TIMER",			/* 0x0113 */ | 
|  | "WM_HSCROLL",		/* 0x0114 */ | 
|  | "WM_VSCROLL",		/* 0x0115 */ | 
|  | "WM_INITMENU",              /* 0x0116 */ | 
|  | "WM_INITMENUPOPUP",         /* 0x0117 */ | 
|  | "WM_SYSTIMER",		/* 0x0118 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | "WM_MENUSELECT",            /* 0x011f */ | 
|  |  | 
|  | "WM_MENUCHAR",              /* 0x0120 */ | 
|  | "WM_ENTERIDLE",             /* 0x0121 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x0130 */ | 
|  | NULL, | 
|  | "WM_LBTRACKPOINT",          /* 0x0131 */ | 
|  | "WM_CTLCOLORMSGBOX",        /* 0x0132 */ | 
|  | "WM_CTLCOLOREDIT",          /* 0x0133 */ | 
|  | "WM_CTLCOLORLISTBOX",       /* 0x0134 */ | 
|  | "WM_CTLCOLORBTN",           /* 0x0135 */ | 
|  | "WM_CTLCOLORDLG",           /* 0x0136 */ | 
|  | "WM_CTLCOLORSCROLLBAR",     /* 0x0137 */ | 
|  | "WM_CTLCOLORSTATIC",        /* 0x0138 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x0140 - Win32 Comboboxes */ | 
|  | "CB_GETEDITSEL32",          /* 0x0140 */ | 
|  | "CB_LIMITTEXT32",           /* 0x0141 */ | 
|  | "CB_SETEDITSEL32",          /* 0x0142 */ | 
|  | "CB_ADDSTRING32",           /* 0x0143 */ | 
|  | "CB_DELETESTRING32",        /* 0x0144 */ | 
|  | "CB_DIR32",                 /* 0x0145 */ | 
|  | "CB_GETCOUNT32",            /* 0x0146 */ | 
|  | "CB_GETCURSEL32",           /* 0x0147 */ | 
|  | "CB_GETLBTEXT32",           /* 0x0148 */ | 
|  | "CB_GETLBTEXTLEN32",        /* 0x0149 */ | 
|  | "CB_INSERTSTRING32",        /* 0x014a */ | 
|  | "CB_RESETCONTENT32",        /* 0x014b */ | 
|  | "CB_FINDSTRING32",          /* 0x014c */ | 
|  | "CB_SELECTSTRING32",        /* 0x014d */ | 
|  | "CB_SETCURSEL32",           /* 0x014e */ | 
|  | "CB_SHOWDROPDOWN32",        /* 0x014f */ | 
|  |  | 
|  | "CB_GETITEMDATA32",         /* 0x0150 */ | 
|  | "CB_SETITEMDATA32",         /* 0x0151 */ | 
|  | "CB_GETDROPPEDCONTROLRECT32",/* 0x0152 */ | 
|  | "CB_SETITEMHEIGHT32",       /* 0x0153 */ | 
|  | "CB_GETITEMHEIGHT32",       /* 0x0154 */ | 
|  | "CB_SETEXTENDEDUI32",       /* 0x0155 */ | 
|  | "CB_GETEXTENDEDUI32",       /* 0x0156 */ | 
|  | "CB_GETDROPPEDSTATE32",     /* 0x0157 */ | 
|  | "CB_FINDSTRINGEXACT32",     /* 0x0158 */ | 
|  | "CB_SETLOCALE32",           /* 0x0159 */ | 
|  | "CB_GETLOCALE32",           /* 0x015a */ | 
|  | "CB_GETTOPINDEX32",         /* 0x015b */ | 
|  | "CB_SETTOPINDEX32",         /* 0x015c */ | 
|  | "CB_GETHORIZONTALEXTENT32", /* 0x015d */ | 
|  | "CB_SETHORIZONTALEXTENT32", /* 0x015e */ | 
|  | "CB_GETDROPPEDWIDTH32",     /* 0x015f */ | 
|  |  | 
|  | "CB_SETDROPPEDWIDTH32",     /* 0x0160 */ | 
|  | "CB_INITSTORAGE32",         /* 0x0161 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x0170 - Win32 Static controls */ | 
|  | "STM_SETICON32",		/* 0x0170 */ | 
|  | "STM_GETICON32",		/* 0x0171 */ | 
|  | "STM_SETIMAGE32",		/* 0x0172 */ | 
|  | "STM_GETIMAGE32",		/* 0x0173 */ | 
|  | NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x0180 - Win32 Listboxes */ | 
|  | "LB_ADDSTRING32",           /* 0x0180 */ | 
|  | "LB_INSERTSTRING32",        /* 0x0181 */ | 
|  | "LB_DELETESTRING32",        /* 0x0182 */ | 
|  | "LB_SELITEMRANGEEX32",      /* 0x0183 */ | 
|  | "LB_RESETCONTENT32",        /* 0x0184 */ | 
|  | "LB_SETSEL32",              /* 0x0185 */ | 
|  | "LB_SETCURSEL32",           /* 0x0186 */ | 
|  | "LB_GETSEL32",              /* 0x0187 */ | 
|  | "LB_GETCURSEL32",           /* 0x0188 */ | 
|  | "LB_GETTEXT32",             /* 0x0189 */ | 
|  | "LB_GETTEXTLEN32",          /* 0x018a */ | 
|  | "LB_GETCOUNT32",            /* 0x018b */ | 
|  | "LB_SELECTSTRING32",        /* 0x018c */ | 
|  | "LB_DIR32",                 /* 0x018d */ | 
|  | "LB_GETTOPINDEX32",         /* 0x018e */ | 
|  | "LB_FINDSTRING32",          /* 0x018f */ | 
|  |  | 
|  | "LB_GETSELCOUNT32",         /* 0x0190 */ | 
|  | "LB_GETSELITEMS32",         /* 0x0191 */ | 
|  | "LB_SETTABSTOPS32",         /* 0x0192 */ | 
|  | "LB_GETHORIZONTALEXTENT32", /* 0x0193 */ | 
|  | "LB_SETHORIZONTALEXTENT32", /* 0x0194 */ | 
|  | "LB_SETCOLUMNWIDTH32",      /* 0x0195 */ | 
|  | "LB_ADDFILE32",             /* 0x0196 */ | 
|  | "LB_SETTOPINDEX32",         /* 0x0197 */ | 
|  | "LB_GETITEMRECT32",         /* 0x0198 */ | 
|  | "LB_GETITEMDATA32",         /* 0x0199 */ | 
|  | "LB_SETITEMDATA32",         /* 0x019a */ | 
|  | "LB_SELITEMRANGE32",        /* 0x019b */ | 
|  | "LB_SETANCHORINDEX32",      /* 0x019c */ | 
|  | "LB_GETANCHORINDEX32",      /* 0x019d */ | 
|  | "LB_SETCARETINDEX32",       /* 0x019e */ | 
|  | "LB_GETCARETINDEX32",       /* 0x019f */ | 
|  |  | 
|  | "LB_SETITEMHEIGHT32",       /* 0x01a0 */ | 
|  | "LB_GETITEMHEIGHT32",       /* 0x01a1 */ | 
|  | "LB_FINDSTRINGEXACT32",     /* 0x01a2 */ | 
|  | "LB_CARETON32",             /* 0x01a3 */ | 
|  | "LB_CARETOFF32",            /* 0x01a4 */ | 
|  | "LB_SETLOCALE32",           /* 0x01a5 */ | 
|  | "LB_GETLOCALE32",           /* 0x01a6 */ | 
|  | "LB_SETCOUNT32",            /* 0x01a7 */ | 
|  | "LB_INITSTORAGE32",         /* 0x01a8 */ | 
|  | "LB_ITEMFROMPOINT32",       /* 0x01a9 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x01B0 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x01C0 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x01D0 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x01E0 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x01F0 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | "WM_MOUSEMOVE",		/* 0x0200 */ | 
|  | "WM_LBUTTONDOWN",		/* 0x0201 */ | 
|  | "WM_LBUTTONUP",		/* 0x0202 */ | 
|  | "WM_LBUTTONDBLCLK",		/* 0x0203 */ | 
|  | "WM_RBUTTONDOWN",		/* 0x0204 */ | 
|  | "WM_RBUTTONUP",		/* 0x0205 */ | 
|  | "WM_RBUTTONDBLCLK",		/* 0x0206 */ | 
|  | "WM_MBUTTONDOWN",		/* 0x0207 */ | 
|  | "WM_MBUTTONUP",		/* 0x0208 */ | 
|  | "WM_MBUTTONDBLCLK",		/* 0x0209 */ | 
|  | "WM_MOUSEWHEEL",            /* 0x020A */ | 
|  | NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | "WM_PARENTNOTIFY",		/* 0x0210 */ | 
|  | "WM_ENTERMENULOOP",         /* 0x0211 */ | 
|  | "WM_EXITMENULOOP",          /* 0x0212 */ | 
|  | "WM_NEXTMENU", 		/* 0x0213 */ | 
|  | "WM_SIZING", | 
|  | "WM_CAPTURECHANGED", | 
|  | "WM_MOVING", NULL, | 
|  | "WM_POWERBROADCAST", | 
|  | "WM_DEVICECHANGE", NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | "WM_MDICREATE",             /* 0x0220 */ | 
|  | "WM_MDIDESTROY",            /* 0x0221 */ | 
|  | "WM_MDIACTIVATE",           /* 0x0222 */ | 
|  | "WM_MDIRESTORE",            /* 0x0223 */ | 
|  | "WM_MDINEXT",               /* 0x0224 */ | 
|  | "WM_MDIMAXIMIZE",           /* 0x0225 */ | 
|  | "WM_MDITILE",               /* 0x0226 */ | 
|  | "WM_MDICASCADE",            /* 0x0227 */ | 
|  | "WM_MDIICONARRANGE",        /* 0x0228 */ | 
|  | "WM_MDIGETACTIVE",          /* 0x0229 */ | 
|  |  | 
|  | "WM_DROPOBJECT", | 
|  | "WM_QUERYDROPOBJECT", | 
|  | "WM_BEGINDRAG", | 
|  | "WM_DRAGLOOP", | 
|  | "WM_DRAGSELECT", | 
|  | "WM_DRAGMOVE", | 
|  |  | 
|  | /* 0x0230*/ | 
|  | "WM_MDISETMENU",            /* 0x0230 */ | 
|  | "WM_ENTERSIZEMOVE",		/* 0x0231 */ | 
|  | "WM_EXITSIZEMOVE",		/* 0x0232 */ | 
|  | "WM_DROPFILES", 		/* 0x0233 */ | 
|  | "WM_MDIREFRESHMENU", NULL, NULL, NULL, | 
|  | /* 0x0238*/ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x0240 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x0250 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x0260 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x0280 */ | 
|  | NULL, "WM_IME_SETCONTEXT", "WM_IME_NOTIFY", "WM_IME_CONTROL", "WM_IME_COMPOSITIONFULL", "WM_IME_SELECT", "WM_IME_CHAR", NULL, | 
|  | "WM_IME_REQUEST", NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | "WM_IME_KEYDOWN", "WM_IME_KEYUP", NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x02a0 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x02c0 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | "WM_CUT", 			/* 0x0300 */ | 
|  | "WM_COPY", | 
|  | "WM_PASTE", | 
|  | "WM_CLEAR", | 
|  | "WM_UNDO", | 
|  | "WM_RENDERFORMAT", | 
|  | "WM_RENDERALLFORMATS", | 
|  | "WM_DESTROYCLIPBOARD", | 
|  | "WM_DRAWCLIPBOARD", | 
|  | "WM_PAINTCLIPBOARD", | 
|  | "WM_VSCROLLCLIPBOARD", | 
|  | "WM_SIZECLIPBOARD", | 
|  | "WM_ASKCBFORMATNAME", | 
|  | "WM_CHANGECBCHAIN", | 
|  | "WM_HSCROLLCLIPBOARD", | 
|  | "WM_QUERYNEWPALETTE",	/* 0x030f*/ | 
|  |  | 
|  | "WM_PALETTEISCHANGING", | 
|  | "WM_PALETTECHANGED", | 
|  | "WM_HOTKEY", 		/* 0x0312 */ | 
|  | NULL, NULL, NULL, NULL, | 
|  | "WM_PRINT", | 
|  | "WM_PRINTCLIENT", | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x0340 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | "WM_QUERYAFXWNDPROC",   /*  0x0360 */ | 
|  | "WM_SIZEPARENT",        /*  0x0361 */ | 
|  | "WM_SETMESSAGESTRING",  /*  0x0362 */ | 
|  | "WM_IDLEUPDATECMDUI",   /*  0x0363 */ | 
|  | "WM_INITIALUPDATE",     /*  0x0364 */ | 
|  | "WM_COMMANDHELP",       /*  0x0365 */ | 
|  | "WM_HELPHITTEST",       /*  0x0366 */ | 
|  | "WM_EXITHELPMODE",      /*  0x0367 */ | 
|  | "WM_RECALCPARENT",      /*  0x0368 */ | 
|  | "WM_SIZECHILD",         /*  0x0369 */ | 
|  | "WM_KICKIDLE",          /*  0x036A */ | 
|  | "WM_QUERYCENTERWND",    /*  0x036B */ | 
|  | "WM_DISABLEMODAL",      /*  0x036C */ | 
|  | "WM_FLOATSTATUS",       /*  0x036D */ | 
|  | "WM_ACTIVATETOPLEVEL",  /*  0x036E */ | 
|  | "WM_QUERY3DCONTROLS",   /*  0x036F */ | 
|  | NULL,NULL,NULL, | 
|  | "WM_SOCKET_NOTIFY",     /*  0x0373 */ | 
|  | "WM_SOCKET_DEAD",       /*  0x0374 */ | 
|  | "WM_POPMESSAGESTRING",  /*  0x0375 */ | 
|  | "WM_OCC_LOADFROMSTREAM",     /* 0x0376 */ | 
|  | "WM_OCC_LOADFROMSTORAGE",    /* 0x0377 */ | 
|  | "WM_OCC_INITNEW",            /* 0x0378 */ | 
|  | "WM_QUEUE_SENTINEL",         /* 0x0379 */ | 
|  | "WM_OCC_LOADFROMSTREAM_EX",  /* 0x037A */ | 
|  | "WM_OCC_LOADFROMSTORAGE_EX", /* 0x037B */ | 
|  |  | 
|  | NULL,NULL,NULL,NULL, | 
|  |  | 
|  | /* 0x0380 */ | 
|  | "WM_PENWINFIRST", | 
|  | "WM_RCRESULT", | 
|  | "WM_HOOKRCRESULT", | 
|  | "WM_GLOBALRCCHANGE", | 
|  | "WM_SKB", | 
|  | "WM_HEDITCTL", | 
|  | NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | "WM_COALESCE_FIRST", | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | "WM_COALESCE_LAST", | 
|  |  | 
|  | /* 0x03a0 */ | 
|  | "MM_JOY1MOVE", | 
|  | "MM_JOY2MOVE", | 
|  | "MM_JOY1ZMOVE", | 
|  | "MM_JOY2ZMOVE", | 
|  | NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x03b0 */ | 
|  | NULL, NULL, NULL, NULL, NULL, | 
|  | "MM_JOY1BUTTONDOWN", | 
|  | "MM_JOY2BUTTONDOWN", | 
|  | "MM_JOY1BUTTONUP", | 
|  | "MM_JOY2BUTTONUP", | 
|  | "MM_MCINOTIFY", | 
|  | NULL, | 
|  | "MM_WOM_OPEN", | 
|  | "MM_WOM_CLOSE", | 
|  | "MM_WOM_DONE", | 
|  | "MM_WIM_OPEN", | 
|  | "MM_WIM_CLOSE", | 
|  |  | 
|  | /* 0x03c0 */ | 
|  | "MM_WIM_DATA", | 
|  | "MM_MIM_OPEN", | 
|  | "MM_MIM_CLOSE", | 
|  | "MM_MIM_DATA", | 
|  | "MM_MIM_LONGDATA", | 
|  | "MM_MIM_ERROR", | 
|  | "MM_MIM_LONGERROR", | 
|  | "MM_MOM_OPEN", | 
|  | "MM_MOM_CLOSE", | 
|  | "MM_MOM_DONE", | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | /* 0x03e0 */ | 
|  | "WM_DDE_INITIATE",  /* 0x3E0 */ | 
|  | "WM_DDE_TERMINATE",	/* 0x3E1 */ | 
|  | "WM_DDE_ADVISE",	/* 0x3E2 */ | 
|  | "WM_DDE_UNADVISE",	/* 0x3E3 */ | 
|  | "WM_DDE_ACK",	/* 0x3E4 */ | 
|  | "WM_DDE_DATA",	/* 0x3E5 */ | 
|  | "WM_DDE_REQUEST",	/* 0x3E6 */ | 
|  | "WM_DDE_POKE",	/* 0x3E7 */ | 
|  | "WM_DDE_EXECUTE",	/* 0x3E8 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  |  | 
|  | /* 0x03f0 */ | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 
|  |  | 
|  | "WM_USER" | 
|  | }; | 
|  |  | 
|  |  | 
|  | #define SPY_MAX_LVMMSGNUM   139 | 
|  | static const char * const LVMMessageTypeNames[SPY_MAX_LVMMSGNUM + 1] = | 
|  | { | 
|  | "LVM_GETBKCOLOR",		/* 1000 */ | 
|  | "LVM_SETBKCOLOR", | 
|  | "LVM_GETIMAGELIST", | 
|  | "LVM_SETIMAGELIST", | 
|  | "LVM_GETITEMCOUNT", | 
|  | "LVM_GETITEMA", | 
|  | "LVM_SETITEMA", | 
|  | "LVM_INSERTITEMA", | 
|  | "LVM_DELETEITEM", | 
|  | "LVM_DELETEALLITEMS", | 
|  | "LVM_GETCALLBACKMASK", | 
|  | "LVM_SETCALLBACKMASK", | 
|  | "LVM_GETNEXTITEM", | 
|  | "LVM_FINDITEMA", | 
|  | "LVM_GETITEMRECT", | 
|  | "LVM_SETITEMPOSITION", | 
|  | "LVM_GETITEMPOSITION", | 
|  | "LVM_GETSTRINGWIDTHA", | 
|  | "LVM_HITTEST", | 
|  | "LVM_ENSUREVISIBLE", | 
|  | "LVM_SCROLL", | 
|  | "LVM_REDRAWITEMS", | 
|  | "LVM_ARRANGE", | 
|  | "LVM_EDITLABELA", | 
|  | "LVM_GETEDITCONTROL", | 
|  | "LVM_GETCOLUMNA", | 
|  | "LVM_SETCOLUMNA", | 
|  | "LVM_INSERTCOLUMNA", | 
|  | "LVM_DELETECOLUMN", | 
|  | "LVM_GETCOLUMNWIDTH", | 
|  | "LVM_SETCOLUMNWIDTH", | 
|  | "LVM_GETHEADER", | 
|  | "LVM_CREATEDRAGIMAGE", | 
|  | "LVM_GETVIEWRECT", | 
|  | "LVM_GETTEXTCOLOR", | 
|  | "LVM_SETTEXTCOLOR", | 
|  | "LVM_GETTEXTBKCOLOR", | 
|  | "LVM_SETTEXTBKCOLOR", | 
|  | "LVM_GETTOPINDEX", | 
|  | "LVM_GETCOUNTPERPAGE", | 
|  | "LVM_GETORIGIN", | 
|  | "LVM_UPDATE", | 
|  | "LVM_SETITEMSTATE", | 
|  | "LVM_GETITEMSTATE", | 
|  | "LVM_GETITEMTEXTA", | 
|  | "LVM_SETITEMTEXTA", | 
|  | "LVM_SETITEMCOUNT", | 
|  | "LVM_SORTITEMS", | 
|  | "LVM_SETITEMPOSITION32", | 
|  | "LVM_GETSELECTEDCOUNT", | 
|  | "LVM_GETITEMSPACING", | 
|  | "LVM_GETISEARCHSTRINGA", | 
|  | "LVM_SETICONSPACING", | 
|  | "LVM_SETEXTENDEDLISTVIEWSTYLE", | 
|  | "LVM_GETEXTENDEDLISTVIEWSTYLE", | 
|  | "LVM_GETSUBITEMRECT", | 
|  | "LVM_SUBITEMHITTEST", | 
|  | "LVM_SETCOLUMNORDERARRAY", | 
|  | "LVM_GETCOLUMNORDERARRAY", | 
|  | "LVM_SETHOTITEM", | 
|  | "LVM_GETHOTITEM", | 
|  | "LVM_SETHOTCURSOR", | 
|  | "LVM_GETHOTCURSOR", | 
|  | "LVM_APPROXIMATEVIEWRECT", | 
|  | "LVM_SETWORKAREAS", | 
|  | "LVM_GETSELECTIONMARK", | 
|  | "LVM_SETSELECTIONMARK", | 
|  | "LVM_SETBKIMAGEA", | 
|  | "LVM_GETBKIMAGEA", | 
|  | "LVM_GETWORKAREAS", | 
|  | "LVM_SETHOVERTIME", | 
|  | "LVM_GETHOVERTIME", | 
|  | "LVM_GETNUMBEROFWORKAREAS", | 
|  | "LVM_SETTOOLTIPS", | 
|  | "LVM_GETITEMW", | 
|  | "LVM_SETITEMW", | 
|  | "LVM_INSERTITEMW", | 
|  | "LVM_GETTOOLTIPS", | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | "LVM_FINDITEMW", | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | "LVM_GETSTRINGWIDTHW", | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | "LVM_GETCOLUMNW", | 
|  | "LVM_SETCOLUMNW", | 
|  | "LVM_INSERTCOLUMNW", | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | "LVM_GETITEMTEXTW", | 
|  | "LVM_SETITEMTEXTW", | 
|  | "LVM_GETISEARCHSTRINGW", | 
|  | "LVM_EDITLABELW", | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | NULL, | 
|  | "LVM_SETBKIMAGEW", | 
|  | "LVM_GETBKIMAGEW"	/* 0x108B */ | 
|  | }; | 
|  |  | 
|  | #define SPY_MAX_CCMMSGNUM   6 | 
|  | static const char * const CCMMessageTypeNames[SPY_MAX_CCMMSGNUM + 1] = | 
|  | { | 
|  | NULL,		/* 0x2000 */ | 
|  | "CCM_SETBKCOLOR", | 
|  | "CCM_SETCOLORSCHEME", | 
|  | "CCM_GETCOLORSCHEME", | 
|  | "CCM_GETDROPTARGET", | 
|  | "CCM_SETUNICODEFORMAT", | 
|  | "CCM_GETUNICODEFORMAT" | 
|  | }; | 
|  |  | 
|  | static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1]; | 
|  | static BOOL16 SPY_ExcludeDWP = 0; | 
|  | static int SPY_IndentLevel  = 0; | 
|  |  | 
|  | #define SPY_EXCLUDE(msg) \ | 
|  | (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)]) | 
|  |  | 
|  | /*********************************************************************** | 
|  | *           SPY_GetMsgName | 
|  | */ | 
|  | const char *SPY_GetMsgName( UINT msg ) | 
|  | { | 
|  | static char msg_buffer[20]; | 
|  |  | 
|  | if (msg <= SPY_MAX_MSGNUM) | 
|  | { | 
|  | if (!MessageTypeNames[msg]) return "???"; | 
|  | return MessageTypeNames[msg]; | 
|  | } | 
|  |  | 
|  | if (msg >= LVM_FIRST && msg <= LVM_FIRST + SPY_MAX_LVMMSGNUM) | 
|  | { | 
|  | if (!LVMMessageTypeNames[msg-LVM_FIRST]) return "LVM_?"; | 
|  | return LVMMessageTypeNames[msg-LVM_FIRST]; | 
|  | } | 
|  |  | 
|  | if (msg >= CCM_FIRST && msg <= CCM_FIRST + SPY_MAX_CCMMSGNUM) | 
|  | { | 
|  | if (!CCMMessageTypeNames[msg-CCM_FIRST]) return "???"; | 
|  | return CCMMessageTypeNames[msg-CCM_FIRST]; | 
|  | } | 
|  |  | 
|  | sprintf( msg_buffer, "WM_USER+%04x", msg - WM_USER ); | 
|  | return msg_buffer; | 
|  | } | 
|  |  | 
|  | /*********************************************************************** | 
|  | *           SPY_GetWndName | 
|  | */ | 
|  | const char *SPY_GetWndName( HWND hwnd ) | 
|  | { | 
|  | static char wnd_buffer[16]; | 
|  |  | 
|  | WND* pWnd = WIN_FindWndPtr( hwnd ); | 
|  | if( pWnd ) | 
|  | { | 
|  | INT n = sizeof(wnd_buffer) - 6; | 
|  | LPSTR p = wnd_buffer; | 
|  | LPSTR src; | 
|  |  | 
|  | char  postfix; | 
|  |  | 
|  | if( pWnd->text && pWnd->text[0] != '\0' ) | 
|  | { | 
|  | src = pWnd->text; | 
|  | *(p++) = postfix = '\"'; | 
|  | while ((n-- > 1) && *src) *p++ = *src++; | 
|  | } | 
|  | else /* get class name */ | 
|  | { | 
|  | INT len; | 
|  |  | 
|  | *(p++)='{'; | 
|  | GlobalGetAtomNameA((ATOM) GetClassWord(pWnd->hwndSelf, GCW_ATOM), p, n + 1); | 
|  | src = p += (len = lstrlenA(p)); | 
|  | if( len >= n ) src = wnd_buffer;	/* something nonzero */ | 
|  | postfix = '}'; | 
|  | } | 
|  | if( *src ) for( n = 0; n < 3; n++ ) *(p++)='.'; | 
|  | *(p++) = postfix; | 
|  | *(p++) = '\0'; | 
|  | WIN_ReleaseWndPtr(pWnd); | 
|  |  | 
|  | } | 
|  | else lstrcpyA( wnd_buffer, "\"NULL\"" ); | 
|  | return wnd_buffer; | 
|  | } | 
|  | /*********************************************************************** | 
|  | *           SPY_DumpStructure | 
|  | */ | 
|  | void SPY_DumpStructure (UINT msg, LPARAM structure) | 
|  | { | 
|  | switch (msg) | 
|  | { | 
|  | case WM_DRAWITEM: | 
|  | {   DRAWITEMSTRUCT *lpdis = (DRAWITEMSTRUCT*) structure; | 
|  | TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n", lpdis->CtlType, lpdis->CtlID); | 
|  | TRACE("itemID=0x%08x itemAction=0x%08x itemState=0x%08x\n", lpdis->itemID, lpdis->itemAction, lpdis->itemState); | 
|  | TRACE("hWnd=0x%04x hDC=0x%04x (%d,%d)-(%d,%d) itemData=0x%08lx\n", | 
|  | lpdis->hwndItem, lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, lpdis->rcItem.right, lpdis->rcItem.bottom, lpdis->itemData); | 
|  | } | 
|  | break; | 
|  | case WM_MEASUREITEM: | 
|  | {   MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) structure; | 
|  | TRACE("MEASUREITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n", lpmis->CtlType, lpmis->CtlID); | 
|  | TRACE("itemID=0x%08x itemWidth=0x%08x itemHeight=0x%08x\n", lpmis->itemID, lpmis->itemWidth, lpmis->itemHeight); | 
|  | TRACE("itemData=0x%08lx\n", lpmis->itemData); | 
|  | } | 
|  | break; | 
|  | case WM_NOTIFY: | 
|  | {   NMHDR * pnmh = (NMHDR*) structure; | 
|  | TRACE("NMHDR hwndFrom=0x%08x idFrom=0x%08x code=0x%08x\n", pnmh->hwndFrom, pnmh->idFrom, pnmh->code); | 
|  | } | 
|  | default: | 
|  | break; | 
|  | } | 
|  |  | 
|  | } | 
|  | /*********************************************************************** | 
|  | *           SPY_EnterMessage | 
|  | */ | 
|  | void SPY_EnterMessage( INT iFlag, HWND hWnd, UINT msg, | 
|  | WPARAM wParam, LPARAM lParam ) | 
|  | { | 
|  | LPCSTR pname; | 
|  |  | 
|  | if (!TRACE_ON(message) || SPY_EXCLUDE(msg)) return; | 
|  |  | 
|  | /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */ | 
|  | switch(iFlag) | 
|  | { | 
|  | case SPY_DISPATCHMESSAGE16: | 
|  | pname = SPY_GetWndName(hWnd); | 
|  | TRACE("%*s(%04x) %-16s message [%04x] %s dispatched  wp=%04x lp=%08lx\n", | 
|  | SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ), | 
|  | wParam, lParam); | 
|  | break; | 
|  |  | 
|  | case SPY_DISPATCHMESSAGE: | 
|  | pname = SPY_GetWndName(hWnd); | 
|  | TRACE("%*s(%08x) %-16s message [%04x] %s dispatched  wp=%08x lp=%08lx\n", | 
|  | SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ), | 
|  | wParam, lParam); | 
|  | break; | 
|  |  | 
|  | case SPY_SENDMESSAGE16: | 
|  | case SPY_SENDMESSAGE: | 
|  | { | 
|  | char taskName[30]; | 
|  | HTASK16 hTask = GetWindowTask16(hWnd); | 
|  |  | 
|  | if (hTask == GetCurrentTask()) strcpy( taskName, "self" ); | 
|  | else if (!hTask) strcpy( taskName, "Wine" ); | 
|  | else | 
|  | { | 
|  | sprintf( taskName, "task %04x ???", hTask ); | 
|  | GetModuleName16( hTask, taskName + 10, sizeof(taskName) - 10 ); | 
|  | } | 
|  | pname = SPY_GetWndName(hWnd); | 
|  |  | 
|  | if (iFlag == SPY_SENDMESSAGE16) | 
|  | TRACE("%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n", | 
|  | SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ), | 
|  | taskName, wParam, lParam ); | 
|  | else | 
|  | {   TRACE("%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n", | 
|  | SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ), | 
|  | taskName, wParam, lParam ); | 
|  | SPY_DumpStructure(msg, lParam); | 
|  | } | 
|  | } | 
|  | break; | 
|  |  | 
|  | case SPY_DEFWNDPROC16: | 
|  | if( SPY_ExcludeDWP ) return; | 
|  | TRACE("%*s(%04x)  DefWindowProc16: %s [%04x]  wp=%04x lp=%08lx\n", | 
|  | SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), | 
|  | msg, wParam, lParam ); | 
|  | break; | 
|  |  | 
|  | case SPY_DEFWNDPROC: | 
|  | if( SPY_ExcludeDWP ) return; | 
|  | TRACE("%*s(%08x)  DefWindowProc32: %s [%04x]  wp=%08x lp=%08lx\n", | 
|  | SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), | 
|  | msg, wParam, lParam ); | 
|  | break; | 
|  | } | 
|  | SPY_IndentLevel += SPY_INDENT_UNIT; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *           SPY_ExitMessage | 
|  | */ | 
|  | void SPY_ExitMessage( INT iFlag, HWND hWnd, UINT msg, LRESULT lReturn ) | 
|  | { | 
|  | LPCSTR pname; | 
|  |  | 
|  | if (!TRACE_ON(message) || SPY_EXCLUDE(msg) || | 
|  | (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND)) ) | 
|  | return; | 
|  |  | 
|  | if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT; | 
|  |  | 
|  | switch(iFlag) | 
|  | { | 
|  | case SPY_RESULT_DEFWND16: | 
|  | TRACE(" %*s(%04x)  DefWindowProc16: %s [%04x] returned %08lx\n", | 
|  | SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn ); | 
|  | break; | 
|  |  | 
|  | case SPY_RESULT_DEFWND: | 
|  | TRACE(" %*s(%08x)  DefWindowProc32: %s [%04x] returned %08lx\n", | 
|  | SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn ); | 
|  | break; | 
|  |  | 
|  | case SPY_RESULT_OK16: | 
|  | pname = SPY_GetWndName(hWnd); | 
|  | TRACE(" %*s(%04x) %-16s message [%04x] %s returned %08lx\n", | 
|  | SPY_IndentLevel, "", hWnd, pname, msg, | 
|  | SPY_GetMsgName( msg ), lReturn ); | 
|  | break; | 
|  |  | 
|  | case SPY_RESULT_OK: | 
|  | pname = SPY_GetWndName(hWnd); | 
|  | TRACE(" %*s(%08x) %-16s message [%04x] %s returned %08lx\n", | 
|  | SPY_IndentLevel, "", hWnd, pname, msg, | 
|  | SPY_GetMsgName( msg ), lReturn ); | 
|  | break; | 
|  |  | 
|  | case SPY_RESULT_INVALIDHWND16: | 
|  | pname = SPY_GetWndName(hWnd); | 
|  | WARN(" %*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n", | 
|  | SPY_IndentLevel, "", hWnd, pname, msg, | 
|  | SPY_GetMsgName( msg ) ); | 
|  | break; | 
|  |  | 
|  | case SPY_RESULT_INVALIDHWND: | 
|  | pname = SPY_GetWndName(hWnd); | 
|  | WARN(" %*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n", | 
|  | SPY_IndentLevel, "", hWnd, pname, msg, | 
|  | SPY_GetMsgName( msg ) ); | 
|  | break; | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *           SPY_Init | 
|  | */ | 
|  | int SPY_Init(void) | 
|  | { | 
|  | int i; | 
|  | char buffer[1024]; | 
|  |  | 
|  | if (!TRACE_ON(message)) return TRUE; | 
|  |  | 
|  | PROFILE_GetWineIniString( "Spy", "Include", "", buffer, sizeof(buffer) ); | 
|  | if (buffer[0] && strcmp( buffer, "INCLUDEALL" )) | 
|  | { | 
|  | TRACE("Include=%s\n", buffer ); | 
|  | for (i = 0; i <= SPY_MAX_MSGNUM; i++) | 
|  | SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i])); | 
|  | } | 
|  |  | 
|  | PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer, sizeof(buffer) ); | 
|  | if (buffer[0]) | 
|  | { | 
|  | TRACE("Exclude=%s\n", buffer ); | 
|  | if (!strcmp( buffer, "EXCLUDEALL" )) | 
|  | for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE; | 
|  | else | 
|  | for (i = 0; i <= SPY_MAX_MSGNUM; i++) | 
|  | SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i])); | 
|  | } | 
|  |  | 
|  | SPY_ExcludeDWP = PROFILE_GetWineIniInt( "Spy", "ExcludeDWP", 0 ); | 
|  |  | 
|  | return 1; | 
|  | } |