blob: eefc323443f1b60abd5d03f966a34b0d97811989 [file] [log] [blame]
Alexandre Julliardb817f4f1996-03-14 18:08:34 +00001/*
2 * Message spying routines
Alexandre Julliardcdd09231994-01-12 11:12:51 +00003 *
4 * Copyright 1994, Bob Amstadt
Alexandre Julliardaf0bae51995-10-03 17:06:08 +00005 * 1995, Alex Korobka
Alexandre Julliardcdd09231994-01-12 11:12:51 +00006 */
7
8#include <stdlib.h>
Alexandre Julliard8d24ae61994-04-05 21:42:43 +00009#include <string.h>
Jeremy Whited3e22d92000-02-10 19:03:02 +000010#include <stdio.h>
11#include "windef.h"
12#include "wingdi.h"
Michael Vekslerca1bc861999-01-01 18:57:33 +000013#include "wine/winuser16.h"
Marcus Meissner317af321999-02-17 13:51:06 +000014#include "wine/winbase16.h"
Alexandre Julliard77b99181997-09-14 17:17:23 +000015#include "win.h"
Alexandre Julliardb817f4f1996-03-14 18:08:34 +000016#include "module.h"
Alexandre Julliard86a8d0f1994-01-18 23:04:40 +000017#include "options.h"
Alexandre Julliard61fece01999-06-26 19:09:08 +000018#include "debugtools.h"
Alexandre Julliardaf0bae51995-10-03 17:06:08 +000019#include "spy.h"
Juergen Schmiedd50f6421999-08-15 16:54:58 +000020#include "commctrl.h"
Alexandre Julliardcdd09231994-01-12 11:12:51 +000021
Patrik Stridvallb4b9fae1999-04-19 14:56:29 +000022DEFAULT_DEBUG_CHANNEL(message)
23
Alexandre Julliardb817f4f1996-03-14 18:08:34 +000024#define SPY_MAX_MSGNUM WM_USER
25#define SPY_INDENT_UNIT 4 /* 4 spaces */
26
Alexandre Julliardd90840e1996-06-11 16:02:08 +000027static const char * const MessageTypeNames[SPY_MAX_MSGNUM + 1] =
Alexandre Julliardcdd09231994-01-12 11:12:51 +000028{
Alexandre Julliard1e37a181996-08-18 16:21:52 +000029 "wm_null", /* 0x00 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +000030 "WM_CREATE",
31 "WM_DESTROY",
32 "WM_MOVE",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000033 "wm_sizewait",
Alexandre Julliardcdd09231994-01-12 11:12:51 +000034 "WM_SIZE",
35 "WM_ACTIVATE",
36 "WM_SETFOCUS",
37 "WM_KILLFOCUS",
Alexandre Julliardaf0bae51995-10-03 17:06:08 +000038 "WM_SETVISIBLE",
Alexandre Julliardcdd09231994-01-12 11:12:51 +000039 "WM_ENABLE",
40 "WM_SETREDRAW",
41 "WM_SETTEXT",
42 "WM_GETTEXT",
43 "WM_GETTEXTLENGTH",
44 "WM_PAINT",
45 "WM_CLOSE", /* 0x10 */
46 "WM_QUERYENDSESSION",
47 "WM_QUIT",
48 "WM_QUERYOPEN",
49 "WM_ERASEBKGND",
50 "WM_SYSCOLORCHANGE",
51 "WM_ENDSESSION",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000052 "wm_systemerror",
Alexandre Julliardcdd09231994-01-12 11:12:51 +000053 "WM_SHOWWINDOW",
54 "WM_CTLCOLOR",
55 "WM_WININICHANGE",
56 "WM_DEVMODECHANGE",
57 "WM_ACTIVATEAPP",
58 "WM_FONTCHANGE",
59 "WM_TIMECHANGE",
60 "WM_CANCELMODE",
61 "WM_SETCURSOR", /* 0x20 */
62 "WM_MOUSEACTIVATE",
63 "WM_CHILDACTIVATE",
64 "WM_QUEUESYNC",
65 "WM_GETMINMAXINFO",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000066 "wm_unused3",
67 "wm_painticon",
Alexandre Julliardcdd09231994-01-12 11:12:51 +000068 "WM_ICONERASEBKGND",
69 "WM_NEXTDLGCTL",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000070 "wm_alttabactive",
Alexandre Julliardcdd09231994-01-12 11:12:51 +000071 "WM_SPOOLERSTATUS",
72 "WM_DRAWITEM",
73 "WM_MEASUREITEM",
74 "WM_DELETEITEM",
75 "WM_VKEYTOITEM",
76 "WM_CHARTOITEM",
77 "WM_SETFONT", /* 0x30 */
Alexandre Julliardd4719651995-12-12 18:49:11 +000078 "WM_GETFONT",
79 "WM_SETHOTKEY",
80 "WM_GETHOTKEY",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000081 "wm_filesyschange",
82 "wm_isactiveicon",
83 "wm_queryparkicon",
Alexandre Julliardd4719651995-12-12 18:49:11 +000084 "WM_QUERYDRAGICON",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000085 "wm_querysavestate",
Alexandre Julliardd4719651995-12-12 18:49:11 +000086 "WM_COMPAREITEM",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000087 "wm_testing",
Alexandre Julliardb817f4f1996-03-14 18:08:34 +000088 NULL,
Alexandre Julliard1e37a181996-08-18 16:21:52 +000089 "wm_otherwindowcreated",
90 "wm_otherwindowdestroyed",
91 "wm_activateshellwindow",
Alexandre Julliardb817f4f1996-03-14 18:08:34 +000092 NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +000093
Alexandre Julliardaf0bae51995-10-03 17:06:08 +000094 NULL, /* 0x40 */
Alexandre Julliard1e37a181996-08-18 16:21:52 +000095 "wm_compacting", NULL, NULL,
Alexandre Julliardaf0bae51995-10-03 17:06:08 +000096 "WM_COMMNOTIFY", NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +000097 "WM_WINDOWPOSCHANGING", /* 0x0046 */
98 "WM_WINDOWPOSCHANGED", /* 0x0047 */
Alexandre Julliard1e37a181996-08-18 16:21:52 +000099 "WM_POWER", NULL,
100 "WM_COPYDATA",
Alexandre Julliardf0cbfa01997-02-15 14:29:56 +0000101 "WM_CANCELJOURNAL", NULL, NULL,
102 "WM_NOTIFY", NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000103
Alexandre Julliardf0cbfa01997-02-15 14:29:56 +0000104 /* 0x0050 */
105 "WM_INPUTLANGCHANGEREQUEST",
106 "WM_INPUTLANGCHANGE",
107 "WM_TCARD",
108 "WM_HELP",
109 "WM_USERCHANGED",
110 "WM_NOTIFYFORMAT", NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000111 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
112
113 /* 0x0060 */
114 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
115 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
116
117 /* 0x0070 */
118 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardf0cbfa01997-02-15 14:29:56 +0000119 NULL, NULL, NULL,
120 "WM_CONTEXTMENU",
121 "WM_STYLECHANGING",
122 "WM_STYLECHANGED",
123 "WM_DISPLAYCHANGE",
124 "WM_GETICON",
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000125
Alexandre Julliardf0cbfa01997-02-15 14:29:56 +0000126 "WM_SETICON", /* 0x0080 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000127 "WM_NCCREATE", /* 0x0081 */
128 "WM_NCDESTROY", /* 0x0082 */
129 "WM_NCCALCSIZE", /* 0x0083 */
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000130 "WM_NCHITTEST", /* 0x0084 */
131 "WM_NCPAINT", /* 0x0085 */
132 "WM_NCACTIVATE", /* 0x0086 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000133 "WM_GETDLGCODE", /* 0x0087 */
Juergen Schmiedd50f6421999-08-15 16:54:58 +0000134 "WM_SYNCPAINT",
135 "WM_SYNCTASK", NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000136
137 /* 0x0090 */
138 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
139 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
140
141 /* 0x00A0 */
Alexandre Julliard58199531994-04-21 01:20:00 +0000142 "WM_NCMOUSEMOVE", /* 0x00A0 */
143 "WM_NCLBUTTONDOWN", /* 0x00A1 */
144 "WM_NCLBUTTONUP", /* 0x00A2 */
145 "WM_NCLBUTTONDBLCLK", /* 0x00A3 */
146 "WM_NCRBUTTONDOWN", /* 0x00A4 */
147 "WM_NCRBUTTONUP", /* 0x00A5 */
148 "WM_NCRBUTTONDBLCLK", /* 0x00A6 */
149 "WM_NCMBUTTONDOWN", /* 0x00A7 */
150 "WM_NCMBUTTONUP", /* 0x00A8 */
151 "WM_NCMBUTTONDBLCLK", /* 0x00A9 */
152 NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000153
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000154 /* 0x00B0 - Win32 Edit controls */
Alexandre Julliardc6c09441997-01-12 18:32:19 +0000155 "EM_GETSEL32", /* 0x00b0 */
156 "EM_SETSEL32", /* 0x00b1 */
157 "EM_GETRECT32", /* 0x00b2 */
158 "EM_SETRECT32", /* 0x00b3 */
159 "EM_SETRECTNP32", /* 0x00b4 */
160 "EM_SCROLL32", /* 0x00b5 */
161 "EM_LINESCROLL32", /* 0x00b6 */
162 "EM_SCROLLCARET32", /* 0x00b7 */
163 "EM_GETMODIFY32", /* 0x00b8 */
164 "EM_SETMODIFY32", /* 0x00b9 */
165 "EM_GETLINECOUNT32", /* 0x00ba */
166 "EM_LINEINDEX32", /* 0x00bb */
167 "EM_SETHANDLE32", /* 0x00bc */
168 "EM_GETHANDLE32", /* 0x00bd */
169 "EM_GETTHUMB32", /* 0x00be */
170 NULL, /* 0x00bf */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000171
Alexandre Julliardc6c09441997-01-12 18:32:19 +0000172 NULL, /* 0x00c0 */
173 "EM_LINELENGTH32", /* 0x00c1 */
174 "EM_REPLACESEL32", /* 0x00c2 */
175 NULL, /* 0x00c3 */
176 "EM_GETLINE32", /* 0x00c4 */
177 "EM_LIMITTEXT32", /* 0x00c5 */
178 "EM_CANUNDO32", /* 0x00c6 */
179 "EM_UNDO32", /* 0x00c7 */
180 "EM_FMTLINES32", /* 0x00c8 */
181 "EM_LINEFROMCHAR32", /* 0x00c9 */
182 NULL, /* 0x00ca */
183 "EM_SETTABSTOPS32", /* 0x00cb */
184 "EM_SETPASSWORDCHAR32", /* 0x00cc */
185 "EM_EMPTYUNDOBUFFER32", /* 0x00cd */
186 "EM_GETFIRSTVISIBLELINE32", /* 0x00ce */
187 "EM_SETREADONLY32", /* 0x00cf */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000188
Alexandre Julliardc6c09441997-01-12 18:32:19 +0000189 "EM_SETWORDBREAKPROC32", /* 0x00d0 */
190 "EM_GETWORDBREAKPROC32", /* 0x00d1 */
191 "EM_GETPASSWORDCHAR32", /* 0x00d2 */
192 "EM_SETMARGINS32", /* 0x00d3 */
193 "EM_GETMARGINS32", /* 0x00d4 */
194 "EM_GETLIMITTEXT32", /* 0x00d5 */
195 "EM_POSFROMCHAR32", /* 0x00d6 */
196 "EM_CHARFROMPOS32", /* 0x00d7 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000197 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
198
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000199 /* 0x00E0 - Win32 Scrollbars */
Alexandre Julliard2c69f6d1996-09-28 18:11:01 +0000200 "SBM_SETPOS32", /* 0x00e0 */
201 "SBM_GETPOS32", /* 0x00e1 */
202 "SBM_SETRANGE32", /* 0x00e2 */
203 "SBM_GETRANGE32", /* 0x00e3 */
204 "SBM_ENABLE_ARROWS32", /* 0x00e4 */
205 NULL,
206 "SBM_SETRANGEREDRAW32", /* 0x00e6 */
207 NULL, NULL,
208 "SBM_SETSCROLLINFO32", /* 0x00e9 */
209 "SBM_GETSCROLLINFO32", /* 0x00ea */
210 NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000211
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000212 /* 0x00F0 - Win32 Buttons */
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000213 "BM_GETCHECK32", /* 0x00f0 */
214 "BM_SETCHECK32", /* 0x00f1 */
215 "BM_GETSTATE32", /* 0x00f2 */
216 "BM_SETSTATE32", /* 0x00f3 */
217 "BM_SETSTYLE32", /* 0x00f4 */
218 "BM_CLICK32", /* 0x00f5 */
219 "BM_GETIMAGE32", /* 0x00f6 */
220 "BM_SETIMAGE32", /* 0x00f7 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000221 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
222
223 "WM_KEYDOWN", /* 0x0100 */
224 "WM_KEYUP", /* 0x0101 */
225 "WM_CHAR", /* 0x0102 */
226 "WM_DEADCHAR", /* 0x0103 */
227 "WM_SYSKEYDOWN", /* 0x0104 */
228 "WM_SYSKEYUP", /* 0x0105 */
229 "WM_SYSCHAR", /* 0x0106 */
230 "WM_SYSDEADCHAR", /* 0x0107 */
231 "WM_KEYLAST", /* 0x0108 */
Hidenori Takeshima146b16a2000-03-08 18:22:21 +0000232 NULL,
Alexandre Julliardd4719651995-12-12 18:49:11 +0000233 "WM_CONVERTREQUEST",
Hidenori Takeshima146b16a2000-03-08 18:22:21 +0000234 "WM_CONVERTRESULT",
235 "WM_INTERIM",
236 "WM_IME_STARTCOMPOSITION", /* 0x010d */
237 "WM_IME_ENDCOMPOSITION", /* 0x010e */
238 "WM_IME_COMPOSITION", /* 0x010f */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000239
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000240 "WM_INITDIALOG", /* 0x0110 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000241 "WM_COMMAND", /* 0x0111 */
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000242 "WM_SYSCOMMAND", /* 0x0112 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000243 "WM_TIMER", /* 0x0113 */
244 "WM_HSCROLL", /* 0x0114 */
245 "WM_VSCROLL", /* 0x0115 */
Alexandre Julliard3f2abfa1994-08-16 15:43:11 +0000246 "WM_INITMENU", /* 0x0116 */
247 "WM_INITMENUPOPUP", /* 0x0117 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000248 "WM_SYSTIMER", /* 0x0118 */
Alexandre Julliard2787be81995-05-22 18:23:01 +0000249 NULL, NULL, NULL, NULL, NULL, NULL,
250 "WM_MENUSELECT", /* 0x011f */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000251
Alexandre Julliard2787be81995-05-22 18:23:01 +0000252 "WM_MENUCHAR", /* 0x0120 */
253 "WM_ENTERIDLE", /* 0x0121 */
254 NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000255 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
256
257 /* 0x0130 */
Alexandre Julliard1e9ac791996-06-06 18:38:27 +0000258 NULL,
Juergen Schmiedd50f6421999-08-15 16:54:58 +0000259 "WM_LBTRACKPOINT", /* 0x0131 */
Alexandre Julliard1e9ac791996-06-06 18:38:27 +0000260 "WM_CTLCOLORMSGBOX", /* 0x0132 */
261 "WM_CTLCOLOREDIT", /* 0x0133 */
262 "WM_CTLCOLORLISTBOX", /* 0x0134 */
263 "WM_CTLCOLORBTN", /* 0x0135 */
264 "WM_CTLCOLORDLG", /* 0x0136 */
265 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
266 "WM_CTLCOLORSTATIC", /* 0x0138 */
267 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000268
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000269 /* 0x0140 - Win32 Comboboxes */
Alexandre Julliard75d86e11996-11-17 18:59:11 +0000270 "CB_GETEDITSEL32", /* 0x0140 */
271 "CB_LIMITTEXT32", /* 0x0141 */
272 "CB_SETEDITSEL32", /* 0x0142 */
273 "CB_ADDSTRING32", /* 0x0143 */
274 "CB_DELETESTRING32", /* 0x0144 */
275 "CB_DIR32", /* 0x0145 */
276 "CB_GETCOUNT32", /* 0x0146 */
277 "CB_GETCURSEL32", /* 0x0147 */
278 "CB_GETLBTEXT32", /* 0x0148 */
279 "CB_GETLBTEXTLEN32", /* 0x0149 */
280 "CB_INSERTSTRING32", /* 0x014a */
281 "CB_RESETCONTENT32", /* 0x014b */
282 "CB_FINDSTRING32", /* 0x014c */
283 "CB_SELECTSTRING32", /* 0x014d */
284 "CB_SETCURSEL32", /* 0x014e */
285 "CB_SHOWDROPDOWN32", /* 0x014f */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000286
Alexandre Julliard75d86e11996-11-17 18:59:11 +0000287 "CB_GETITEMDATA32", /* 0x0150 */
288 "CB_SETITEMDATA32", /* 0x0151 */
289 "CB_GETDROPPEDCONTROLRECT32",/* 0x0152 */
290 "CB_SETITEMHEIGHT32", /* 0x0153 */
291 "CB_GETITEMHEIGHT32", /* 0x0154 */
292 "CB_SETEXTENDEDUI32", /* 0x0155 */
293 "CB_GETEXTENDEDUI32", /* 0x0156 */
294 "CB_GETDROPPEDSTATE32", /* 0x0157 */
295 "CB_FINDSTRINGEXACT32", /* 0x0158 */
296 "CB_SETLOCALE32", /* 0x0159 */
297 "CB_GETLOCALE32", /* 0x015a */
298 "CB_GETTOPINDEX32", /* 0x015b */
299 "CB_SETTOPINDEX32", /* 0x015c */
300 "CB_GETHORIZONTALEXTENT32", /* 0x015d */
301 "CB_SETHORIZONTALEXTENT32", /* 0x015e */
302 "CB_GETDROPPEDWIDTH32", /* 0x015f */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000303
Alexandre Julliard75d86e11996-11-17 18:59:11 +0000304 "CB_SETDROPPEDWIDTH32", /* 0x0160 */
305 "CB_INITSTORAGE32", /* 0x0161 */
306 NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000307 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
308
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000309 /* 0x0170 - Win32 Static controls */
Alexandre Julliard491502b1997-11-01 19:08:16 +0000310 "STM_SETICON32", /* 0x0170 */
311 "STM_GETICON32", /* 0x0171 */
312 "STM_SETIMAGE32", /* 0x0172 */
313 "STM_GETIMAGE32", /* 0x0173 */
314 NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000315 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
316
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000317 /* 0x0180 - Win32 Listboxes */
Alexandre Julliardd1ce8b21996-09-02 16:46:30 +0000318 "LB_ADDSTRING32", /* 0x0180 */
319 "LB_INSERTSTRING32", /* 0x0181 */
320 "LB_DELETESTRING32", /* 0x0182 */
321 "LB_SELITEMRANGEEX32", /* 0x0183 */
322 "LB_RESETCONTENT32", /* 0x0184 */
323 "LB_SETSEL32", /* 0x0185 */
324 "LB_SETCURSEL32", /* 0x0186 */
325 "LB_GETSEL32", /* 0x0187 */
326 "LB_GETCURSEL32", /* 0x0188 */
327 "LB_GETTEXT32", /* 0x0189 */
328 "LB_GETTEXTLEN32", /* 0x018a */
329 "LB_GETCOUNT32", /* 0x018b */
330 "LB_SELECTSTRING32", /* 0x018c */
331 "LB_DIR32", /* 0x018d */
332 "LB_GETTOPINDEX32", /* 0x018e */
333 "LB_FINDSTRING32", /* 0x018f */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000334
Alexandre Julliardd1ce8b21996-09-02 16:46:30 +0000335 "LB_GETSELCOUNT32", /* 0x0190 */
336 "LB_GETSELITEMS32", /* 0x0191 */
337 "LB_SETTABSTOPS32", /* 0x0192 */
338 "LB_GETHORIZONTALEXTENT32", /* 0x0193 */
339 "LB_SETHORIZONTALEXTENT32", /* 0x0194 */
340 "LB_SETCOLUMNWIDTH32", /* 0x0195 */
341 "LB_ADDFILE32", /* 0x0196 */
342 "LB_SETTOPINDEX32", /* 0x0197 */
343 "LB_GETITEMRECT32", /* 0x0198 */
344 "LB_GETITEMDATA32", /* 0x0199 */
345 "LB_SETITEMDATA32", /* 0x019a */
346 "LB_SELITEMRANGE32", /* 0x019b */
347 "LB_SETANCHORINDEX32", /* 0x019c */
348 "LB_GETANCHORINDEX32", /* 0x019d */
349 "LB_SETCARETINDEX32", /* 0x019e */
350 "LB_GETCARETINDEX32", /* 0x019f */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000351
Alexandre Julliardd1ce8b21996-09-02 16:46:30 +0000352 "LB_SETITEMHEIGHT32", /* 0x01a0 */
353 "LB_GETITEMHEIGHT32", /* 0x01a1 */
354 "LB_FINDSTRINGEXACT32", /* 0x01a2 */
Alexandre Julliardda0cfb31996-12-01 17:17:47 +0000355 "LB_CARETON32", /* 0x01a3 */
356 "LB_CARETOFF32", /* 0x01a4 */
Alexandre Julliardd1ce8b21996-09-02 16:46:30 +0000357 "LB_SETLOCALE32", /* 0x01a5 */
358 "LB_GETLOCALE32", /* 0x01a6 */
359 "LB_SETCOUNT32", /* 0x01a7 */
360 "LB_INITSTORAGE32", /* 0x01a8 */
361 "LB_ITEMFROMPOINT32", /* 0x01a9 */
362 NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000363
364 /* 0x01B0 */
365 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
366 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
367
368 /* 0x01C0 */
369 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
370 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
371
372 /* 0x01D0 */
373 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
374 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
375
376 /* 0x01E0 */
377 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
378 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
379
380 /* 0x01F0 */
381 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
382 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
383
384 "WM_MOUSEMOVE", /* 0x0200 */
385 "WM_LBUTTONDOWN", /* 0x0201 */
386 "WM_LBUTTONUP", /* 0x0202 */
387 "WM_LBUTTONDBLCLK", /* 0x0203 */
388 "WM_RBUTTONDOWN", /* 0x0204 */
389 "WM_RBUTTONUP", /* 0x0205 */
390 "WM_RBUTTONDBLCLK", /* 0x0206 */
391 "WM_MBUTTONDOWN", /* 0x0207 */
392 "WM_MBUTTONUP", /* 0x0208 */
393 "WM_MBUTTONDBLCLK", /* 0x0209 */
Stephane Lussier4bdf4af2000-04-18 11:56:33 +0000394 "WM_MOUSEWHEEL", /* 0x020A */
395 NULL, NULL, NULL, NULL, NULL,
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000396
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000397 "WM_PARENTNOTIFY", /* 0x0210 */
Alexandre Julliard2787be81995-05-22 18:23:01 +0000398 "WM_ENTERMENULOOP", /* 0x0211 */
399 "WM_EXITMENULOOP", /* 0x0212 */
Juergen Schmiedd50f6421999-08-15 16:54:58 +0000400 "WM_NEXTMENU", /* 0x0213 */
Alexandre Julliardf0cbfa01997-02-15 14:29:56 +0000401 "WM_SIZING",
402 "WM_CAPTURECHANGED",
403 "WM_MOVING", NULL,
404 "WM_POWERBROADCAST",
405 "WM_DEVICECHANGE", NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000406
Alexandre Julliard2787be81995-05-22 18:23:01 +0000407 "WM_MDICREATE", /* 0x0220 */
408 "WM_MDIDESTROY", /* 0x0221 */
409 "WM_MDIACTIVATE", /* 0x0222 */
410 "WM_MDIRESTORE", /* 0x0223 */
411 "WM_MDINEXT", /* 0x0224 */
412 "WM_MDIMAXIMIZE", /* 0x0225 */
413 "WM_MDITILE", /* 0x0226 */
414 "WM_MDICASCADE", /* 0x0227 */
415 "WM_MDIICONARRANGE", /* 0x0228 */
416 "WM_MDIGETACTIVE", /* 0x0229 */
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000417
Juergen Schmiedd50f6421999-08-15 16:54:58 +0000418 "WM_DROPOBJECT",
419 "WM_QUERYDROPOBJECT",
420 "WM_BEGINDRAG",
421 "WM_DRAGLOOP",
422 "WM_DRAGSELECT",
423 "WM_DRAGMOVE",
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000424
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000425 /* 0x0230*/
Alexandre Julliard2787be81995-05-22 18:23:01 +0000426 "WM_MDISETMENU", /* 0x0230 */
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000427 "WM_ENTERSIZEMOVE", /* 0x0231 */
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000428 "WM_EXITSIZEMOVE", /* 0x0232 */
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000429 "WM_DROPFILES", /* 0x0233 */
Alexandre Julliard1e37a181996-08-18 16:21:52 +0000430 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000431 /* 0x0238*/
432 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
433
434 /* 0x0240 */
435 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
436 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
437
438 /* 0x0250 */
439 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
440 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
441
442 /* 0x0260 */
443 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
444 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
445 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
446 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
447
448 /* 0x0280 */
Hidenori Takeshima146b16a2000-03-08 18:22:21 +0000449 NULL, "WM_IME_SETCONTEXT", "WM_IME_NOTIFY", "WM_IME_CONTROL", "WM_IME_COMPOSITIONFULL", "WM_IME_SELECT", "WM_IME_CHAR", NULL,
450 "WM_IME_REQUEST", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
451 "WM_IME_KEYDOWN", "WM_IME_KEYUP", NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000452 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
453
Hidenori Takeshima146b16a2000-03-08 18:22:21 +0000454 /* 0x02a0 */
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000455 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
456 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
457 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
458 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
459
460 /* 0x02c0 */
461 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
462 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
463 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
464 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
465
466 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
467 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
468 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
469 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
470
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000471 "WM_CUT", /* 0x0300 */
472 "WM_COPY",
473 "WM_PASTE",
474 "WM_CLEAR",
475 "WM_UNDO",
476 "WM_RENDERFORMAT",
477 "WM_RENDERALLFORMATS",
478 "WM_DESTROYCLIPBOARD",
479 "WM_DRAWCLIPBOARD",
480 "WM_PAINTCLIPBOARD",
481 "WM_VSCROLLCLIPBOARD",
482 "WM_SIZECLIPBOARD",
483 "WM_ASKCBFORMATNAME",
484 "WM_CHANGECBCHAIN",
485 "WM_HSCROLLCLIPBOARD",
486 "WM_QUERYNEWPALETTE", /* 0x030f*/
487
488 "WM_PALETTEISCHANGING",
Alexandre Julliard1e37a181996-08-18 16:21:52 +0000489 "WM_PALETTECHANGED",
490 "WM_HOTKEY", /* 0x0312 */
Alexandre Julliardf0cbfa01997-02-15 14:29:56 +0000491 NULL, NULL, NULL, NULL,
492 "WM_PRINT",
493 "WM_PRINTCLIENT",
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000494 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000495
496 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
497 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
498 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
499 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
500
501 /* 0x0340 */
502 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
503 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
504 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
505 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
506
Alexandre Julliard642d3131998-07-12 19:29:36 +0000507 "WM_QUERYAFXWNDPROC", /* 0x0360 */
508 "WM_SIZEPARENT", /* 0x0361 */
509 "WM_SETMESSAGESTRING", /* 0x0362 */
510 "WM_IDLEUPDATECMDUI", /* 0x0363 */
511 "WM_INITIALUPDATE", /* 0x0364 */
512 "WM_COMMANDHELP", /* 0x0365 */
513 "WM_HELPHITTEST", /* 0x0366 */
514 "WM_EXITHELPMODE", /* 0x0367 */
515 "WM_RECALCPARENT", /* 0x0368 */
516 "WM_SIZECHILD", /* 0x0369 */
517 "WM_KICKIDLE", /* 0x036A */
518 "WM_QUERYCENTERWND", /* 0x036B */
519 "WM_DISABLEMODAL", /* 0x036C */
520 "WM_FLOATSTATUS", /* 0x036D */
521 "WM_ACTIVATETOPLEVEL", /* 0x036E */
522 "WM_QUERY3DCONTROLS", /* 0x036F */
523 NULL,NULL,NULL,
524 "WM_SOCKET_NOTIFY", /* 0x0373 */
525 "WM_SOCKET_DEAD", /* 0x0374 */
526 "WM_POPMESSAGESTRING", /* 0x0375 */
527 "WM_OCC_LOADFROMSTREAM", /* 0x0376 */
528 "WM_OCC_LOADFROMSTORAGE", /* 0x0377 */
529 "WM_OCC_INITNEW", /* 0x0378 */
530 "WM_QUEUE_SENTINEL", /* 0x0379 */
531 "WM_OCC_LOADFROMSTREAM_EX", /* 0x037A */
532 "WM_OCC_LOADFROMSTORAGE_EX", /* 0x037B */
533
534 NULL,NULL,NULL,NULL,
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000535
536 /* 0x0380 */
Alexandre Julliard1e37a181996-08-18 16:21:52 +0000537 "WM_PENWINFIRST",
538 "WM_RCRESULT",
539 "WM_HOOKRCRESULT",
540 "WM_GLOBALRCCHANGE",
541 "WM_SKB",
542 "WM_HEDITCTL",
543 NULL, NULL,
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000544 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardd4719651995-12-12 18:49:11 +0000545
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000546 "WM_COALESCE_FIRST",
Alexandre Julliardd4719651995-12-12 18:49:11 +0000547 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
548 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000549 "WM_COALESCE_LAST",
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000550
551 /* 0x03a0 */
552 "MM_JOY1MOVE",
553 "MM_JOY2MOVE",
554 "MM_JOY1ZMOVE",
555 "MM_JOY2ZMOVE",
556 NULL, NULL, NULL, NULL,
557 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000558
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000559 /* 0x03b0 */
560 NULL, NULL, NULL, NULL, NULL,
561 "MM_JOY1BUTTONDOWN",
562 "MM_JOY2BUTTONDOWN",
563 "MM_JOY1BUTTONUP",
564 "MM_JOY2BUTTONUP",
565 "MM_MCINOTIFY",
566 NULL,
567 "MM_WOM_OPEN",
568 "MM_WOM_CLOSE",
569 "MM_WOM_DONE",
570 "MM_WIM_OPEN",
571 "MM_WIM_CLOSE",
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000572
573 /* 0x03c0 */
Alexandre Julliard23946ad1997-06-16 17:43:53 +0000574 "MM_WIM_DATA",
575 "MM_MIM_OPEN",
576 "MM_MIM_CLOSE",
577 "MM_MIM_DATA",
578 "MM_MIM_LONGDATA",
579 "MM_MIM_ERROR",
580 "MM_MIM_LONGERROR",
581 "MM_MOM_OPEN",
582 "MM_MOM_CLOSE",
583 "MM_MOM_DONE",
584 NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000585 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
586 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
587
588 /* 0x03e0 */
589 "WM_DDE_INITIATE", /* 0x3E0 */
590 "WM_DDE_TERMINATE", /* 0x3E1 */
591 "WM_DDE_ADVISE", /* 0x3E2 */
592 "WM_DDE_UNADVISE", /* 0x3E3 */
593 "WM_DDE_ACK", /* 0x3E4 */
594 "WM_DDE_DATA", /* 0x3E5 */
595 "WM_DDE_REQUEST", /* 0x3E6 */
596 "WM_DDE_POKE", /* 0x3E7 */
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000597 "WM_DDE_EXECUTE", /* 0x3E8 */
598 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
599
600
601 /* 0x03f0 */
602 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
603 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
604
605 "WM_USER"
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000606};
607
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000608
Juergen Schmiedd50f6421999-08-15 16:54:58 +0000609#define SPY_MAX_LVMMSGNUM 139
610static const char * const LVMMessageTypeNames[SPY_MAX_LVMMSGNUM + 1] =
611{
612 "LVM_GETBKCOLOR", /* 1000 */
613 "LVM_SETBKCOLOR",
614 "LVM_GETIMAGELIST",
615 "LVM_SETIMAGELIST",
616 "LVM_GETITEMCOUNT",
617 "LVM_GETITEMA",
618 "LVM_SETITEMA",
619 "LVM_INSERTITEMA",
620 "LVM_DELETEITEM",
621 "LVM_DELETEALLITEMS",
622 "LVM_GETCALLBACKMASK",
623 "LVM_SETCALLBACKMASK",
624 "LVM_GETNEXTITEM",
625 "LVM_FINDITEMA",
626 "LVM_GETITEMRECT",
627 "LVM_SETITEMPOSITION",
628 "LVM_GETITEMPOSITION",
629 "LVM_GETSTRINGWIDTHA",
630 "LVM_HITTEST",
631 "LVM_ENSUREVISIBLE",
632 "LVM_SCROLL",
633 "LVM_REDRAWITEMS",
634 "LVM_ARRANGE",
635 "LVM_EDITLABELA",
636 "LVM_GETEDITCONTROL",
637 "LVM_GETCOLUMNA",
638 "LVM_SETCOLUMNA",
639 "LVM_INSERTCOLUMNA",
640 "LVM_DELETECOLUMN",
641 "LVM_GETCOLUMNWIDTH",
642 "LVM_SETCOLUMNWIDTH",
643 "LVM_GETHEADER",
644 "LVM_CREATEDRAGIMAGE",
645 "LVM_GETVIEWRECT",
646 "LVM_GETTEXTCOLOR",
647 "LVM_SETTEXTCOLOR",
648 "LVM_GETTEXTBKCOLOR",
649 "LVM_SETTEXTBKCOLOR",
650 "LVM_GETTOPINDEX",
651 "LVM_GETCOUNTPERPAGE",
652 "LVM_GETORIGIN",
653 "LVM_UPDATE",
654 "LVM_SETITEMSTATE",
655 "LVM_GETITEMSTATE",
656 "LVM_GETITEMTEXTA",
657 "LVM_SETITEMTEXTA",
658 "LVM_SETITEMCOUNT",
659 "LVM_SORTITEMS",
660 "LVM_SETITEMPOSITION32",
661 "LVM_GETSELECTEDCOUNT",
662 "LVM_GETITEMSPACING",
663 "LVM_GETISEARCHSTRINGA",
664 "LVM_SETICONSPACING",
665 "LVM_SETEXTENDEDLISTVIEWSTYLE",
666 "LVM_GETEXTENDEDLISTVIEWSTYLE",
667 "LVM_GETSUBITEMRECT",
668 "LVM_SUBITEMHITTEST",
669 "LVM_SETCOLUMNORDERARRAY",
670 "LVM_GETCOLUMNORDERARRAY",
671 "LVM_SETHOTITEM",
672 "LVM_GETHOTITEM",
673 "LVM_SETHOTCURSOR",
674 "LVM_GETHOTCURSOR",
675 "LVM_APPROXIMATEVIEWRECT",
676 "LVM_SETWORKAREAS",
677 "LVM_GETSELECTIONMARK",
678 "LVM_SETSELECTIONMARK",
679 "LVM_SETBKIMAGEA",
680 "LVM_GETBKIMAGEA",
681 "LVM_GETWORKAREAS",
682 "LVM_SETHOVERTIME",
683 "LVM_GETHOVERTIME",
684 "LVM_GETNUMBEROFWORKAREAS",
685 "LVM_SETTOOLTIPS",
686 "LVM_GETITEMW",
687 "LVM_SETITEMW",
688 "LVM_INSERTITEMW",
689 "LVM_GETTOOLTIPS",
690 NULL,
691 NULL,
692 NULL,
693 NULL,
694 "LVM_FINDITEMW",
695 NULL,
696 NULL,
697 NULL,
698 "LVM_GETSTRINGWIDTHW",
699 NULL,
700 NULL,
701 NULL,
702 NULL,
703 NULL,
704 NULL,
705 NULL,
706 "LVM_GETCOLUMNW",
707 "LVM_SETCOLUMNW",
708 "LVM_INSERTCOLUMNW",
709 NULL,
710 NULL,
711 NULL,
712 NULL,
713 NULL,
714 NULL,
715 NULL,
716 NULL,
717 NULL,
718 NULL,
719 NULL,
720 NULL,
721 NULL,
722 NULL,
723 NULL,
724 NULL,
725 NULL,
726 "LVM_GETITEMTEXTW",
727 "LVM_SETITEMTEXTW",
728 "LVM_GETISEARCHSTRINGW",
729 "LVM_EDITLABELW",
730 NULL,
731 NULL,
732 NULL,
733 NULL,
734 NULL,
735 NULL,
736 NULL,
737 NULL,
738 NULL,
739 NULL,
740 NULL,
741 NULL,
742 NULL,
743 NULL,
744 NULL,
745 NULL,
746 NULL,
747 NULL,
748 NULL,
749 NULL,
750 "LVM_SETBKIMAGEW",
751 "LVM_GETBKIMAGEW" /* 0x108B */
752};
753
754#define SPY_MAX_CCMMSGNUM 6
755static const char * const CCMMessageTypeNames[SPY_MAX_CCMMSGNUM + 1] =
756{
757 NULL, /* 0x2000 */
758 "CCM_SETBKCOLOR",
759 "CCM_SETCOLORSCHEME",
760 "CCM_GETCOLORSCHEME",
761 "CCM_GETDROPTARGET",
762 "CCM_SETUNICODEFORMAT",
763 "CCM_GETUNICODEFORMAT"
764};
765
Alexandre Julliard8bbf8181996-09-13 16:50:47 +0000766static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
Alexandre Julliard77b99181997-09-14 17:17:23 +0000767static BOOL16 SPY_ExcludeDWP = 0;
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000768static int SPY_IndentLevel = 0;
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000769
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000770#define SPY_EXCLUDE(msg) \
771 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000772
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000773/***********************************************************************
774 * SPY_GetMsgName
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000775 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000776const char *SPY_GetMsgName( UINT msg )
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000777{
Alexandre Julliard77b99181997-09-14 17:17:23 +0000778 static char msg_buffer[20];
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000779
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000780 if (msg <= SPY_MAX_MSGNUM)
781 {
782 if (!MessageTypeNames[msg]) return "???";
783 return MessageTypeNames[msg];
784 }
Juergen Schmiedd50f6421999-08-15 16:54:58 +0000785
786 if (msg >= LVM_FIRST && msg <= LVM_FIRST + SPY_MAX_LVMMSGNUM)
787 {
788 if (!LVMMessageTypeNames[msg-LVM_FIRST]) return "LVM_?";
789 return LVMMessageTypeNames[msg-LVM_FIRST];
790 }
791
792 if (msg >= CCM_FIRST && msg <= CCM_FIRST + SPY_MAX_CCMMSGNUM)
793 {
794 if (!CCMMessageTypeNames[msg-CCM_FIRST]) return "???";
795 return CCMMessageTypeNames[msg-CCM_FIRST];
796 }
797
Alexandre Julliard77b99181997-09-14 17:17:23 +0000798 sprintf( msg_buffer, "WM_USER+%04x", msg - WM_USER );
799 return msg_buffer;
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000800}
801
Alexandre Julliard77b99181997-09-14 17:17:23 +0000802/***********************************************************************
803 * SPY_GetWndName
804 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000805const char *SPY_GetWndName( HWND hwnd )
Alexandre Julliard77b99181997-09-14 17:17:23 +0000806{
807 static char wnd_buffer[16];
808
809 WND* pWnd = WIN_FindWndPtr( hwnd );
810 if( pWnd )
811 {
Alexandre Julliarda3960291999-02-26 11:11:13 +0000812 INT n = sizeof(wnd_buffer) - 6;
Alexandre Julliard77b99181997-09-14 17:17:23 +0000813 LPSTR p = wnd_buffer;
814 LPSTR src;
815
816 char postfix;
817
818 if( pWnd->text && pWnd->text[0] != '\0' )
819 {
820 src = pWnd->text;
821 *(p++) = postfix = '\"';
822 while ((n-- > 1) && *src) *p++ = *src++;
823 }
824 else /* get class name */
825 {
Alexandre Julliarda3960291999-02-26 11:11:13 +0000826 INT len;
Alexandre Julliard77b99181997-09-14 17:17:23 +0000827
828 *(p++)='{';
Patrik Stridvall4bf33541999-06-12 14:52:15 +0000829 GlobalGetAtomNameA((ATOM) GetClassWord(pWnd->hwndSelf, GCW_ATOM), p, n + 1);
Alexandre Julliarda3960291999-02-26 11:11:13 +0000830 src = p += (len = lstrlenA(p));
Alexandre Julliard77b99181997-09-14 17:17:23 +0000831 if( len >= n ) src = wnd_buffer; /* something nonzero */
832 postfix = '}';
833 }
834 if( *src ) for( n = 0; n < 3; n++ ) *(p++)='.';
835 *(p++) = postfix;
836 *(p++) = '\0';
Francois Boisvert6b1b41c1999-03-14 17:25:32 +0000837 WIN_ReleaseWndPtr(pWnd);
838
Alexandre Julliard77b99181997-09-14 17:17:23 +0000839 }
Alexandre Julliarda3960291999-02-26 11:11:13 +0000840 else lstrcpyA( wnd_buffer, "\"NULL\"" );
Alexandre Julliard77b99181997-09-14 17:17:23 +0000841 return wnd_buffer;
842}
Juergen Schmied155168e1999-05-22 10:32:09 +0000843/***********************************************************************
844 * SPY_DumpStructure
845 */
846void SPY_DumpStructure (UINT msg, LPARAM structure)
847{
848 switch (msg)
849 {
850 case WM_DRAWITEM:
851 { DRAWITEMSTRUCT *lpdis = (DRAWITEMSTRUCT*) structure;
Alexandre Julliard61fece01999-06-26 19:09:08 +0000852 TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n", lpdis->CtlType, lpdis->CtlID);
853 TRACE("itemID=0x%08x itemAction=0x%08x itemState=0x%08x\n", lpdis->itemID, lpdis->itemAction, lpdis->itemState);
854 TRACE("hWnd=0x%04x hDC=0x%04x (%d,%d)-(%d,%d) itemData=0x%08lx\n",
Juergen Schmied155168e1999-05-22 10:32:09 +0000855 lpdis->hwndItem, lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, lpdis->rcItem.right, lpdis->rcItem.bottom, lpdis->itemData);
856 }
857 break;
858 case WM_MEASUREITEM:
859 { MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) structure;
Alexandre Julliard61fece01999-06-26 19:09:08 +0000860 TRACE("MEASUREITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n", lpmis->CtlType, lpmis->CtlID);
861 TRACE("itemID=0x%08x itemWidth=0x%08x itemHeight=0x%08x\n", lpmis->itemID, lpmis->itemWidth, lpmis->itemHeight);
862 TRACE("itemData=0x%08lx\n", lpmis->itemData);
Juergen Schmied155168e1999-05-22 10:32:09 +0000863 }
864 break;
865 case WM_NOTIFY:
866 { NMHDR * pnmh = (NMHDR*) structure;
Alexandre Julliard61fece01999-06-26 19:09:08 +0000867 TRACE("NMHDR hwndFrom=0x%08x idFrom=0x%08x code=0x%08x\n", pnmh->hwndFrom, pnmh->idFrom, pnmh->code);
Juergen Schmied155168e1999-05-22 10:32:09 +0000868 }
869 default:
870 break;
871 }
872
873}
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000874/***********************************************************************
875 * SPY_EnterMessage
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000876 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000877void SPY_EnterMessage( INT iFlag, HWND hWnd, UINT msg,
878 WPARAM wParam, LPARAM lParam )
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000879{
Alexandre Julliard77b99181997-09-14 17:17:23 +0000880 LPCSTR pname;
881
Alexandre Julliarda69b88b1998-03-15 20:29:56 +0000882 if (!TRACE_ON(message) || SPY_EXCLUDE(msg)) return;
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000883
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000884 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000885 switch(iFlag)
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000886 {
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000887 case SPY_DISPATCHMESSAGE16:
Alexandre Julliard77b99181997-09-14 17:17:23 +0000888 pname = SPY_GetWndName(hWnd);
Alexandre Julliard61fece01999-06-26 19:09:08 +0000889 TRACE("%*s(%04x) %-16s message [%04x] %s dispatched wp=%04x lp=%08lx\n",
Alexandre Julliard77b99181997-09-14 17:17:23 +0000890 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000891 wParam, lParam);
892 break;
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000893
Alexandre Julliarda3960291999-02-26 11:11:13 +0000894 case SPY_DISPATCHMESSAGE:
Alexandre Julliard77b99181997-09-14 17:17:23 +0000895 pname = SPY_GetWndName(hWnd);
Alexandre Julliard61fece01999-06-26 19:09:08 +0000896 TRACE("%*s(%08x) %-16s message [%04x] %s dispatched wp=%08x lp=%08lx\n",
Alexandre Julliard77b99181997-09-14 17:17:23 +0000897 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000898 wParam, lParam);
899 break;
900
901 case SPY_SENDMESSAGE16:
Alexandre Julliarda3960291999-02-26 11:11:13 +0000902 case SPY_SENDMESSAGE:
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000903 {
904 char taskName[30];
Alexandre Julliard8bbf8181996-09-13 16:50:47 +0000905 HTASK16 hTask = GetWindowTask16(hWnd);
Alexandre Julliard77b99181997-09-14 17:17:23 +0000906
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000907 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
908 else if (!hTask) strcpy( taskName, "Wine" );
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000909 else
910 {
911 sprintf( taskName, "task %04x ???", hTask );
Alexandre Julliarda3960291999-02-26 11:11:13 +0000912 GetModuleName16( hTask, taskName + 10, sizeof(taskName) - 10 );
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000913 }
Alexandre Julliard77b99181997-09-14 17:17:23 +0000914 pname = SPY_GetWndName(hWnd);
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000915
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000916 if (iFlag == SPY_SENDMESSAGE16)
Alexandre Julliard61fece01999-06-26 19:09:08 +0000917 TRACE("%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
Alexandre Julliarda69b88b1998-03-15 20:29:56 +0000918 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
919 taskName, wParam, lParam );
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000920 else
Alexandre Julliard61fece01999-06-26 19:09:08 +0000921 { TRACE("%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
Alexandre Julliarda69b88b1998-03-15 20:29:56 +0000922 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
923 taskName, wParam, lParam );
Juergen Schmied155168e1999-05-22 10:32:09 +0000924 SPY_DumpStructure(msg, lParam);
925 }
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000926 }
927 break;
928
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000929 case SPY_DEFWNDPROC16:
Alexandre Julliard77b99181997-09-14 17:17:23 +0000930 if( SPY_ExcludeDWP ) return;
Alexandre Julliard61fece01999-06-26 19:09:08 +0000931 TRACE("%*s(%04x) DefWindowProc16: %s [%04x] wp=%04x lp=%08lx\n",
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000932 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
933 msg, wParam, lParam );
934 break;
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000935
Alexandre Julliarda3960291999-02-26 11:11:13 +0000936 case SPY_DEFWNDPROC:
Alexandre Julliard77b99181997-09-14 17:17:23 +0000937 if( SPY_ExcludeDWP ) return;
Alexandre Julliard61fece01999-06-26 19:09:08 +0000938 TRACE("%*s(%08x) DefWindowProc32: %s [%04x] wp=%08x lp=%08lx\n",
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000939 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
940 msg, wParam, lParam );
941 break;
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000942 }
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000943 SPY_IndentLevel += SPY_INDENT_UNIT;
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000944}
945
946
947/***********************************************************************
948 * SPY_ExitMessage
949 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000950void SPY_ExitMessage( INT iFlag, HWND hWnd, UINT msg, LRESULT lReturn )
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000951{
Alexandre Julliard77b99181997-09-14 17:17:23 +0000952 LPCSTR pname;
953
Alexandre Julliarda69b88b1998-03-15 20:29:56 +0000954 if (!TRACE_ON(message) || SPY_EXCLUDE(msg) ||
Alexandre Julliarda3960291999-02-26 11:11:13 +0000955 (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND)) )
Alexandre Julliard77b99181997-09-14 17:17:23 +0000956 return;
957
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000958 if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
959
960 switch(iFlag)
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000961 {
Alexandre Julliard77b99181997-09-14 17:17:23 +0000962 case SPY_RESULT_DEFWND16:
Alexandre Julliard61fece01999-06-26 19:09:08 +0000963 TRACE(" %*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
Alexandre Julliard77b99181997-09-14 17:17:23 +0000964 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
965 break;
966
Alexandre Julliarda3960291999-02-26 11:11:13 +0000967 case SPY_RESULT_DEFWND:
Alexandre Julliard61fece01999-06-26 19:09:08 +0000968 TRACE(" %*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n",
Alexandre Julliard77b99181997-09-14 17:17:23 +0000969 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
970 break;
971
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000972 case SPY_RESULT_OK16:
Alexandre Julliard77b99181997-09-14 17:17:23 +0000973 pname = SPY_GetWndName(hWnd);
Alexandre Julliard61fece01999-06-26 19:09:08 +0000974 TRACE(" %*s(%04x) %-16s message [%04x] %s returned %08lx\n",
Alexandre Julliard77b99181997-09-14 17:17:23 +0000975 SPY_IndentLevel, "", hWnd, pname, msg,
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000976 SPY_GetMsgName( msg ), lReturn );
977 break;
Alexandre Julliard77b99181997-09-14 17:17:23 +0000978
Alexandre Julliarda3960291999-02-26 11:11:13 +0000979 case SPY_RESULT_OK:
Alexandre Julliard77b99181997-09-14 17:17:23 +0000980 pname = SPY_GetWndName(hWnd);
Alexandre Julliard61fece01999-06-26 19:09:08 +0000981 TRACE(" %*s(%08x) %-16s message [%04x] %s returned %08lx\n",
Alexandre Julliard77b99181997-09-14 17:17:23 +0000982 SPY_IndentLevel, "", hWnd, pname, msg,
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000983 SPY_GetMsgName( msg ), lReturn );
984 break;
Alexandre Julliard77b99181997-09-14 17:17:23 +0000985
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000986 case SPY_RESULT_INVALIDHWND16:
Alexandre Julliard77b99181997-09-14 17:17:23 +0000987 pname = SPY_GetWndName(hWnd);
Alexandre Julliard61fece01999-06-26 19:09:08 +0000988 WARN(" %*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
Alexandre Julliard77b99181997-09-14 17:17:23 +0000989 SPY_IndentLevel, "", hWnd, pname, msg,
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000990 SPY_GetMsgName( msg ) );
991 break;
Alexandre Julliard77b99181997-09-14 17:17:23 +0000992
Alexandre Julliarda3960291999-02-26 11:11:13 +0000993 case SPY_RESULT_INVALIDHWND:
Alexandre Julliard77b99181997-09-14 17:17:23 +0000994 pname = SPY_GetWndName(hWnd);
Alexandre Julliard61fece01999-06-26 19:09:08 +0000995 WARN(" %*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
Alexandre Julliard77b99181997-09-14 17:17:23 +0000996 SPY_IndentLevel, "", hWnd, pname, msg,
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000997 SPY_GetMsgName( msg ) );
998 break;
999 }
Alexandre Julliardcdd09231994-01-12 11:12:51 +00001000}
1001
Alexandre Julliardb817f4f1996-03-14 18:08:34 +00001002
1003/***********************************************************************
1004 * SPY_Init
Alexandre Julliardcdd09231994-01-12 11:12:51 +00001005 */
Alexandre Julliardb817f4f1996-03-14 18:08:34 +00001006int SPY_Init(void)
Alexandre Julliardcdd09231994-01-12 11:12:51 +00001007{
Alexandre Julliardb817f4f1996-03-14 18:08:34 +00001008 int i;
Alexandre Julliard23946ad1997-06-16 17:43:53 +00001009 char buffer[1024];
Alexandre Julliardaca05781994-10-17 18:12:41 +00001010
Alexandre Julliarda69b88b1998-03-15 20:29:56 +00001011 if (!TRACE_ON(message)) return TRUE;
Alexandre Julliard3db94ef1997-09-28 17:43:24 +00001012
Alexandre Julliardb817f4f1996-03-14 18:08:34 +00001013 PROFILE_GetWineIniString( "Spy", "Include", "", buffer, sizeof(buffer) );
1014 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
1015 {
Alexandre Julliard61fece01999-06-26 19:09:08 +00001016 TRACE("Include=%s\n", buffer );
Alexandre Julliardb817f4f1996-03-14 18:08:34 +00001017 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
1018 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
1019 }
Alexandre Julliardaf0bae51995-10-03 17:06:08 +00001020
Alexandre Julliardb817f4f1996-03-14 18:08:34 +00001021 PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer, sizeof(buffer) );
1022 if (buffer[0])
1023 {
Alexandre Julliard61fece01999-06-26 19:09:08 +00001024 TRACE("Exclude=%s\n", buffer );
Alexandre Julliardb817f4f1996-03-14 18:08:34 +00001025 if (!strcmp( buffer, "EXCLUDEALL" ))
1026 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
1027 else
1028 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
1029 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
1030 }
Alexandre Julliard77b99181997-09-14 17:17:23 +00001031
1032 SPY_ExcludeDWP = PROFILE_GetWineIniInt( "Spy", "ExcludeDWP", 0 );
1033
Alexandre Julliardb817f4f1996-03-14 18:08:34 +00001034 return 1;
Alexandre Julliardcdd09231994-01-12 11:12:51 +00001035}