comctl32/treeview: Avoid a NULL pointer dereference.
[wine.git] / dlls / user32 / spy.c
blobeb126e3dd043394dc6f07a77aa7ea0025b708924
1 /*
2 * Message spying routines
4 * Copyright 1994, Bob Amstadt
5 * 1995, Alex Korobka
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include <stdlib.h>
23 #include <string.h>
24 #include <stdarg.h>
25 #include <stdio.h>
26 #include "windef.h"
27 #include "winbase.h"
28 #include "wingdi.h"
29 #include "winreg.h"
30 #include "wownt32.h"
31 #include "wine/unicode.h"
32 #include "win.h"
33 #include "user_private.h"
34 #include "wine/debug.h"
35 #include "commctrl.h"
36 #include "commdlg.h"
37 #include "richedit.h"
39 WINE_DEFAULT_DEBUG_CHANNEL(message);
41 #define SPY_MAX_MSGNUM WM_USER
42 #define SPY_INDENT_UNIT 4 /* 4 spaces */
44 #define DEBUG_SPY 0
46 static const char * const ClassLongOffsetNames[] =
48 "GCLP_MENUNAME", /* -8 */
49 "GCLP_HBRBACKGROUND", /* -10 */
50 "GCLP_HCURSOR", /* -12 */
51 "GCLP_HICON", /* -14 */
52 "GCLP_HMODULE", /* -16 */
53 "GCL_CBWNDEXTRA", /* -18 */
54 "GCL_CBCLSEXTRA", /* -20 */
55 "?",
56 "GCLP_WNDPROC", /* -24 */
57 "GCL_STYLE", /* -26 */
58 "?",
59 "?",
60 "GCW_ATOM", /* -32 */
61 "GCLP_HICONSM", /* -34 */
64 static const char * const MessageTypeNames[SPY_MAX_MSGNUM + 1] =
66 "WM_NULL", /* 0x00 */
67 "WM_CREATE",
68 "WM_DESTROY",
69 "WM_MOVE",
70 "wm_sizewait",
71 "WM_SIZE",
72 "WM_ACTIVATE",
73 "WM_SETFOCUS",
74 "WM_KILLFOCUS",
75 "WM_SETVISIBLE",
76 "WM_ENABLE",
77 "WM_SETREDRAW",
78 "WM_SETTEXT",
79 "WM_GETTEXT",
80 "WM_GETTEXTLENGTH",
81 "WM_PAINT",
82 "WM_CLOSE", /* 0x10 */
83 "WM_QUERYENDSESSION",
84 "WM_QUIT",
85 "WM_QUERYOPEN",
86 "WM_ERASEBKGND",
87 "WM_SYSCOLORCHANGE",
88 "WM_ENDSESSION",
89 "wm_systemerror",
90 "WM_SHOWWINDOW",
91 "WM_CTLCOLOR",
92 "WM_WININICHANGE",
93 "WM_DEVMODECHANGE",
94 "WM_ACTIVATEAPP",
95 "WM_FONTCHANGE",
96 "WM_TIMECHANGE",
97 "WM_CANCELMODE",
98 "WM_SETCURSOR", /* 0x20 */
99 "WM_MOUSEACTIVATE",
100 "WM_CHILDACTIVATE",
101 "WM_QUEUESYNC",
102 "WM_GETMINMAXINFO",
103 "wm_unused3",
104 "wm_painticon",
105 "WM_ICONERASEBKGND",
106 "WM_NEXTDLGCTL",
107 "wm_alttabactive",
108 "WM_SPOOLERSTATUS",
109 "WM_DRAWITEM",
110 "WM_MEASUREITEM",
111 "WM_DELETEITEM",
112 "WM_VKEYTOITEM",
113 "WM_CHARTOITEM",
114 "WM_SETFONT", /* 0x30 */
115 "WM_GETFONT",
116 "WM_SETHOTKEY",
117 "WM_GETHOTKEY",
118 "wm_filesyschange",
119 "wm_isactiveicon",
120 "wm_queryparkicon",
121 "WM_QUERYDRAGICON",
122 "wm_querysavestate",
123 "WM_COMPAREITEM",
124 "wm_testing",
125 NULL,
126 NULL,
127 "WM_GETOBJECT", /* 0x3d */
128 "wm_activateshellwindow",
129 NULL,
131 NULL, /* 0x40 */
132 "wm_compacting", NULL, NULL,
133 "WM_COMMNOTIFY", NULL,
134 "WM_WINDOWPOSCHANGING", /* 0x0046 */
135 "WM_WINDOWPOSCHANGED", /* 0x0047 */
136 "WM_POWER", NULL,
137 "WM_COPYDATA",
138 "WM_CANCELJOURNAL", NULL, NULL,
139 "WM_NOTIFY", NULL,
141 /* 0x0050 */
142 "WM_INPUTLANGCHANGEREQUEST",
143 "WM_INPUTLANGCHANGE",
144 "WM_TCARD",
145 "WM_HELP",
146 "WM_USERCHANGED",
147 "WM_NOTIFYFORMAT", NULL, NULL,
148 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
150 /* 0x0060 */
151 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
152 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
154 /* 0x0070 */
155 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
156 NULL, NULL, NULL,
157 "WM_CONTEXTMENU",
158 "WM_STYLECHANGING",
159 "WM_STYLECHANGED",
160 "WM_DISPLAYCHANGE",
161 "WM_GETICON",
163 "WM_SETICON", /* 0x0080 */
164 "WM_NCCREATE", /* 0x0081 */
165 "WM_NCDESTROY", /* 0x0082 */
166 "WM_NCCALCSIZE", /* 0x0083 */
167 "WM_NCHITTEST", /* 0x0084 */
168 "WM_NCPAINT", /* 0x0085 */
169 "WM_NCACTIVATE", /* 0x0086 */
170 "WM_GETDLGCODE", /* 0x0087 */
171 "WM_SYNCPAINT",
172 "WM_SYNCTASK", NULL, NULL, NULL, NULL, NULL, NULL,
174 /* 0x0090 */
175 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
176 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
178 /* 0x00A0 */
179 "WM_NCMOUSEMOVE", /* 0x00a0 */
180 "WM_NCLBUTTONDOWN", /* 0x00a1 */
181 "WM_NCLBUTTONUP", /* 0x00a2 */
182 "WM_NCLBUTTONDBLCLK", /* 0x00a3 */
183 "WM_NCRBUTTONDOWN", /* 0x00a4 */
184 "WM_NCRBUTTONUP", /* 0x00a5 */
185 "WM_NCRBUTTONDBLCLK", /* 0x00a6 */
186 "WM_NCMBUTTONDOWN", /* 0x00a7 */
187 "WM_NCMBUTTONUP", /* 0x00a8 */
188 "WM_NCMBUTTONDBLCLK", /* 0x00a9 */
189 NULL, /* 0x00aa */
190 "WM_NCXBUTTONDOWN", /* 0x00ab */
191 "WM_NCXBUTTONUP", /* 0x00ac */
192 "WM_NCXBUTTONDBLCLK", /* 0x00ad */
193 NULL, /* 0x00ae */
194 NULL, /* 0x00af */
196 /* 0x00B0 - Win32 Edit controls */
197 "EM_GETSEL", /* 0x00b0 */
198 "EM_SETSEL", /* 0x00b1 */
199 "EM_GETRECT", /* 0x00b2 */
200 "EM_SETRECT", /* 0x00b3 */
201 "EM_SETRECTNP", /* 0x00b4 */
202 "EM_SCROLL", /* 0x00b5 */
203 "EM_LINESCROLL", /* 0x00b6 */
204 "EM_SCROLLCARET", /* 0x00b7 */
205 "EM_GETMODIFY", /* 0x00b8 */
206 "EM_SETMODIFY", /* 0x00b9 */
207 "EM_GETLINECOUNT", /* 0x00ba */
208 "EM_LINEINDEX", /* 0x00bb */
209 "EM_SETHANDLE", /* 0x00bc */
210 "EM_GETHANDLE", /* 0x00bd */
211 "EM_GETTHUMB", /* 0x00be */
212 NULL, /* 0x00bf */
214 NULL, /* 0x00c0 */
215 "EM_LINELENGTH", /* 0x00c1 */
216 "EM_REPLACESEL", /* 0x00c2 */
217 NULL, /* 0x00c3 */
218 "EM_GETLINE", /* 0x00c4 */
219 "EM_LIMITTEXT", /* 0x00c5 */
220 "EM_CANUNDO", /* 0x00c6 */
221 "EM_UNDO", /* 0x00c7 */
222 "EM_FMTLINES", /* 0x00c8 */
223 "EM_LINEFROMCHAR", /* 0x00c9 */
224 NULL, /* 0x00ca */
225 "EM_SETTABSTOPS", /* 0x00cb */
226 "EM_SETPASSWORDCHAR", /* 0x00cc */
227 "EM_EMPTYUNDOBUFFER", /* 0x00cd */
228 "EM_GETFIRSTVISIBLELINE", /* 0x00ce */
229 "EM_SETREADONLY", /* 0x00cf */
231 "EM_SETWORDBREAKPROC", /* 0x00d0 */
232 "EM_GETWORDBREAKPROC", /* 0x00d1 */
233 "EM_GETPASSWORDCHAR", /* 0x00d2 */
234 "EM_SETMARGINS", /* 0x00d3 */
235 "EM_GETMARGINS", /* 0x00d4 */
236 "EM_GETLIMITTEXT", /* 0x00d5 */
237 "EM_POSFROMCHAR", /* 0x00d6 */
238 "EM_CHARFROMPOS", /* 0x00d7 */
239 "EM_SETIMESTATUS", /* 0x00d8 */
240 "EM_GETIMESTATUS", /* 0x00d9 */
241 NULL, NULL, NULL, NULL, NULL, NULL,
243 /* 0x00E0 - Win32 Scrollbars */
244 "SBM_SETPOS", /* 0x00e0 */
245 "SBM_GETPOS", /* 0x00e1 */
246 "SBM_SETRANGE", /* 0x00e2 */
247 "SBM_GETRANGE", /* 0x00e3 */
248 "SBM_ENABLE_ARROWS", /* 0x00e4 */
249 NULL,
250 "SBM_SETRANGEREDRAW", /* 0x00e6 */
251 NULL, NULL,
252 "SBM_SETSCROLLINFO", /* 0x00e9 */
253 "SBM_GETSCROLLINFO", /* 0x00ea */
254 NULL, NULL, NULL, NULL, NULL,
256 /* 0x00F0 - Win32 Buttons */
257 "BM_GETCHECK", /* 0x00f0 */
258 "BM_SETCHECK", /* 0x00f1 */
259 "BM_GETSTATE", /* 0x00f2 */
260 "BM_SETSTATE", /* 0x00f3 */
261 "BM_SETSTYLE", /* 0x00f4 */
262 "BM_CLICK", /* 0x00f5 */
263 "BM_GETIMAGE", /* 0x00f6 */
264 "BM_SETIMAGE", /* 0x00f7 */
265 NULL, NULL, NULL, NULL, NULL, NULL,
266 "WM_INPUT_DEVICE_CHANGE", /* 0x00fe */
267 "WM_INPUT", /* 0x00ff */
269 "WM_KEYDOWN", /* 0x0100 */
270 "WM_KEYUP", /* 0x0101 */
271 "WM_CHAR", /* 0x0102 */
272 "WM_DEADCHAR", /* 0x0103 */
273 "WM_SYSKEYDOWN", /* 0x0104 */
274 "WM_SYSKEYUP", /* 0x0105 */
275 "WM_SYSCHAR", /* 0x0106 */
276 "WM_SYSDEADCHAR", /* 0x0107 */
277 NULL,
278 "WM_UNICHAR", /* 0x0109 */
279 "WM_CONVERTREQUEST", /* 0x010a */
280 "WM_CONVERTRESULT", /* 0x010b */
281 "WM_INTERIM", /* 0x010c */
282 "WM_IME_STARTCOMPOSITION", /* 0x010d */
283 "WM_IME_ENDCOMPOSITION", /* 0x010e */
284 "WM_IME_COMPOSITION", /* 0x010f */
286 "WM_INITDIALOG", /* 0x0110 */
287 "WM_COMMAND", /* 0x0111 */
288 "WM_SYSCOMMAND", /* 0x0112 */
289 "WM_TIMER", /* 0x0113 */
290 "WM_HSCROLL", /* 0x0114 */
291 "WM_VSCROLL", /* 0x0115 */
292 "WM_INITMENU", /* 0x0116 */
293 "WM_INITMENUPOPUP", /* 0x0117 */
294 "WM_SYSTIMER", /* 0x0118 */
295 NULL, NULL, NULL, NULL, NULL, NULL,
296 "WM_MENUSELECT", /* 0x011f */
298 "WM_MENUCHAR", /* 0x0120 */
299 "WM_ENTERIDLE", /* 0x0121 */
301 "WM_MENURBUTTONUP", /* 0x0122 */
302 "WM_MENUDRAG", /* 0x0123 */
303 "WM_MENUGETOBJECT", /* 0x0124 */
304 "WM_UNINITMENUPOPUP", /* 0x0125 */
305 "WM_MENUCOMMAND", /* 0x0126 */
306 "WM_CHANGEUISTATE", /* 0x0127 */
307 "WM_UPDATEUISTATE", /* 0x0128 */
308 "WM_QUERYUISTATE", /* 0x0129 */
310 NULL, NULL, NULL, NULL, NULL, NULL,
312 /* 0x0130 */
313 NULL,
314 "WM_LBTRACKPOINT", /* 0x0131 */
315 "WM_CTLCOLORMSGBOX", /* 0x0132 */
316 "WM_CTLCOLOREDIT", /* 0x0133 */
317 "WM_CTLCOLORLISTBOX", /* 0x0134 */
318 "WM_CTLCOLORBTN", /* 0x0135 */
319 "WM_CTLCOLORDLG", /* 0x0136 */
320 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
321 "WM_CTLCOLORSTATIC", /* 0x0138 */
322 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
324 /* 0x0140 - Win32 Comboboxes */
325 "CB_GETEDITSEL", /* 0x0140 */
326 "CB_LIMITTEXT", /* 0x0141 */
327 "CB_SETEDITSEL", /* 0x0142 */
328 "CB_ADDSTRING", /* 0x0143 */
329 "CB_DELETESTRING", /* 0x0144 */
330 "CB_DIR", /* 0x0145 */
331 "CB_GETCOUNT", /* 0x0146 */
332 "CB_GETCURSEL", /* 0x0147 */
333 "CB_GETLBTEXT", /* 0x0148 */
334 "CB_GETLBTEXTLEN", /* 0x0149 */
335 "CB_INSERTSTRING", /* 0x014a */
336 "CB_RESETCONTENT", /* 0x014b */
337 "CB_FINDSTRING", /* 0x014c */
338 "CB_SELECTSTRING", /* 0x014d */
339 "CB_SETCURSEL", /* 0x014e */
340 "CB_SHOWDROPDOWN", /* 0x014f */
342 "CB_GETITEMDATA", /* 0x0150 */
343 "CB_SETITEMDATA", /* 0x0151 */
344 "CB_GETDROPPEDCONTROLRECT", /* 0x0152 */
345 "CB_SETITEMHEIGHT", /* 0x0153 */
346 "CB_GETITEMHEIGHT", /* 0x0154 */
347 "CB_SETEXTENDEDUI", /* 0x0155 */
348 "CB_GETEXTENDEDUI", /* 0x0156 */
349 "CB_GETDROPPEDSTATE", /* 0x0157 */
350 "CB_FINDSTRINGEXACT", /* 0x0158 */
351 "CB_SETLOCALE", /* 0x0159 */
352 "CB_GETLOCALE", /* 0x015a */
353 "CB_GETTOPINDEX", /* 0x015b */
354 "CB_SETTOPINDEX", /* 0x015c */
355 "CB_GETHORIZONTALEXTENT", /* 0x015d */
356 "CB_SETHORIZONTALEXTENT", /* 0x015e */
357 "CB_GETDROPPEDWIDTH", /* 0x015f */
359 "CB_SETDROPPEDWIDTH", /* 0x0160 */
360 "CB_INITSTORAGE", /* 0x0161 */
361 NULL, NULL, NULL, NULL, NULL, NULL,
362 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
364 /* 0x0170 - Win32 Static controls */
365 "STM_SETICON", /* 0x0170 */
366 "STM_GETICON", /* 0x0171 */
367 "STM_SETIMAGE", /* 0x0172 */
368 "STM_GETIMAGE", /* 0x0173 */
369 NULL, NULL, NULL, NULL,
370 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
372 /* 0x0180 - Win32 Listboxes */
373 "LB_ADDSTRING", /* 0x0180 */
374 "LB_INSERTSTRING", /* 0x0181 */
375 "LB_DELETESTRING", /* 0x0182 */
376 "LB_SELITEMRANGEEX", /* 0x0183 */
377 "LB_RESETCONTENT", /* 0x0184 */
378 "LB_SETSEL", /* 0x0185 */
379 "LB_SETCURSEL", /* 0x0186 */
380 "LB_GETSEL", /* 0x0187 */
381 "LB_GETCURSEL", /* 0x0188 */
382 "LB_GETTEXT", /* 0x0189 */
383 "LB_GETTEXTLEN", /* 0x018a */
384 "LB_GETCOUNT", /* 0x018b */
385 "LB_SELECTSTRING", /* 0x018c */
386 "LB_DIR", /* 0x018d */
387 "LB_GETTOPINDEX", /* 0x018e */
388 "LB_FINDSTRING", /* 0x018f */
390 "LB_GETSELCOUNT", /* 0x0190 */
391 "LB_GETSELITEMS", /* 0x0191 */
392 "LB_SETTABSTOPS", /* 0x0192 */
393 "LB_GETHORIZONTALEXTENT", /* 0x0193 */
394 "LB_SETHORIZONTALEXTENT", /* 0x0194 */
395 "LB_SETCOLUMNWIDTH", /* 0x0195 */
396 "LB_ADDFILE", /* 0x0196 */
397 "LB_SETTOPINDEX", /* 0x0197 */
398 "LB_GETITEMRECT", /* 0x0198 */
399 "LB_GETITEMDATA", /* 0x0199 */
400 "LB_SETITEMDATA", /* 0x019a */
401 "LB_SELITEMRANGE", /* 0x019b */
402 "LB_SETANCHORINDEX", /* 0x019c */
403 "LB_GETANCHORINDEX", /* 0x019d */
404 "LB_SETCARETINDEX", /* 0x019e */
405 "LB_GETCARETINDEX", /* 0x019f */
407 "LB_SETITEMHEIGHT", /* 0x01a0 */
408 "LB_GETITEMHEIGHT", /* 0x01a1 */
409 "LB_FINDSTRINGEXACT", /* 0x01a2 */
410 "LB_CARETON", /* 0x01a3 */
411 "LB_CARETOFF", /* 0x01a4 */
412 "LB_SETLOCALE", /* 0x01a5 */
413 "LB_GETLOCALE", /* 0x01a6 */
414 "LB_SETCOUNT", /* 0x01a7 */
415 "LB_INITSTORAGE", /* 0x01a8 */
416 "LB_ITEMFROMPOINT", /* 0x01a9 */
417 NULL, NULL, NULL, NULL, NULL, NULL,
419 /* 0x01B0 */
420 NULL, NULL,
421 "LB_GETLISTBOXINFO", /* 0x01b2 */
422 NULL, NULL, NULL, NULL, NULL,
423 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
425 /* 0x01C0 */
426 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
427 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
429 /* 0x01D0 */
430 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
431 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
433 /* 0x01E0 */
434 NULL,
435 "MN_GETHMENU", /* 0x01E1 */
436 NULL, NULL, NULL, NULL, NULL, NULL,
437 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
439 /* 0x01F0 */
440 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
441 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
443 "WM_MOUSEMOVE", /* 0x0200 */
444 "WM_LBUTTONDOWN", /* 0x0201 */
445 "WM_LBUTTONUP", /* 0x0202 */
446 "WM_LBUTTONDBLCLK", /* 0x0203 */
447 "WM_RBUTTONDOWN", /* 0x0204 */
448 "WM_RBUTTONUP", /* 0x0205 */
449 "WM_RBUTTONDBLCLK", /* 0x0206 */
450 "WM_MBUTTONDOWN", /* 0x0207 */
451 "WM_MBUTTONUP", /* 0x0208 */
452 "WM_MBUTTONDBLCLK", /* 0x0209 */
453 "WM_MOUSEWHEEL", /* 0x020A */
454 "WM_XBUTTONDOWN", /* 0x020B */
455 "WM_XBUTTONUP", /* 0x020C */
456 "WM_XBUTTONDBLCLK", /* 0x020D */
457 "WM_MOUSEHWHEEL", /* 0x020E */
458 NULL,
460 "WM_PARENTNOTIFY", /* 0x0210 */
461 "WM_ENTERMENULOOP", /* 0x0211 */
462 "WM_EXITMENULOOP", /* 0x0212 */
463 "WM_NEXTMENU", /* 0x0213 */
464 "WM_SIZING",
465 "WM_CAPTURECHANGED",
466 "WM_MOVING", NULL,
467 "WM_POWERBROADCAST",
468 "WM_DEVICECHANGE", NULL, NULL, NULL, NULL, NULL, NULL,
470 "WM_MDICREATE", /* 0x0220 */
471 "WM_MDIDESTROY", /* 0x0221 */
472 "WM_MDIACTIVATE", /* 0x0222 */
473 "WM_MDIRESTORE", /* 0x0223 */
474 "WM_MDINEXT", /* 0x0224 */
475 "WM_MDIMAXIMIZE", /* 0x0225 */
476 "WM_MDITILE", /* 0x0226 */
477 "WM_MDICASCADE", /* 0x0227 */
478 "WM_MDIICONARRANGE", /* 0x0228 */
479 "WM_MDIGETACTIVE", /* 0x0229 */
481 "WM_DROPOBJECT",
482 "WM_QUERYDROPOBJECT",
483 "WM_BEGINDRAG",
484 "WM_DRAGLOOP",
485 "WM_DRAGSELECT",
486 "WM_DRAGMOVE",
488 /* 0x0230*/
489 "WM_MDISETMENU", /* 0x0230 */
490 "WM_ENTERSIZEMOVE", /* 0x0231 */
491 "WM_EXITSIZEMOVE", /* 0x0232 */
492 "WM_DROPFILES", /* 0x0233 */
493 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
494 /* 0x0238*/
495 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
497 /* 0x0240 */
498 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
499 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
501 /* 0x0250 */
502 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
503 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
505 /* 0x0260 */
506 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
507 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
508 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
509 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
511 /* 0x0280 */
512 NULL,
513 "WM_IME_SETCONTEXT", /* 0x0281 */
514 "WM_IME_NOTIFY", /* 0x0282 */
515 "WM_IME_CONTROL", /* 0x0283 */
516 "WM_IME_COMPOSITIONFULL", /* 0x0284 */
517 "WM_IME_SELECT", /* 0x0285 */
518 "WM_IME_CHAR", /* 0x0286 */
519 NULL,
520 "WM_IME_REQUEST", /* 0x0288 */
521 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
522 "WM_IME_KEYDOWN", /* 0x0290 */
523 "WM_IME_KEYUP", /* 0x0291 */
524 NULL, NULL, NULL, NULL, NULL, NULL,
525 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
527 /* 0x02a0 */
528 "WM_NCMOUSEHOVER", /* 0x02A0 */
529 "WM_MOUSEHOVER", /* 0x02A1 */
530 "WM_NCMOUSELEAVE", /* 0x02A2 */
531 "WM_MOUSELEAVE", /* 0x02A3 */
532 NULL, NULL, NULL, NULL, NULL, NULL,
533 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
534 "WM_WTSSESSION_CHANGE", /* 0x02B1 */
535 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
536 NULL, NULL, NULL, NULL, NULL, NULL,
538 /* 0x02c0 */
539 "WM_TABLET_FIRST", /* 0x02c0 */
540 "WM_TABLET_FIRST+1", /* 0x02c1 */
541 "WM_TABLET_FIRST+2", /* 0x02c2 */
542 "WM_TABLET_FIRST+3", /* 0x02c3 */
543 "WM_TABLET_FIRST+4", /* 0x02c4 */
544 "WM_TABLET_FIRST+5", /* 0x02c5 */
545 "WM_TABLET_FIRST+7", /* 0x02c6 */
546 "WM_TABLET_FIRST+8", /* 0x02c7 */
547 "WM_TABLET_FIRST+9", /* 0x02c8 */
548 "WM_TABLET_FIRST+10", /* 0x02c9 */
549 "WM_TABLET_FIRST+11", /* 0x02ca */
550 "WM_TABLET_FIRST+12", /* 0x02cb */
551 "WM_TABLET_FIRST+13", /* 0x02cc */
552 "WM_TABLET_FIRST+14", /* 0x02cd */
553 "WM_TABLET_FIRST+15", /* 0x02ce */
554 "WM_TABLET_FIRST+16", /* 0x02cf */
555 "WM_TABLET_FIRST+17", /* 0x02d0 */
556 "WM_TABLET_FIRST+18", /* 0x02d1 */
557 "WM_TABLET_FIRST+19", /* 0x02d2 */
558 "WM_TABLET_FIRST+20", /* 0x02d3 */
559 "WM_TABLET_FIRST+21", /* 0x02d4 */
560 "WM_TABLET_FIRST+22", /* 0x02d5 */
561 "WM_TABLET_FIRST+23", /* 0x02d6 */
562 "WM_TABLET_FIRST+24", /* 0x02d7 */
563 "WM_TABLET_FIRST+25", /* 0x02d8 */
564 "WM_TABLET_FIRST+26", /* 0x02d9 */
565 "WM_TABLET_FIRST+27", /* 0x02da */
566 "WM_TABLET_FIRST+28", /* 0x02db */
567 "WM_TABLET_FIRST+29", /* 0x02dc */
568 "WM_TABLET_FIRST+30", /* 0x02dd */
569 "WM_TABLET_FIRST+31", /* 0x02de */
570 "WM_TABLET_LAST", /* 0x02df */
572 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
573 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
574 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
575 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
577 "WM_CUT", /* 0x0300 */
578 "WM_COPY",
579 "WM_PASTE",
580 "WM_CLEAR",
581 "WM_UNDO",
582 "WM_RENDERFORMAT",
583 "WM_RENDERALLFORMATS",
584 "WM_DESTROYCLIPBOARD",
585 "WM_DRAWCLIPBOARD",
586 "WM_PAINTCLIPBOARD",
587 "WM_VSCROLLCLIPBOARD",
588 "WM_SIZECLIPBOARD",
589 "WM_ASKCBFORMATNAME",
590 "WM_CHANGECBCHAIN",
591 "WM_HSCROLLCLIPBOARD",
592 "WM_QUERYNEWPALETTE", /* 0x030f*/
594 "WM_PALETTEISCHANGING",
595 "WM_PALETTECHANGED",
596 "WM_HOTKEY", /* 0x0312 */
597 "WM_POPUPSYSTEMMENU", /* 0x0313 */
598 NULL, NULL, NULL,
599 "WM_PRINT", /* 0x0317 */
600 "WM_PRINTCLIENT", /* 0x0318 */
601 "WM_APPCOMMAND", /* 0x0319 */
602 "WM_THEMECHANGED", /* 0x031A */
603 NULL, NULL,
604 "WM_CLIPBOARDUPDATE", /* 0x031D */
605 "WM_DWMCOMPOSITIONCHANGED", /* 0x031E */
606 "WM_DWMNCRENDERINGCHANGED", /* 0x031F */
608 "WM_DWMCOLORIZATIONCOLORCHANGED", /* 0x0320 */
609 "WM_DWMWINDOWMAXIMIZEDCHANGE", /* 0x0321 */
610 NULL, NULL, NULL, NULL, NULL, NULL,
611 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
613 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
614 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
615 "WM_GETTITLEBARINFOEX", /* 0x033F */
617 /* 0x0340 */
618 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
619 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
620 /* 0x0350 */
621 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
622 "WM_HANDHELDFIRST", /* 0x0358 */
623 "WM_HANDHELDFIRST+1", /* 0x0359 */
624 "WM_HANDHELDFIRST+2", /* 0x035A */
625 "WM_HANDHELDFIRST+3", /* 0x035B */
626 "WM_HANDHELDFIRST+4", /* 0x035C */
627 "WM_HANDHELDFIRST+5", /* 0x035D */
628 "WM_HANDHELDFIRST+6", /* 0x035E */
629 "WM_HANDHELDLAST", /* 0x035F */
631 "WM_QUERYAFXWNDPROC", /* 0x0360 WM_AFXFIRST */
632 "WM_SIZEPARENT", /* 0x0361 */
633 "WM_SETMESSAGESTRING", /* 0x0362 */
634 "WM_IDLEUPDATECMDUI", /* 0x0363 */
635 "WM_INITIALUPDATE", /* 0x0364 */
636 "WM_COMMANDHELP", /* 0x0365 */
637 "WM_HELPHITTEST", /* 0x0366 */
638 "WM_EXITHELPMODE", /* 0x0367 */
639 "WM_RECALCPARENT", /* 0x0368 */
640 "WM_SIZECHILD", /* 0x0369 */
641 "WM_KICKIDLE", /* 0x036A */
642 "WM_QUERYCENTERWND", /* 0x036B */
643 "WM_DISABLEMODAL", /* 0x036C */
644 "WM_FLOATSTATUS", /* 0x036D */
645 "WM_ACTIVATETOPLEVEL", /* 0x036E */
646 "WM_QUERY3DCONTROLS", /* 0x036F */
647 NULL,NULL,NULL,
648 "WM_SOCKET_NOTIFY", /* 0x0373 */
649 "WM_SOCKET_DEAD", /* 0x0374 */
650 "WM_POPMESSAGESTRING", /* 0x0375 */
651 "WM_OCC_LOADFROMSTREAM", /* 0x0376 */
652 "WM_OCC_LOADFROMSTORAGE", /* 0x0377 */
653 "WM_OCC_INITNEW", /* 0x0378 */
654 "WM_QUEUE_SENTINEL", /* 0x0379 */
655 "WM_OCC_LOADFROMSTREAM_EX", /* 0x037A */
656 "WM_OCC_LOADFROMSTORAGE_EX", /* 0x037B */
658 NULL,NULL,NULL,
659 "WM_AFXLAST", /* 0x037F */
661 "WM_PENWINFIRST", /* 0x0380 */
662 "WM_RCRESULT", /* 0x0381 */
663 "WM_HOOKRCRESULT", /* 0x0382 */
664 "WM_GLOBALRCCHANGE", /* 0x0383 */
665 "WM_SKB", /* 0x0384 */
666 "WM_HEDITCTL", /* 0x0385 */
667 NULL, NULL,
668 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
669 "WM_PENWINLAST", /* 0x038F */
671 "WM_COALESCE_FIRST", /* 0x0390 */
672 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
673 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
674 "WM_COALESCE_LAST", /* 0x039F */
676 /* 0x03a0 */
677 "MM_JOY1MOVE",
678 "MM_JOY2MOVE",
679 "MM_JOY1ZMOVE",
680 "MM_JOY2ZMOVE",
681 NULL, NULL, NULL, NULL,
682 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
684 /* 0x03b0 */
685 NULL, NULL, NULL, NULL, NULL,
686 "MM_JOY1BUTTONDOWN",
687 "MM_JOY2BUTTONDOWN",
688 "MM_JOY1BUTTONUP",
689 "MM_JOY2BUTTONUP",
690 "MM_MCINOTIFY",
691 NULL,
692 "MM_WOM_OPEN",
693 "MM_WOM_CLOSE",
694 "MM_WOM_DONE",
695 "MM_WIM_OPEN",
696 "MM_WIM_CLOSE",
698 /* 0x03c0 */
699 "MM_WIM_DATA",
700 "MM_MIM_OPEN",
701 "MM_MIM_CLOSE",
702 "MM_MIM_DATA",
703 "MM_MIM_LONGDATA",
704 "MM_MIM_ERROR",
705 "MM_MIM_LONGERROR",
706 "MM_MOM_OPEN",
707 "MM_MOM_CLOSE",
708 "MM_MOM_DONE",
709 NULL, NULL, NULL, NULL, NULL, NULL,
710 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
711 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
713 /* 0x03e0 */
714 "WM_DDE_INITIATE", /* 0x3E0 */
715 "WM_DDE_TERMINATE", /* 0x3E1 */
716 "WM_DDE_ADVISE", /* 0x3E2 */
717 "WM_DDE_UNADVISE", /* 0x3E3 */
718 "WM_DDE_ACK", /* 0x3E4 */
719 "WM_DDE_DATA", /* 0x3E5 */
720 "WM_DDE_REQUEST", /* 0x3E6 */
721 "WM_DDE_POKE", /* 0x3E7 */
722 "WM_DDE_EXECUTE", /* 0x3E8 */
723 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
726 /* 0x03f0 */
727 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
728 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
730 "WM_USER" /* 0x0400 */
734 #define SPY_MAX_LVMMSGNUM 182
735 static const char * const LVMMessageTypeNames[SPY_MAX_LVMMSGNUM + 1] =
737 "LVM_GETBKCOLOR", /* 1000 */
738 "LVM_SETBKCOLOR",
739 "LVM_GETIMAGELIST",
740 "LVM_SETIMAGELIST",
741 "LVM_GETITEMCOUNT",
742 "LVM_GETITEMA",
743 "LVM_SETITEMA",
744 "LVM_INSERTITEMA",
745 "LVM_DELETEITEM",
746 "LVM_DELETEALLITEMS",
747 "LVM_GETCALLBACKMASK",
748 "LVM_SETCALLBACKMASK",
749 "LVM_GETNEXTITEM",
750 "LVM_FINDITEMA",
751 "LVM_GETITEMRECT",
752 "LVM_SETITEMPOSITION",
753 "LVM_GETITEMPOSITION",
754 "LVM_GETSTRINGWIDTHA",
755 "LVM_HITTEST",
756 "LVM_ENSUREVISIBLE",
757 "LVM_SCROLL",
758 "LVM_REDRAWITEMS",
759 "LVM_ARRANGE",
760 "LVM_EDITLABELA",
761 "LVM_GETEDITCONTROL",
762 "LVM_GETCOLUMNA",
763 "LVM_SETCOLUMNA",
764 "LVM_INSERTCOLUMNA",
765 "LVM_DELETECOLUMN",
766 "LVM_GETCOLUMNWIDTH",
767 "LVM_SETCOLUMNWIDTH",
768 "LVM_GETHEADER",
769 NULL,
770 "LVM_CREATEDRAGIMAGE",
771 "LVM_GETVIEWRECT",
772 "LVM_GETTEXTCOLOR",
773 "LVM_SETTEXTCOLOR",
774 "LVM_GETTEXTBKCOLOR",
775 "LVM_SETTEXTBKCOLOR",
776 "LVM_GETTOPINDEX",
777 "LVM_GETCOUNTPERPAGE",
778 "LVM_GETORIGIN",
779 "LVM_UPDATE",
780 "LVM_SETITEMSTATE",
781 "LVM_GETITEMSTATE",
782 "LVM_GETITEMTEXTA",
783 "LVM_SETITEMTEXTA",
784 "LVM_SETITEMCOUNT",
785 "LVM_SORTITEMS",
786 "LVM_SETITEMPOSITION32",
787 "LVM_GETSELECTEDCOUNT",
788 "LVM_GETITEMSPACING",
789 "LVM_GETISEARCHSTRINGA",
790 "LVM_SETICONSPACING",
791 "LVM_SETEXTENDEDLISTVIEWSTYLE",
792 "LVM_GETEXTENDEDLISTVIEWSTYLE",
793 "LVM_GETSUBITEMRECT",
794 "LVM_SUBITEMHITTEST",
795 "LVM_SETCOLUMNORDERARRAY",
796 "LVM_GETCOLUMNORDERARRAY",
797 "LVM_SETHOTITEM",
798 "LVM_GETHOTITEM",
799 "LVM_SETHOTCURSOR",
800 "LVM_GETHOTCURSOR",
801 "LVM_APPROXIMATEVIEWRECT",
802 "LVM_SETWORKAREAS",
803 "LVM_GETSELECTIONMARK",
804 "LVM_SETSELECTIONMARK",
805 "LVM_SETBKIMAGEA",
806 "LVM_GETBKIMAGEA",
807 "LVM_GETWORKAREAS",
808 "LVM_SETHOVERTIME",
809 "LVM_GETHOVERTIME",
810 "LVM_GETNUMBEROFWORKAREAS",
811 "LVM_SETTOOLTIPS",
812 "LVM_GETITEMW",
813 "LVM_SETITEMW",
814 "LVM_INSERTITEMW",
815 "LVM_GETTOOLTIPS",
816 NULL,
817 NULL,
818 NULL,
819 NULL,
820 "LVM_FINDITEMW",
821 NULL,
822 NULL,
823 NULL,
824 "LVM_GETSTRINGWIDTHW",
825 NULL,
826 NULL,
827 NULL,
828 NULL,
829 NULL,
830 NULL,
831 NULL,
832 "LVM_GETCOLUMNW",
833 "LVM_SETCOLUMNW",
834 "LVM_INSERTCOLUMNW",
835 NULL,
836 NULL,
837 NULL,
838 NULL,
839 NULL,
840 NULL,
841 NULL,
842 NULL,
843 NULL,
844 NULL,
845 NULL,
846 NULL,
847 NULL,
848 NULL,
849 NULL,
850 NULL,
851 NULL,
852 "LVM_GETITEMTEXTW",
853 "LVM_SETITEMTEXTW",
854 "LVM_GETISEARCHSTRINGW",
855 "LVM_EDITLABELW",
856 NULL,
857 NULL,
858 NULL,
859 NULL,
860 NULL,
861 NULL,
862 NULL,
863 NULL,
864 NULL,
865 NULL,
866 NULL,
867 NULL,
868 NULL,
869 NULL,
870 NULL,
871 NULL,
872 NULL,
873 NULL,
874 NULL,
875 "LVM_SETBKIMAGEW",
876 "LVM_GETBKIMAGEW", /* 0x108B */
877 "LVM_SETSELECTEDCOLUMN",
878 "LVM_SETTILEWIDTH",
879 "LVM_SETVIEW",
880 "LVM_GETVIEW",
881 NULL,
882 "LVM_INSERTGROUP",
883 NULL,
884 "LVM_SETGROUPINFO",
885 NULL,
886 "LVM_GETGROUPINFO",
887 "LVM_REMOVEGROUP",
888 "LVM_MOVEGROUP",
889 NULL,
890 NULL,
891 "LVM_MOVEITEMTOGROUP",
892 "LVM_SETGROUPMETRICS",
893 "LVM_GETGROUPMETRICS",
894 "LVM_ENABLEGROUPVIEW",
895 "LVM_SORTGROUPS",
896 "LVM_INSERTGROUPSORTED",
897 "LVM_REMOVEALLGROUPS",
898 "LVM_HASGROUP",
899 "LVM_SETTILEVIEWINFO",
900 "LVM_GETTILEVIEWINFO",
901 "LVM_SETTILEINFO",
902 "LVM_GETTILEINFO",
903 "LVM_SETINSERTMARK",
904 "LVM_GETINSERTMARK",
905 "LVM_INSERTMARKHITTEST",
906 "LVM_GETINSERTMARKRECT",
907 "LVM_SETINSERTMARKCOLOR",
908 "LVM_GETINSERTMARKCOLOR",
909 NULL,
910 "LVM_SETINFOTIP",
911 "LVM_GETSELECTEDCOLUMN",
912 "LVM_ISGROUPVIEWENABLED",
913 "LVM_GETOUTLINECOLOR",
914 "LVM_SETOUTLINECOLOR",
915 NULL,
916 "LVM_CANCELEDITLABEL",
917 "LVM_MAPINDEXTOID",
918 "LVM_MAPIDTOINDEX",
919 "LVM_ISITEMVISIBLE"
923 #define SPY_MAX_TVMSGNUM 65
924 static const char * const TVMessageTypeNames[SPY_MAX_TVMSGNUM + 1] =
926 "TVM_INSERTITEMA", /* 1100 */
927 "TVM_DELETEITEM",
928 "TVM_EXPAND",
929 NULL,
930 "TVM_GETITEMRECT",
931 "TVM_GETCOUNT",
932 "TVM_GETINDENT",
933 "TVM_SETINDENT",
934 "TVM_GETIMAGELIST",
935 "TVM_SETIMAGELIST",
936 "TVM_GETNEXTITEM",
937 "TVM_SELECTITEM",
938 "TVM_GETITEMA",
939 "TVM_SETITEMA",
940 "TVM_EDITLABELA",
941 "TVM_GETEDITCONTROL",
942 "TVM_GETVISIBLECOUNT",
943 "TVM_HITTEST",
944 "TVM_CREATEDRAGIMAGE",
945 "TVM_SORTCHILDREN",
946 "TVM_ENSUREVISIBLE",
947 "TVM_SORTCHILDRENCB",
948 "TVM_ENDEDITLABELNOW",
949 "TVM_GETISEARCHSTRINGA",
950 "TVM_SETTOOLTIPS",
951 "TVM_GETTOOLTIPS",
952 "TVM_SETINSERTMARK",
953 "TVM_SETITEMHEIGHT",
954 "TVM_GETITEMHEIGHT",
955 "TVM_SETBKCOLOR",
956 "TVM_SETTEXTCOLOR",
957 "TVM_GETBKCOLOR",
958 "TVM_GETTEXTCOLOR",
959 "TVM_SETSCROLLTIME",
960 "TVM_GETSCROLLTIME",
961 "TVM_UNKNOWN35",
962 "TVM_UNKNOWN36",
963 "TVM_SETINSERTMARKCOLOR",
964 "TVM_GETINSERTMARKCOLOR",
965 "TVM_GETITEMSTATE",
966 "TVM_SETLINECOLOR",
967 "TVM_GETLINECOLOR",
968 NULL,
969 NULL,
970 NULL,
971 NULL,
972 NULL,
973 NULL,
974 NULL,
975 NULL,
976 "TVM_INSERTITEMW",
977 NULL,
978 NULL,
979 NULL,
980 NULL,
981 NULL,
982 NULL,
983 NULL,
984 NULL,
985 NULL,
986 NULL,
987 NULL,
988 "TVM_GETITEMW",
989 "TVM_SETITEMW",
990 "TVM_GETISEARCHSTRINGW",
991 "TVM_EDITLABELW"
995 #define SPY_MAX_HDMMSGNUM 19
996 static const char * const HDMMessageTypeNames[SPY_MAX_HDMMSGNUM + 1] =
998 "HDM_GETITEMCOUNT", /* 1200 */
999 "HDM_INSERTITEMA",
1000 "HDM_DELETEITEM",
1001 "HDM_GETITEMA",
1002 "HDM_SETITEMA",
1003 "HDM_LAYOUT",
1004 "HDM_HITTEST",
1005 "HDM_GETITEMRECT",
1006 "HDM_SETIMAGELIST",
1007 "HDM_GETIMAGELIST",
1008 "HDM_INSERTITEMW",
1009 "HDM_GETITEMW",
1010 "HDM_SETITEMW",
1011 NULL,
1012 NULL,
1013 "HDM_ORDERTOINDEX",
1014 "HDM_CREATEDRAGIMAGE",
1015 "GETORDERARRAYINDEX",
1016 "SETORDERARRAYINDEX",
1017 "SETHOTDIVIDER"
1021 #define SPY_MAX_TCMMSGNUM 62
1022 static const char * const TCMMessageTypeNames[SPY_MAX_TCMMSGNUM + 1] =
1024 NULL, /* 1300 */
1025 NULL,
1026 "TCM_SETIMAGELIST",
1027 "TCM_GETIMAGELIST",
1028 "TCM_GETITEMCOUNT",
1029 "TCM_GETITEMA",
1030 "TCM_SETITEMA",
1031 "TCM_INSERTITEMA",
1032 "TCM_DELETEITEM",
1033 "TCM_DELETEALLITEMS",
1034 "TCM_GETITEMRECT",
1035 "TCM_GETCURSEL",
1036 "TCM_SETCURSEL",
1037 "TCM_HITTEST",
1038 "TCM_SETITEMEXTRA",
1039 NULL,
1040 NULL,
1041 NULL,
1042 NULL,
1043 NULL,
1044 NULL,
1045 NULL,
1046 NULL,
1047 NULL,
1048 NULL,
1049 NULL,
1050 NULL,
1051 NULL,
1052 NULL,
1053 NULL,
1054 NULL,
1055 NULL,
1056 NULL,
1057 NULL,
1058 NULL,
1059 NULL,
1060 NULL,
1061 NULL,
1062 NULL,
1063 NULL,
1064 "TCM_ADJUSTRECT",
1065 "TCM_SETITEMSIZE",
1066 "TCM_REMOVEIMAGE",
1067 "TCM_SETPADDING",
1068 "TCM_GETROWCOUNT",
1069 "TCM_GETTOOLTIPS",
1070 "TCM_SETTOOLTIPS",
1071 "TCM_GETCURFOCUS",
1072 "TCM_SETCURFOCUS",
1073 "TCM_SETMINTABWIDTH",
1074 "TCM_DESELECTALL",
1075 "TCM_HIGHLIGHTITEM",
1076 "TCM_SETEXTENDEDSTYLE",
1077 "TCM_GETEXTENDEDSTYLE",
1078 NULL,
1079 NULL,
1080 NULL,
1081 NULL,
1082 NULL,
1083 NULL,
1084 "TCM_GETITEMW",
1085 "TCM_SETITEMW",
1086 "TCM_INSERTITEMW"
1089 #define SPY_MAX_PGMMSGNUM 13
1090 static const char * const PGMMessageTypeNames[SPY_MAX_PGMMSGNUM + 1] =
1092 NULL, /* 1400 */
1093 "PGM_SETCHILD",
1094 "PGM_RECALCSIZE",
1095 "PGM_FORWARDMOUSE",
1096 "PGM_SETBKCOLOR",
1097 "PGM_GETBKCOLOR",
1098 "PGM_SETBORDER",
1099 "PGM_GETBORDER",
1100 "PGM_SETPOS",
1101 "PGM_GETPOS",
1102 "PGM_SETBUTTONSIZE",
1103 "PGM_GETBUTTONSIZE",
1104 "PGM_GETBUTTONSTATE",
1105 "PGM_GETDROPTARGET"
1109 #define SPY_MAX_CCMMSGNUM 9
1110 static const char * const CCMMessageTypeNames[SPY_MAX_CCMMSGNUM + 1] =
1112 NULL, /* 0x2000 */
1113 "CCM_SETBKCOLOR",
1114 "CCM_SETCOLORSCHEME",
1115 "CCM_GETCOLORSCHEME",
1116 "CCM_GETDROPTARGET",
1117 "CCM_SETUNICODEFORMAT",
1118 "CCM_GETUNICODEFORMAT",
1119 "CCM_SETVERSION",
1120 "CCM_GETVERSION",
1121 "CCM_SETNOTIFYWINDOW"
1124 #define SPY_MAX_WINEMSGNUM (WM_WINE_MOUSE_LL_HOOK - WM_WINE_DESTROYWINDOW)
1125 static const char * const WINEMessageTypeNames[SPY_MAX_WINEMSGNUM + 1] =
1127 "WM_WINE_DESTROYWINDOW",
1128 "WM_WINE_SETWINDOWPOS",
1129 "WM_WINE_SHOWWINDOW",
1130 "WM_WINE_SETPARENT",
1131 "WM_WINE_SETWINDOWLONG",
1132 "WM_WINE_ENABLEWINDOW",
1133 "WM_WINE_SETACTIVEWINDOW",
1134 "WM_WINE_KEYBOARD_LL_HOOK",
1135 "WM_WINE_MOUSE_LL_HOOK",
1138 /* Virtual key names */
1139 #define SPY_MAX_VKKEYSNUM 255
1140 static const char * const VK_KeyNames[SPY_MAX_VKKEYSNUM + 1] =
1142 NULL, /* 0x00 */
1143 "VK_LBUTTON", /* 0x01 */
1144 "VK_RBUTTON", /* 0x02 */
1145 "VK_CANCEL", /* 0x03 */
1146 "VK_MBUTTON", /* 0x04 */
1147 "VK_XBUTTON1", /* 0x05 */
1148 "VK_XBUTTON2", /* 0x06 */
1149 NULL, /* 0x07 */
1150 "VK_BACK", /* 0x08 */
1151 "VK_TAB", /* 0x09 */
1152 NULL, /* 0x0A */
1153 NULL, /* 0x0B */
1154 "VK_CLEAR", /* 0x0C */
1155 "VK_RETURN", /* 0x0D */
1156 NULL, /* 0x0E */
1157 NULL, /* 0x0F */
1158 "VK_SHIFT", /* 0x10 */
1159 "VK_CONTROL", /* 0x11 */
1160 "VK_MENU", /* 0x12 */
1161 "VK_PAUSE", /* 0x13 */
1162 "VK_CAPITAL", /* 0x14 */
1163 NULL, /* 0x15 */
1164 NULL, /* 0x16 */
1165 NULL, /* 0x17 */
1166 NULL, /* 0x18 */
1167 NULL, /* 0x19 */
1168 NULL, /* 0x1A */
1169 "VK_ESCAPE", /* 0x1B */
1170 NULL, /* 0x1C */
1171 NULL, /* 0x1D */
1172 NULL, /* 0x1E */
1173 NULL, /* 0x1F */
1174 "VK_SPACE", /* 0x20 */
1175 "VK_PRIOR", /* 0x21 */
1176 "VK_NEXT", /* 0x22 */
1177 "VK_END", /* 0x23 */
1178 "VK_HOME", /* 0x24 */
1179 "VK_LEFT", /* 0x25 */
1180 "VK_UP", /* 0x26 */
1181 "VK_RIGHT", /* 0x27 */
1182 "VK_DOWN", /* 0x28 */
1183 "VK_SELECT", /* 0x29 */
1184 "VK_PRINT", /* 0x2A */
1185 "VK_EXECUTE", /* 0x2B */
1186 "VK_SNAPSHOT", /* 0x2C */
1187 "VK_INSERT", /* 0x2D */
1188 "VK_DELETE", /* 0x2E */
1189 "VK_HELP", /* 0x2F */
1190 "VK_0", /* 0x30 */
1191 "VK_1", /* 0x31 */
1192 "VK_2", /* 0x32 */
1193 "VK_3", /* 0x33 */
1194 "VK_4", /* 0x34 */
1195 "VK_5", /* 0x35 */
1196 "VK_6", /* 0x36 */
1197 "VK_7", /* 0x37 */
1198 "VK_8", /* 0x38 */
1199 "VK_9", /* 0x39 */
1200 NULL, /* 0x3A */
1201 NULL, /* 0x3B */
1202 NULL, /* 0x3C */
1203 NULL, /* 0x3D */
1204 NULL, /* 0x3E */
1205 NULL, /* 0x3F */
1206 NULL, /* 0x40 */
1207 "VK_A", /* 0x41 */
1208 "VK_B", /* 0x42 */
1209 "VK_C", /* 0x43 */
1210 "VK_D", /* 0x44 */
1211 "VK_E", /* 0x45 */
1212 "VK_F", /* 0x46 */
1213 "VK_G", /* 0x47 */
1214 "VK_H", /* 0x48 */
1215 "VK_I", /* 0x49 */
1216 "VK_J", /* 0x4A */
1217 "VK_K", /* 0x4B */
1218 "VK_L", /* 0x4C */
1219 "VK_M", /* 0x4D */
1220 "VK_N", /* 0x4E */
1221 "VK_O", /* 0x4F */
1222 "VK_P", /* 0x50 */
1223 "VK_Q", /* 0x51 */
1224 "VK_R", /* 0x52 */
1225 "VK_S", /* 0x53 */
1226 "VK_T", /* 0x54 */
1227 "VK_U", /* 0x55 */
1228 "VK_V", /* 0x56 */
1229 "VK_W", /* 0x57 */
1230 "VK_X", /* 0x58 */
1231 "VK_Y", /* 0x59 */
1232 "VK_Z", /* 0x5A */
1233 "VK_LWIN", /* 0x5B */
1234 "VK_RWIN", /* 0x5C */
1235 "VK_APPS", /* 0x5D */
1236 NULL, /* 0x5E */
1237 NULL, /* 0x5F */
1238 "VK_NUMPAD0", /* 0x60 */
1239 "VK_NUMPAD1", /* 0x61 */
1240 "VK_NUMPAD2", /* 0x62 */
1241 "VK_NUMPAD3", /* 0x63 */
1242 "VK_NUMPAD4", /* 0x64 */
1243 "VK_NUMPAD5", /* 0x65 */
1244 "VK_NUMPAD6", /* 0x66 */
1245 "VK_NUMPAD7", /* 0x67 */
1246 "VK_NUMPAD8", /* 0x68 */
1247 "VK_NUMPAD9", /* 0x69 */
1248 "VK_MULTIPLY", /* 0x6A */
1249 "VK_ADD", /* 0x6B */
1250 "VK_SEPARATOR", /* 0x6C */
1251 "VK_SUBTRACT", /* 0x6D */
1252 "VK_DECIMAL", /* 0x6E */
1253 "VK_DIVIDE", /* 0x6F */
1254 "VK_F1", /* 0x70 */
1255 "VK_F2", /* 0x71 */
1256 "VK_F3", /* 0x72 */
1257 "VK_F4", /* 0x73 */
1258 "VK_F5", /* 0x74 */
1259 "VK_F6", /* 0x75 */
1260 "VK_F7", /* 0x76 */
1261 "VK_F8", /* 0x77 */
1262 "VK_F9", /* 0x78 */
1263 "VK_F10", /* 0x79 */
1264 "VK_F11", /* 0x7A */
1265 "VK_F12", /* 0x7B */
1266 "VK_F13", /* 0x7C */
1267 "VK_F14", /* 0x7D */
1268 "VK_F15", /* 0x7E */
1269 "VK_F16", /* 0x7F */
1270 "VK_F17", /* 0x80 */
1271 "VK_F18", /* 0x81 */
1272 "VK_F19", /* 0x82 */
1273 "VK_F20", /* 0x83 */
1274 "VK_F21", /* 0x84 */
1275 "VK_F22", /* 0x85 */
1276 "VK_F23", /* 0x86 */
1277 "VK_F24", /* 0x87 */
1278 NULL, /* 0x88 */
1279 NULL, /* 0x89 */
1280 NULL, /* 0x8A */
1281 NULL, /* 0x8B */
1282 NULL, /* 0x8C */
1283 NULL, /* 0x8D */
1284 NULL, /* 0x8E */
1285 NULL, /* 0x8F */
1286 "VK_NUMLOCK", /* 0x90 */
1287 "VK_SCROLL", /* 0x91 */
1288 NULL, /* 0x92 */
1289 NULL, /* 0x93 */
1290 NULL, /* 0x94 */
1291 NULL, /* 0x95 */
1292 NULL, /* 0x96 */
1293 NULL, /* 0x97 */
1294 NULL, /* 0x98 */
1295 NULL, /* 0x99 */
1296 NULL, /* 0x9A */
1297 NULL, /* 0x9B */
1298 NULL, /* 0x9C */
1299 NULL, /* 0x9D */
1300 NULL, /* 0x9E */
1301 NULL, /* 0x9F */
1302 "VK_LSHIFT", /* 0xA0 */
1303 "VK_RSHIFT", /* 0xA1 */
1304 "VK_LCONTROL", /* 0xA2 */
1305 "VK_RCONTROL", /* 0xA3 */
1306 "VK_LMENU", /* 0xA4 */
1307 "VK_RMENU", /* 0xA5 */
1308 "VK_BROWSER_BACK", /* 0xA6 */
1309 "VK_BROWSER_FORWARD", /* 0xA7 */
1310 "VK_BROWSER_REFRESH", /* 0xA8 */
1311 "VK_BROWSER_STOP", /* 0xA9 */
1312 "VK_BROWSER_SEARCH", /* 0xAA */
1313 "VK_BROWSER_FAVORITES", /* 0xAB */
1314 "VK_BROWSER_HOME", /* 0xAC */
1315 "VK_VOLUME_MUTE", /* 0xAD */
1316 "VK_VOLUME_DOWN", /* 0xAE */
1317 "VK_VOLUME_UP", /* 0xAF */
1318 "VK_MEDIA_NEXT_TRACK", /* 0xB0 */
1319 "VK_MEDIA_PREV_TRACK", /* 0xB1 */
1320 "VK_MEDIA_STOP", /* 0xB2 */
1321 "VK_MEDIA_PLAY_PAUSE", /* 0xB3 */
1322 "VK_LAUNCH_MAIL", /* 0xB4 */
1323 "VK_LAUNCH_MEDIA_SELECT", /* 0xB5 */
1324 "VK_LAUNCH_APP1", /* 0xB6 */
1325 "VK_LAUNCH_APP2", /* 0xB7 */
1326 NULL, /* 0xB8 */
1327 NULL, /* 0xB9 */
1328 "VK_OEM_1", /* 0xBA */
1329 "VK_OEM_PLUS", /* 0xBB */
1330 "VK_OEM_COMMA", /* 0xBC */
1331 "VK_OEM_MINUS", /* 0xBD */
1332 "VK_OEM_PERIOD", /* 0xBE */
1333 "VK_OEM_2", /* 0xBF */
1334 "VK_OEM_3", /* 0xC0 */
1335 NULL, /* 0xC1 */
1336 NULL, /* 0xC2 */
1337 NULL, /* 0xC3 */
1338 NULL, /* 0xC4 */
1339 NULL, /* 0xC5 */
1340 NULL, /* 0xC6 */
1341 NULL, /* 0xC7 */
1342 NULL, /* 0xC8 */
1343 NULL, /* 0xC9 */
1344 NULL, /* 0xCA */
1345 NULL, /* 0xCB */
1346 NULL, /* 0xCC */
1347 NULL, /* 0xCD */
1348 NULL, /* 0xCE */
1349 NULL, /* 0xCF */
1350 NULL, /* 0xD0 */
1351 NULL, /* 0xD1 */
1352 NULL, /* 0xD2 */
1353 NULL, /* 0xD3 */
1354 NULL, /* 0xD4 */
1355 NULL, /* 0xD5 */
1356 NULL, /* 0xD6 */
1357 NULL, /* 0xD7 */
1358 NULL, /* 0xD8 */
1359 NULL, /* 0xD9 */
1360 NULL, /* 0xDA */
1361 "VK_OEM_4", /* 0xDB */
1362 "VK_OEM_5", /* 0xDC */
1363 "VK_OEM_6", /* 0xDD */
1364 "VK_OEM_7", /* 0xDE */
1365 "VK_OEM_8", /* 0xDF */
1366 NULL, /* 0xE0 */
1367 "VK_OEM_AX", /* 0xE1 */
1368 "VK_OEM_102", /* 0xE2 */
1369 "VK_ICO_HELP", /* 0xE3 */
1370 "VK_ICO_00", /* 0xE4 */
1371 "VK_PROCESSKEY", /* 0xE5 */
1372 NULL, /* 0xE6 */
1373 "VK_PACKET", /* 0xE7 */
1374 NULL, /* 0xE8 */
1375 NULL, /* 0xE9 */
1376 NULL, /* 0xEA */
1377 NULL, /* 0xEB */
1378 NULL, /* 0xEC */
1379 NULL, /* 0xED */
1380 NULL, /* 0xEE */
1381 NULL, /* 0xEF */
1382 NULL, /* 0xF0 */
1383 NULL, /* 0xF1 */
1384 NULL, /* 0xF2 */
1385 NULL, /* 0xF3 */
1386 NULL, /* 0xF4 */
1387 NULL, /* 0xF5 */
1388 "VK_ATTN", /* 0xF6 */
1389 "VK_CRSEL", /* 0xF7 */
1390 "VK_EXSEL", /* 0xF8 */
1391 "VK_EREOF", /* 0xF9 */
1392 "VK_PLAY", /* 0xFA */
1393 "VK_ZOOM", /* 0xFB */
1394 "VK_NONAME", /* 0xFC */
1395 "VK_PA1", /* 0xFD */
1396 "VK_OEM_CLEAR", /* 0xFE */
1397 NULL /* 0xFF */
1401 /************************************************************************/
1404 /* WM_USER+n message values for "common controls" */
1406 typedef struct
1408 const char *name; /* name of control message */
1409 UINT value; /* message number (0x0401-0x0fff */
1410 UINT len; /* length of space at lParam to dump */
1411 } USER_MSG;
1414 typedef struct
1416 const WCHAR *classname; /* class name to match */
1417 const USER_MSG *classmsg; /* pointer to first USER_MSG for class */
1418 const USER_MSG *lastmsg; /* pointer to last USER_MSG for class */
1419 } CONTROL_CLASS;
1421 #define USM(a,b) { #a ,a,b}
1422 #define SZOF(a) sizeof(a)
1424 /* To dump memory at the lParam for any of these messages, */
1425 /* replace the "0" with a "SZOF(structure)", or with a */
1426 /* number. (First method preferred.) */
1428 #define RB_GETBANDINFO_OLD (WM_USER+5) /* obsoleted after IE3, but we have to support it anyway */
1430 static const USER_MSG rebar_array[] = {
1431 USM(RB_INSERTBANDA, 0),
1432 USM(RB_DELETEBAND, 0),
1433 USM(RB_GETBARINFO, 0),
1434 USM(RB_SETBARINFO, 0),
1435 USM(RB_GETBANDINFO_OLD, 0),
1436 USM(RB_SETBANDINFOA, 0),
1437 USM(RB_SETPARENT, 0),
1438 USM(RB_HITTEST, 0),
1439 USM(RB_GETRECT, 0),
1440 USM(RB_INSERTBANDW, 0),
1441 USM(RB_SETBANDINFOW, 0),
1442 USM(RB_GETBANDCOUNT, 0),
1443 USM(RB_GETROWCOUNT, 0),
1444 USM(RB_GETROWHEIGHT, 0),
1445 USM(RB_IDTOINDEX, 0),
1446 USM(RB_GETTOOLTIPS, 0),
1447 USM(RB_SETTOOLTIPS, 0),
1448 USM(RB_SETBKCOLOR, 0),
1449 USM(RB_GETBKCOLOR, 0),
1450 USM(RB_SETTEXTCOLOR, 0),
1451 USM(RB_GETTEXTCOLOR, 0),
1452 USM(RB_SIZETORECT, 0),
1453 USM(RB_BEGINDRAG, 0),
1454 USM(RB_ENDDRAG, 0),
1455 USM(RB_DRAGMOVE, 0),
1456 USM(RB_GETBARHEIGHT, 0),
1457 USM(RB_GETBANDINFOW, 0),
1458 USM(RB_GETBANDINFOA, 0),
1459 USM(RB_MINIMIZEBAND, 0),
1460 USM(RB_MAXIMIZEBAND, 0),
1461 USM(RB_GETBANDBORDERS, 0),
1462 USM(RB_SHOWBAND, 0),
1463 USM(RB_SETPALETTE, 0),
1464 USM(RB_GETPALETTE, 0),
1465 USM(RB_MOVEBAND, 0),
1466 {0,0,0} };
1468 static const USER_MSG toolbar_array[] = {
1469 USM(TB_ENABLEBUTTON ,0),
1470 USM(TB_CHECKBUTTON ,0),
1471 USM(TB_PRESSBUTTON ,0),
1472 USM(TB_HIDEBUTTON ,0),
1473 USM(TB_INDETERMINATE ,0),
1474 USM(TB_MARKBUTTON ,0),
1475 USM(TB_ISBUTTONENABLED ,0),
1476 USM(TB_ISBUTTONCHECKED ,0),
1477 USM(TB_ISBUTTONPRESSED ,0),
1478 USM(TB_ISBUTTONHIDDEN ,0),
1479 USM(TB_ISBUTTONINDETERMINATE ,0),
1480 USM(TB_ISBUTTONHIGHLIGHTED ,0),
1481 USM(TB_SETSTATE ,0),
1482 USM(TB_GETSTATE ,0),
1483 USM(TB_ADDBITMAP ,0),
1484 USM(TB_ADDBUTTONSA ,0),
1485 USM(TB_INSERTBUTTONA ,0),
1486 USM(TB_DELETEBUTTON ,0),
1487 USM(TB_GETBUTTON ,0),
1488 USM(TB_BUTTONCOUNT ,0),
1489 USM(TB_COMMANDTOINDEX ,0),
1490 USM(TB_SAVERESTOREA ,0),
1491 USM(TB_CUSTOMIZE ,0),
1492 USM(TB_ADDSTRINGA ,0),
1493 USM(TB_GETITEMRECT ,0),
1494 USM(TB_BUTTONSTRUCTSIZE ,0),
1495 USM(TB_SETBUTTONSIZE ,0),
1496 USM(TB_SETBITMAPSIZE ,0),
1497 USM(TB_AUTOSIZE ,0),
1498 USM(TB_GETTOOLTIPS ,0),
1499 USM(TB_SETTOOLTIPS ,0),
1500 USM(TB_SETPARENT ,0),
1501 USM(TB_SETROWS ,0),
1502 USM(TB_GETROWS ,0),
1503 USM(TB_GETBITMAPFLAGS ,0),
1504 USM(TB_SETCMDID ,0),
1505 USM(TB_CHANGEBITMAP ,0),
1506 USM(TB_GETBITMAP ,0),
1507 USM(TB_GETBUTTONTEXTA ,0),
1508 USM(TB_REPLACEBITMAP ,0),
1509 USM(TB_SETINDENT ,0),
1510 USM(TB_SETIMAGELIST ,0),
1511 USM(TB_GETIMAGELIST ,0),
1512 USM(TB_LOADIMAGES ,0),
1513 USM(TB_GETRECT ,0),
1514 USM(TB_SETHOTIMAGELIST ,0),
1515 USM(TB_GETHOTIMAGELIST ,0),
1516 USM(TB_SETDISABLEDIMAGELIST ,0),
1517 USM(TB_GETDISABLEDIMAGELIST ,0),
1518 USM(TB_SETSTYLE ,0),
1519 USM(TB_GETSTYLE ,0),
1520 USM(TB_GETBUTTONSIZE ,0),
1521 USM(TB_SETBUTTONWIDTH ,0),
1522 USM(TB_SETMAXTEXTROWS ,0),
1523 USM(TB_GETTEXTROWS ,0),
1524 USM(TB_GETOBJECT ,0),
1525 USM(TB_GETBUTTONINFOW ,0),
1526 USM(TB_SETBUTTONINFOW ,0),
1527 USM(TB_GETBUTTONINFOA ,0),
1528 USM(TB_SETBUTTONINFOA ,0),
1529 USM(TB_INSERTBUTTONW ,0),
1530 USM(TB_ADDBUTTONSW ,0),
1531 USM(TB_HITTEST ,0),
1532 USM(TB_SETDRAWTEXTFLAGS ,0),
1533 USM(TB_GETHOTITEM ,0),
1534 USM(TB_SETHOTITEM ,0),
1535 USM(TB_SETANCHORHIGHLIGHT ,0),
1536 USM(TB_GETANCHORHIGHLIGHT ,0),
1537 USM(TB_GETBUTTONTEXTW ,0),
1538 USM(TB_SAVERESTOREW ,0),
1539 USM(TB_ADDSTRINGW ,0),
1540 USM(TB_MAPACCELERATORA ,0),
1541 USM(TB_GETINSERTMARK ,0),
1542 USM(TB_SETINSERTMARK ,0),
1543 USM(TB_INSERTMARKHITTEST ,0),
1544 USM(TB_MOVEBUTTON ,0),
1545 USM(TB_GETMAXSIZE ,0),
1546 USM(TB_SETEXTENDEDSTYLE ,0),
1547 USM(TB_GETEXTENDEDSTYLE ,0),
1548 USM(TB_GETPADDING ,0),
1549 USM(TB_SETPADDING ,0),
1550 USM(TB_SETINSERTMARKCOLOR ,0),
1551 USM(TB_GETINSERTMARKCOLOR ,0),
1552 USM(TB_MAPACCELERATORW ,0),
1553 USM(TB_GETSTRINGW ,0),
1554 USM(TB_GETSTRINGA ,0),
1555 USM(TB_UNKWN45D ,8),
1556 USM(TB_SETHOTITEM2 ,0),
1557 USM(TB_SETLISTGAP ,0),
1558 USM(TB_GETIMAGELISTCOUNT ,0),
1559 USM(TB_GETIDEALSIZE ,8),
1560 USM(TB_UNKWN464 ,0),
1561 {0,0,0} };
1563 static const USER_MSG tooltips_array[] = {
1564 USM(TTM_ACTIVATE ,0),
1565 USM(TTM_SETDELAYTIME ,0),
1566 USM(TTM_ADDTOOLA ,0),
1567 USM(TTM_DELTOOLA ,0),
1568 USM(TTM_NEWTOOLRECTA ,0),
1569 USM(TTM_RELAYEVENT ,0),
1570 USM(TTM_GETTOOLINFOA ,0),
1571 USM(TTM_HITTESTA ,0),
1572 USM(TTM_GETTEXTA ,0),
1573 USM(TTM_UPDATETIPTEXTA ,0),
1574 USM(TTM_GETTOOLCOUNT ,0),
1575 USM(TTM_ENUMTOOLSA ,0),
1576 USM(TTM_GETCURRENTTOOLA ,0),
1577 USM(TTM_WINDOWFROMPOINT ,0),
1578 USM(TTM_TRACKACTIVATE ,0),
1579 USM(TTM_TRACKPOSITION ,0),
1580 USM(TTM_SETTIPBKCOLOR ,0),
1581 USM(TTM_SETTIPTEXTCOLOR ,0),
1582 USM(TTM_GETDELAYTIME ,0),
1583 USM(TTM_GETTIPBKCOLOR ,0),
1584 USM(TTM_GETTIPTEXTCOLOR ,0),
1585 USM(TTM_SETMAXTIPWIDTH ,0),
1586 USM(TTM_GETMAXTIPWIDTH ,0),
1587 USM(TTM_SETMARGIN ,0),
1588 USM(TTM_GETMARGIN ,0),
1589 USM(TTM_POP ,0),
1590 USM(TTM_UPDATE ,0),
1591 USM(TTM_GETBUBBLESIZE ,0),
1592 USM(TTM_ADDTOOLW ,0),
1593 USM(TTM_DELTOOLW ,0),
1594 USM(TTM_NEWTOOLRECTW ,0),
1595 USM(TTM_GETTOOLINFOW ,0),
1596 USM(TTM_SETTOOLINFOW ,0),
1597 USM(TTM_HITTESTW ,0),
1598 USM(TTM_GETTEXTW ,0),
1599 USM(TTM_UPDATETIPTEXTW ,0),
1600 USM(TTM_ENUMTOOLSW ,0),
1601 USM(TTM_GETCURRENTTOOLW ,0),
1602 {0,0,0} };
1604 static const USER_MSG comboex_array[] = {
1605 USM(CBEM_INSERTITEMA ,0),
1606 USM(CBEM_SETIMAGELIST ,0),
1607 USM(CBEM_GETIMAGELIST ,0),
1608 USM(CBEM_GETITEMA ,0),
1609 USM(CBEM_SETITEMA ,0),
1610 USM(CBEM_GETCOMBOCONTROL ,0),
1611 USM(CBEM_GETEDITCONTROL ,0),
1612 USM(CBEM_SETEXSTYLE ,0),
1613 USM(CBEM_GETEXTENDEDSTYLE ,0),
1614 USM(CBEM_HASEDITCHANGED ,0),
1615 USM(CBEM_INSERTITEMW ,0),
1616 USM(CBEM_SETITEMW ,0),
1617 USM(CBEM_GETITEMW ,0),
1618 USM(CBEM_SETEXTENDEDSTYLE ,0),
1619 {0,0,0} };
1621 static const USER_MSG propsht_array[] = {
1622 USM(PSM_SETCURSEL ,0),
1623 USM(PSM_REMOVEPAGE ,0),
1624 USM(PSM_ADDPAGE ,0),
1625 USM(PSM_CHANGED ,0),
1626 USM(PSM_RESTARTWINDOWS ,0),
1627 USM(PSM_REBOOTSYSTEM ,0),
1628 USM(PSM_CANCELTOCLOSE ,0),
1629 USM(PSM_QUERYSIBLINGS ,0),
1630 USM(PSM_UNCHANGED ,0),
1631 USM(PSM_APPLY ,0),
1632 USM(PSM_SETTITLEA ,0),
1633 USM(PSM_SETWIZBUTTONS ,0),
1634 USM(PSM_PRESSBUTTON ,0),
1635 USM(PSM_SETCURSELID ,0),
1636 USM(PSM_SETFINISHTEXTA ,0),
1637 USM(PSM_GETTABCONTROL ,0),
1638 USM(PSM_ISDIALOGMESSAGE ,0),
1639 USM(PSM_GETCURRENTPAGEHWND ,0),
1640 USM(PSM_SETTITLEW ,0),
1641 USM(PSM_SETFINISHTEXTW ,0),
1642 {0,0,0} };
1643 static const WCHAR PropSheetInfoStr[] =
1644 {'P','r','o','p','e','r','t','y','S','h','e','e','t','I','n','f','o',0 };
1646 static const USER_MSG updown_array[] = {
1647 USM(UDM_SETRANGE ,0),
1648 USM(UDM_GETRANGE ,0),
1649 USM(UDM_SETPOS ,0),
1650 USM(UDM_GETPOS ,0),
1651 USM(UDM_SETBUDDY ,0),
1652 USM(UDM_GETBUDDY ,0),
1653 USM(UDM_SETACCEL ,0),
1654 USM(UDM_GETACCEL ,0),
1655 USM(UDM_SETBASE ,0),
1656 USM(UDM_GETBASE ,0),
1657 USM(UDM_SETRANGE32 ,0),
1658 USM(UDM_GETRANGE32 ,0),
1659 USM(UDM_SETPOS32 ,0),
1660 USM(UDM_GETPOS32 ,0),
1661 {0,0,0} };
1663 /* generated from:
1664 * $ for i in `grep EM_ include/richedit.h | cut -d' ' -f2 | cut -f1`; do echo -e " USM($i\t\t,0),"; done
1666 static const USER_MSG richedit_array[] = {
1667 {"EM_SCROLLCARET", WM_USER+49 ,0},
1668 USM(EM_CANPASTE ,0),
1669 USM(EM_DISPLAYBAND ,0),
1670 USM(EM_EXGETSEL ,0),
1671 USM(EM_EXLIMITTEXT ,0),
1672 USM(EM_EXLINEFROMCHAR ,0),
1673 USM(EM_EXSETSEL ,0),
1674 USM(EM_FINDTEXT ,0),
1675 USM(EM_FORMATRANGE ,0),
1676 USM(EM_GETCHARFORMAT ,0),
1677 USM(EM_GETEVENTMASK ,0),
1678 USM(EM_GETOLEINTERFACE ,0),
1679 USM(EM_GETPARAFORMAT ,0),
1680 USM(EM_GETSELTEXT ,0),
1681 USM(EM_HIDESELECTION ,0),
1682 USM(EM_PASTESPECIAL ,0),
1683 USM(EM_REQUESTRESIZE ,0),
1684 USM(EM_SELECTIONTYPE ,0),
1685 USM(EM_SETBKGNDCOLOR ,0),
1686 USM(EM_SETCHARFORMAT ,0),
1687 USM(EM_SETEVENTMASK ,0),
1688 USM(EM_SETOLECALLBACK ,0),
1689 USM(EM_SETPARAFORMAT ,0),
1690 USM(EM_SETTARGETDEVICE ,0),
1691 USM(EM_STREAMIN ,0),
1692 USM(EM_STREAMOUT ,0),
1693 USM(EM_GETTEXTRANGE ,0),
1694 USM(EM_FINDWORDBREAK ,0),
1695 USM(EM_SETOPTIONS ,0),
1696 USM(EM_GETOPTIONS ,0),
1697 USM(EM_FINDTEXTEX ,0),
1698 USM(EM_GETWORDBREAKPROCEX ,0),
1699 USM(EM_SETWORDBREAKPROCEX ,0),
1700 USM(EM_SETUNDOLIMIT ,0),
1701 USM(EM_REDO ,0),
1702 USM(EM_CANREDO ,0),
1703 USM(EM_GETUNDONAME ,0),
1704 USM(EM_GETREDONAME ,0),
1705 USM(EM_STOPGROUPTYPING ,0),
1706 USM(EM_SETTEXTMODE ,0),
1707 USM(EM_GETTEXTMODE ,0),
1708 USM(EM_AUTOURLDETECT ,0),
1709 USM(EM_GETAUTOURLDETECT ,0),
1710 USM(EM_SETPALETTE ,0),
1711 USM(EM_GETTEXTEX ,0),
1712 USM(EM_GETTEXTLENGTHEX ,0),
1713 USM(EM_SHOWSCROLLBAR ,0),
1714 USM(EM_SETTEXTEX ,0),
1715 USM(EM_SETPUNCTUATION ,0),
1716 USM(EM_GETPUNCTUATION ,0),
1717 USM(EM_SETWORDWRAPMODE ,0),
1718 USM(EM_GETWORDWRAPMODE ,0),
1719 USM(EM_SETIMECOLOR ,0),
1720 USM(EM_GETIMECOLOR ,0),
1721 USM(EM_SETIMEOPTIONS ,0),
1722 USM(EM_GETIMEOPTIONS ,0),
1723 USM(EM_CONVPOSITION ,0),
1724 USM(EM_SETLANGOPTIONS ,0),
1725 USM(EM_GETLANGOPTIONS ,0),
1726 USM(EM_GETIMECOMPMODE ,0),
1727 USM(EM_FINDTEXTW ,0),
1728 USM(EM_FINDTEXTEXW ,0),
1729 USM(EM_RECONVERSION ,0),
1730 USM(EM_SETIMEMODEBIAS ,0),
1731 USM(EM_GETIMEMODEBIAS ,0),
1732 USM(EM_SETBIDIOPTIONS ,0),
1733 USM(EM_GETBIDIOPTIONS ,0),
1734 USM(EM_SETTYPOGRAPHYOPTIONS ,0),
1735 USM(EM_GETTYPOGRAPHYOPTIONS ,0),
1736 USM(EM_SETEDITSTYLE ,0),
1737 USM(EM_GETEDITSTYLE ,0),
1738 USM(EM_OUTLINE ,0),
1739 USM(EM_GETSCROLLPOS ,0),
1740 USM(EM_SETSCROLLPOS ,0),
1741 USM(EM_SETFONTSIZE ,0),
1742 USM(EM_GETZOOM ,0),
1743 USM(EM_SETZOOM ,0),
1744 {0,0,0} };
1746 #undef SZOF
1747 #undef USM
1749 static CONTROL_CLASS cc_array[] = {
1750 {WC_COMBOBOXEXW, comboex_array, 0},
1751 {WC_PROPSHEETW, propsht_array, 0},
1752 {REBARCLASSNAMEW, rebar_array, 0},
1753 {TOOLBARCLASSNAMEW, toolbar_array, 0},
1754 {TOOLTIPS_CLASSW, tooltips_array, 0},
1755 {UPDOWN_CLASSW, updown_array, 0},
1756 {RICHEDIT_CLASS20W, richedit_array, 0},
1757 {0, 0, 0} };
1760 /************************************************************************/
1763 /* WM_NOTIFY function codes display */
1765 typedef struct
1767 const char *name; /* name of notify message */
1768 UINT value; /* notify code value */
1769 UINT len; /* length of extra space to dump */
1770 } SPY_NOTIFY;
1772 #define SPNFY(a,b) { #a ,a,sizeof(b)-sizeof(NMHDR)}
1774 /* Array MUST be in descending order by the 'value' field */
1775 /* (since value is UNSIGNED, 0xffffffff is largest and */
1776 /* 0xfffffffe is smaller). A binary search is used to */
1777 /* locate the correct 'value'. */
1778 static const SPY_NOTIFY spnfy_array[] = {
1779 /* common 0U to 0U-99U */
1780 SPNFY(NM_OUTOFMEMORY, NMHDR),
1781 SPNFY(NM_CLICK, NMHDR),
1782 SPNFY(NM_DBLCLK, NMHDR),
1783 SPNFY(NM_RETURN, NMHDR),
1784 SPNFY(NM_RCLICK, NMHDR),
1785 SPNFY(NM_RDBLCLK, NMHDR),
1786 SPNFY(NM_SETFOCUS, NMHDR),
1787 SPNFY(NM_KILLFOCUS, NMHDR),
1788 SPNFY(NM_CUSTOMDRAW, NMCUSTOMDRAW),
1789 SPNFY(NM_HOVER, NMHDR),
1790 SPNFY(NM_NCHITTEST, NMMOUSE),
1791 SPNFY(NM_KEYDOWN, NMKEY),
1792 SPNFY(NM_RELEASEDCAPTURE, NMHDR),
1793 SPNFY(NM_SETCURSOR, NMMOUSE),
1794 SPNFY(NM_CHAR, NMCHAR),
1795 SPNFY(NM_TOOLTIPSCREATED, NMTOOLTIPSCREATED),
1796 /* Listview 0U-100U to 0U-199U */
1797 SPNFY(LVN_ITEMCHANGING, NMLISTVIEW),
1798 SPNFY(LVN_ITEMCHANGED, NMLISTVIEW),
1799 SPNFY(LVN_INSERTITEM, NMLISTVIEW),
1800 SPNFY(LVN_DELETEITEM, NMLISTVIEW),
1801 SPNFY(LVN_DELETEALLITEMS, NMLISTVIEW),
1802 SPNFY(LVN_BEGINLABELEDITA, NMLVDISPINFOA),
1803 SPNFY(LVN_ENDLABELEDITA, NMLVDISPINFOA),
1804 SPNFY(LVN_COLUMNCLICK, NMLISTVIEW),
1805 SPNFY(LVN_BEGINDRAG, NMLISTVIEW),
1806 SPNFY(LVN_BEGINRDRAG, NMLISTVIEW),
1807 SPNFY(LVN_ODCACHEHINT, NMLVCACHEHINT),
1808 SPNFY(LVN_ITEMACTIVATE, NMITEMACTIVATE),
1809 SPNFY(LVN_ODSTATECHANGED, NMLVODSTATECHANGE),
1810 SPNFY(LVN_HOTTRACK, NMLISTVIEW),
1811 SPNFY(LVN_GETDISPINFOA, NMLVDISPINFOA),
1812 SPNFY(LVN_SETDISPINFOA, NMLVDISPINFOA),
1813 SPNFY(LVN_ODFINDITEMA, NMLVFINDITEMA),
1814 SPNFY(LVN_KEYDOWN, NMLVKEYDOWN),
1815 SPNFY(LVN_MARQUEEBEGIN, NMLISTVIEW),
1816 SPNFY(LVN_GETINFOTIPA, NMLVGETINFOTIPA),
1817 SPNFY(LVN_GETINFOTIPW, NMLVGETINFOTIPW),
1818 SPNFY(LVN_BEGINLABELEDITW, NMLVDISPINFOW),
1819 SPNFY(LVN_ENDLABELEDITW, NMLVDISPINFOW),
1820 SPNFY(LVN_GETDISPINFOW, NMLVDISPINFOW),
1821 SPNFY(LVN_SETDISPINFOW, NMLVDISPINFOW),
1822 SPNFY(LVN_ODFINDITEMW, NMLVFINDITEMW),
1823 /* PropertySheet 0U-200U to 0U-299U */
1824 SPNFY(PSN_SETACTIVE, PSHNOTIFY),
1825 SPNFY(PSN_KILLACTIVE, PSHNOTIFY),
1826 SPNFY(PSN_APPLY, PSHNOTIFY),
1827 SPNFY(PSN_RESET, PSHNOTIFY),
1828 SPNFY(PSN_HELP, PSHNOTIFY),
1829 SPNFY(PSN_WIZBACK, PSHNOTIFY),
1830 SPNFY(PSN_WIZNEXT, PSHNOTIFY),
1831 SPNFY(PSN_WIZFINISH, PSHNOTIFY),
1832 SPNFY(PSN_QUERYCANCEL, PSHNOTIFY),
1833 SPNFY(PSN_GETOBJECT, NMOBJECTNOTIFY),
1834 SPNFY(PSN_TRANSLATEACCELERATOR, PSHNOTIFY),
1835 SPNFY(PSN_QUERYINITIALFOCUS, PSHNOTIFY),
1836 /* Header 0U-300U to 0U-399U */
1837 SPNFY(HDN_ITEMCHANGINGA, NMHEADERA),
1838 SPNFY(HDN_ITEMCHANGEDA, NMHEADERA),
1839 SPNFY(HDN_ITEMCLICKA, NMHEADERA),
1840 SPNFY(HDN_ITEMDBLCLICKA, NMHEADERA),
1841 SPNFY(HDN_DIVIDERDBLCLICKA, NMHEADERA),
1842 SPNFY(HDN_BEGINTRACKA, NMHEADERA),
1843 SPNFY(HDN_ENDTRACKA, NMHEADERA),
1844 SPNFY(HDN_TRACKA, NMHEADERA),
1845 SPNFY(HDN_GETDISPINFOA, NMHEADERA),
1846 SPNFY(HDN_BEGINDRAG, NMHDR),
1847 SPNFY(HDN_ENDDRAG, NMHDR),
1848 SPNFY(HDN_ITEMCHANGINGW, NMHDR),
1849 SPNFY(HDN_ITEMCHANGEDW, NMHDR),
1850 SPNFY(HDN_ITEMCLICKW, NMHDR),
1851 SPNFY(HDN_ITEMDBLCLICKW, NMHDR),
1852 SPNFY(HDN_DIVIDERDBLCLICKW, NMHDR),
1853 SPNFY(HDN_BEGINTRACKW, NMHDR),
1854 SPNFY(HDN_ENDTRACKW, NMHDR),
1855 SPNFY(HDN_TRACKW, NMHDR),
1856 SPNFY(HDN_GETDISPINFOW, NMHDR),
1857 /* Treeview 0U-400U to 0U-499U */
1858 SPNFY(TVN_SELCHANGINGA, NMTREEVIEWA),
1859 SPNFY(TVN_SELCHANGEDA, NMTREEVIEWA),
1860 SPNFY(TVN_GETDISPINFOA, NMTVDISPINFOA),
1861 SPNFY(TVN_SETDISPINFOA, NMTVDISPINFOA),
1862 SPNFY(TVN_ITEMEXPANDINGA, NMTREEVIEWA),
1863 SPNFY(TVN_ITEMEXPANDEDA, NMTREEVIEWA),
1864 SPNFY(TVN_BEGINDRAGA, NMTREEVIEWA),
1865 SPNFY(TVN_BEGINRDRAGA, NMTREEVIEWA),
1866 SPNFY(TVN_DELETEITEMA, NMTREEVIEWA),
1867 SPNFY(TVN_BEGINLABELEDITA, NMTVDISPINFOA),
1868 SPNFY(TVN_ENDLABELEDITA, NMTVDISPINFOA),
1869 SPNFY(TVN_KEYDOWN, NMTVKEYDOWN),
1870 SPNFY(TVN_SELCHANGINGW, NMTREEVIEWW),
1871 SPNFY(TVN_SELCHANGEDW, NMTREEVIEWW),
1872 SPNFY(TVN_GETDISPINFOW, NMTVDISPINFOW),
1873 SPNFY(TVN_SETDISPINFOW, NMTVDISPINFOW),
1874 SPNFY(TVN_ITEMEXPANDINGW, NMTREEVIEWW),
1875 SPNFY(TVN_ITEMEXPANDEDW, NMTREEVIEWW),
1876 SPNFY(TVN_BEGINDRAGW, NMTREEVIEWW),
1877 SPNFY(TVN_BEGINRDRAGW, NMTREEVIEWW),
1878 SPNFY(TVN_DELETEITEMW, NMTREEVIEWW),
1879 SPNFY(TVN_BEGINLABELEDITW, NMTVDISPINFOW),
1880 SPNFY(TVN_ENDLABELEDITW, NMTVDISPINFOW),
1881 /* Tooltips 0U-520U to 0U-549U */
1882 SPNFY(TTN_GETDISPINFOA, NMHDR),
1883 SPNFY(TTN_SHOW, NMHDR),
1884 SPNFY(TTN_POP, NMHDR),
1885 SPNFY(TTN_GETDISPINFOW, NMHDR),
1886 /* Tab 0U-550U to 0U-580U */
1887 SPNFY(TCN_KEYDOWN, NMHDR),
1888 SPNFY(TCN_SELCHANGE, NMHDR),
1889 SPNFY(TCN_SELCHANGING, NMHDR),
1890 SPNFY(TCN_GETOBJECT, NMHDR),
1891 /* Common Dialog 0U-601U to 0U-699U */
1892 SPNFY(CDN_INITDONE, OFNOTIFYA),
1893 SPNFY(CDN_SELCHANGE, OFNOTIFYA),
1894 SPNFY(CDN_FOLDERCHANGE, OFNOTIFYA),
1895 SPNFY(CDN_SHAREVIOLATION, OFNOTIFYA),
1896 SPNFY(CDN_HELP, OFNOTIFYA),
1897 SPNFY(CDN_FILEOK, OFNOTIFYA),
1898 SPNFY(CDN_TYPECHANGE, OFNOTIFYA),
1899 /* Toolbar 0U-700U to 0U-720U */
1900 SPNFY(TBN_GETBUTTONINFOA, NMTOOLBARA),
1901 SPNFY(TBN_BEGINDRAG, NMTOOLBARA),
1902 SPNFY(TBN_ENDDRAG, NMTOOLBARA),
1903 SPNFY(TBN_BEGINADJUST, NMHDR),
1904 SPNFY(TBN_ENDADJUST, NMHDR),
1905 SPNFY(TBN_RESET, NMHDR),
1906 SPNFY(TBN_QUERYINSERT, NMTOOLBARA),
1907 SPNFY(TBN_QUERYDELETE, NMTOOLBARA),
1908 SPNFY(TBN_TOOLBARCHANGE, NMHDR),
1909 SPNFY(TBN_CUSTHELP, NMHDR),
1910 SPNFY(TBN_DROPDOWN, NMTOOLBARA),
1911 SPNFY(TBN_GETOBJECT, NMOBJECTNOTIFY),
1912 SPNFY(TBN_HOTITEMCHANGE, NMTBHOTITEM),
1913 SPNFY(TBN_DRAGOUT, NMTOOLBARA),
1914 SPNFY(TBN_DELETINGBUTTON, NMTOOLBARA),
1915 SPNFY(TBN_GETDISPINFOA, NMTBDISPINFOA),
1916 SPNFY(TBN_GETDISPINFOW, NMTBDISPINFOW),
1917 SPNFY(TBN_GETINFOTIPA, NMTBGETINFOTIPA),
1918 SPNFY(TBN_GETINFOTIPW, NMTBGETINFOTIPW),
1919 SPNFY(TBN_GETBUTTONINFOW, NMTOOLBARW),
1920 /* Up/Down 0U-721U to 0U-740U */
1921 SPNFY(UDN_DELTAPOS, NM_UPDOWN),
1922 /* Month Calendar 0U-750U to 0U-759U */
1923 /* ******************* WARNING ***************************** */
1924 /* The following appear backwards but needs to be this way. */
1925 /* The reason is that MS (and us) define the MCNs as */
1926 /* MCN_FIRST + n */
1927 /* instead of the way ALL other notifications are */
1928 /* TBN_FIRST - n */
1929 /* The only place that this is important is in this list */
1930 /* */
1931 /* Also since the same error was made with the DTN_ items, */
1932 /* they overlay the MCN_ and need to be inserted in the */
1933 /* other section of the table so that it is in order for */
1934 /* the binary search. */
1935 /* */
1936 /* Thank you MS for your obvious quality control!! */
1937 /* ******************* WARNING ***************************** */
1938 /* Date/Time 0U-760U to 0U-799U */
1939 /* SPNFY(MCN_SELECT, NMHDR), */
1940 /* SPNFY(MCN_GETDAYSTATE, NMHDR), */
1941 /* SPNFY(MCN_SELCHANGE, NMHDR), */
1942 /* ******************* WARNING ***************************** */
1943 /* The following appear backwards but needs to be this way. */
1944 /* The reason is that MS (and us) define the MCNs as */
1945 /* DTN_FIRST + n */
1946 /* instead of the way ALL other notifications are */
1947 /* TBN_FIRST - n */
1948 /* The only place that this is important is in this list */
1949 /* ******************* WARNING ***************************** */
1950 SPNFY(DTN_FORMATQUERYW, NMHDR),
1951 SPNFY(DTN_FORMATW, NMHDR),
1952 SPNFY(DTN_WMKEYDOWNW, NMHDR),
1953 SPNFY(DTN_USERSTRINGW, NMHDR),
1954 SPNFY(MCN_SELECT, NMHDR),
1955 SPNFY(MCN_GETDAYSTATE, NMHDR),
1956 SPNFY(MCN_SELCHANGE, NMHDR),
1957 SPNFY(DTN_CLOSEUP, NMHDR),
1958 SPNFY(DTN_DROPDOWN, NMHDR),
1959 SPNFY(DTN_FORMATQUERYA, NMHDR),
1960 SPNFY(DTN_FORMATA, NMHDR),
1961 SPNFY(DTN_WMKEYDOWNA, NMHDR),
1962 SPNFY(DTN_USERSTRINGA, NMHDR),
1963 SPNFY(DTN_DATETIMECHANGE, NMHDR),
1964 /* ComboBoxEx 0U-800U to 0U-830U */
1965 SPNFY(CBEN_GETDISPINFOA, NMCOMBOBOXEXA),
1966 SPNFY(CBEN_INSERTITEM, NMCOMBOBOXEXA),
1967 SPNFY(CBEN_DELETEITEM, NMCOMBOBOXEXA),
1968 SPNFY(CBEN_BEGINEDIT, NMHDR),
1969 SPNFY(CBEN_ENDEDITA, NMCBEENDEDITA),
1970 SPNFY(CBEN_ENDEDITW, NMCBEENDEDITW),
1971 SPNFY(CBEN_GETDISPINFOW, NMCOMBOBOXEXW),
1972 SPNFY(CBEN_DRAGBEGINA, NMCBEDRAGBEGINA),
1973 SPNFY(CBEN_DRAGBEGINW, NMCBEDRAGBEGINW),
1974 /* Rebar 0U-831U to 0U-859U */
1975 SPNFY(RBN_HEIGHTCHANGE, NMHDR),
1976 SPNFY(RBN_GETOBJECT, NMOBJECTNOTIFY),
1977 SPNFY(RBN_LAYOUTCHANGED, NMHDR),
1978 SPNFY(RBN_AUTOSIZE, NMRBAUTOSIZE),
1979 SPNFY(RBN_BEGINDRAG, NMREBAR),
1980 SPNFY(RBN_ENDDRAG, NMREBAR),
1981 SPNFY(RBN_DELETINGBAND, NMREBAR),
1982 SPNFY(RBN_DELETEDBAND, NMREBAR),
1983 SPNFY(RBN_CHILDSIZE, NMREBARCHILDSIZE),
1984 /* IP address 0U-860U to 0U-879U */
1985 SPNFY(IPN_FIELDCHANGED, NMHDR),
1986 /* Status bar 0U-880U to 0U-899U */
1987 SPNFY(SBN_SIMPLEMODECHANGE, NMHDR),
1988 /* Pager 0U-900U to 0U-950U */
1989 SPNFY(PGN_SCROLL, NMPGSCROLL),
1990 SPNFY(PGN_CALCSIZE, NMPGCALCSIZE),
1991 {0,0,0}};
1992 static const SPY_NOTIFY *end_spnfy_array; /* ptr to last good entry in array */
1993 #undef SPNFY
1996 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
1997 static BOOL16 SPY_ExcludeDWP = 0;
1999 #define SPY_EXCLUDE(msg) \
2000 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
2003 typedef struct
2005 UINT msgnum; /* message number */
2006 HWND msg_hwnd; /* window handle for message */
2007 WPARAM wParam; /* message parameter */
2008 LPARAM lParam; /* message parameter */
2009 INT data_len; /* length of data to dump */
2010 char msg_name[60]; /* message name (see SPY_GetMsgName) */
2011 WCHAR wnd_class[60]; /* window class name (full) */
2012 WCHAR wnd_name[16]; /* window name for message */
2013 } SPY_INSTANCE;
2015 static int indent_tls_index;
2017 /***********************************************************************
2018 * get_indent_level
2020 static inline INT_PTR get_indent_level(void)
2022 return (INT_PTR)TlsGetValue( indent_tls_index );
2026 /***********************************************************************
2027 * set_indent_level
2029 static inline void set_indent_level( INT_PTR level )
2031 TlsSetValue( indent_tls_index, (void *)level );
2035 /***********************************************************************
2036 * SPY_GetMsgInternal
2038 static const char *SPY_GetMsgInternal( UINT msg )
2040 if (msg <= SPY_MAX_MSGNUM)
2041 return MessageTypeNames[msg];
2043 if (msg >= LVM_FIRST && msg <= LVM_FIRST + SPY_MAX_LVMMSGNUM)
2044 return LVMMessageTypeNames[msg-LVM_FIRST];
2046 if (msg >= TV_FIRST && msg <= TV_FIRST + SPY_MAX_TVMSGNUM)
2047 return TVMessageTypeNames[msg-TV_FIRST];
2049 if (msg >= HDM_FIRST && msg <= HDM_FIRST + SPY_MAX_HDMMSGNUM)
2050 return HDMMessageTypeNames[msg-HDM_FIRST];
2052 if (msg >= TCM_FIRST && msg <= TCM_FIRST + SPY_MAX_TCMMSGNUM)
2053 return TCMMessageTypeNames[msg-TCM_FIRST];
2055 if (msg >= PGM_FIRST && msg <= PGM_FIRST + SPY_MAX_PGMMSGNUM)
2056 return PGMMessageTypeNames[msg-PGM_FIRST];
2058 if (msg >= CCM_FIRST && msg <= CCM_FIRST + SPY_MAX_CCMMSGNUM)
2059 return CCMMessageTypeNames[msg-CCM_FIRST];
2061 if (msg >= WM_WINE_DESTROYWINDOW && msg <= WM_WINE_DESTROYWINDOW + SPY_MAX_WINEMSGNUM)
2062 return WINEMessageTypeNames[msg-WM_WINE_DESTROYWINDOW];
2064 return NULL;
2067 /***********************************************************************
2068 * SPY_Bsearch_Msg
2070 static const USER_MSG *SPY_Bsearch_Msg( const USER_MSG *first, const USER_MSG *last, UINT code)
2072 INT count;
2073 const USER_MSG *test;
2075 while (last >= first) {
2076 count = 1 + last - first;
2077 if (count < 3) {
2078 #if DEBUG_SPY
2079 TRACE("code=%d, f-value=%d, f-name=%s, l-value=%d, l-name=%s, l-len=%d,\n",
2080 code, first->value, first->name, last->value, last->name, last->len);
2081 #endif
2082 if (first->value == code) return first;
2083 if (last->value == code) return last;
2084 return NULL;
2086 count = count / 2;
2087 test = first + count;
2088 #if DEBUG_SPY
2089 TRACE("first=%p, last=%p, test=%p, t-value=%d, code=%d, count=%d\n",
2090 first, last, test, test->value, code, count);
2091 #endif
2092 if (test->value == code) return test;
2093 if (test->value > code)
2094 last = test - 1;
2095 else
2096 first = test + 1;
2098 return NULL;
2101 /***********************************************************************
2102 * SPY_GetClassLongOffsetName
2104 * Gets the name of a class long offset.
2106 const char *SPY_GetClassLongOffsetName( INT offset )
2108 INT index;
2109 if (offset < 0 && offset % 2 == 0 && ((index = -(offset + 8) / 2) <
2110 sizeof(ClassLongOffsetNames) / sizeof(*ClassLongOffsetNames)))
2112 return ClassLongOffsetNames[index];
2115 return "?";
2118 /***********************************************************************
2119 * SPY_GetClassName
2121 * Sets the value of "wnd_class" member of the instance structure.
2123 static void SPY_GetClassName( SPY_INSTANCE *sp_e )
2125 /* special code to detect a property sheet dialog */
2126 if ((GetClassLongW(sp_e->msg_hwnd, GCW_ATOM) == WC_DIALOG) &&
2127 (GetPropW(sp_e->msg_hwnd, PropSheetInfoStr))) {
2128 strcpyW(sp_e->wnd_class, WC_PROPSHEETW);
2130 else {
2131 GetClassNameW(sp_e->msg_hwnd, sp_e->wnd_class, sizeof(sp_e->wnd_class)/sizeof(WCHAR));
2135 /***********************************************************************
2136 * SPY_GetMsgStuff
2138 * Get message name and other information for dumping
2140 static void SPY_GetMsgStuff( SPY_INSTANCE *sp_e )
2142 const USER_MSG *p;
2143 const char *msg_name = SPY_GetMsgInternal( sp_e->msgnum );
2145 sp_e->data_len = 0;
2146 if (!msg_name)
2148 INT i = 0;
2150 if (sp_e->msgnum >= 0xc000)
2152 if (GlobalGetAtomNameA( sp_e->msgnum, sp_e->msg_name+1, sizeof(sp_e->msg_name)-2 ))
2154 sp_e->msg_name[0] = '\"';
2155 strcat( sp_e->msg_name, "\"" );
2156 return;
2159 if (!sp_e->wnd_class[0]) SPY_GetClassName(sp_e);
2161 #if DEBUG_SPY
2162 TRACE("looking class %s\n", debugstr_w(sp_e->wnd_class));
2163 #endif
2165 while (cc_array[i].classname &&
2166 strcmpiW(cc_array[i].classname, sp_e->wnd_class) != 0) i++;
2168 if (cc_array[i].classname)
2170 #if DEBUG_SPY
2171 TRACE("process class %s, first %p, last %p\n",
2172 debugstr_w(cc_array[i].classname), cc_array[i].classmsg,
2173 cc_array[i].lastmsg);
2174 #endif
2175 p = SPY_Bsearch_Msg (cc_array[i].classmsg, cc_array[i].lastmsg,
2176 sp_e->msgnum);
2177 if (p) {
2178 lstrcpynA (sp_e->msg_name, p->name, sizeof(sp_e->msg_name));
2179 sp_e->data_len = p->len;
2180 return;
2183 if (sp_e->msgnum >= WM_USER && sp_e->msgnum <= WM_APP)
2184 sprintf( sp_e->msg_name, "WM_USER+%d", sp_e->msgnum - WM_USER );
2185 else
2186 sprintf( sp_e->msg_name, "%04x", sp_e->msgnum );
2188 else
2190 lstrcpynA(sp_e->msg_name, msg_name, sizeof(sp_e->msg_name));
2194 /***********************************************************************
2195 * SPY_GetWndName
2197 * Sets the value of "wnd_name" and "wnd_class" members of the
2198 * instance structure.
2201 static void SPY_GetWndName( SPY_INSTANCE *sp_e )
2203 INT len;
2205 SPY_GetClassName( sp_e );
2207 len = InternalGetWindowText(sp_e->msg_hwnd, sp_e->wnd_name, sizeof(sp_e->wnd_name)/sizeof(WCHAR));
2208 if(!len) /* get class name */
2210 LPWSTR dst = sp_e->wnd_name;
2211 LPWSTR src = sp_e->wnd_class;
2212 int n = sizeof(sp_e->wnd_name)/sizeof(WCHAR) - 3;
2213 *dst++ = '{';
2214 while ((n-- > 0) && *src) *dst++ = *src++;
2215 *dst++ = '}';
2216 *dst = 0;
2220 /***********************************************************************
2221 * SPY_GetMsgName
2223 * **** External function ****
2225 * Get message name
2227 const char *SPY_GetMsgName( UINT msg, HWND hWnd )
2229 SPY_INSTANCE ext_sp_e;
2230 DWORD save_error = GetLastError();
2232 ext_sp_e.msgnum = msg;
2233 ext_sp_e.msg_hwnd = hWnd;
2234 ext_sp_e.lParam = 0;
2235 ext_sp_e.wParam = 0;
2236 ext_sp_e.wnd_class[0] = 0;
2237 SPY_GetMsgStuff(&ext_sp_e);
2238 SetLastError( save_error );
2239 return wine_dbg_sprintf("%s", ext_sp_e.msg_name);
2242 /***********************************************************************
2243 * SPY_GetVKeyName
2245 const char *SPY_GetVKeyName(WPARAM wParam)
2247 const char *vk_key_name;
2249 if(wParam <= SPY_MAX_VKKEYSNUM && VK_KeyNames[wParam])
2250 vk_key_name = VK_KeyNames[wParam];
2251 else
2252 vk_key_name = "VK_???";
2254 return vk_key_name;
2257 /***********************************************************************
2258 * SPY_Bsearch_Notify
2260 static const SPY_NOTIFY *SPY_Bsearch_Notify( const SPY_NOTIFY *first, const SPY_NOTIFY *last, UINT code)
2262 INT count;
2263 const SPY_NOTIFY *test;
2265 while (last >= first) {
2266 count = 1 + last - first;
2267 if (count < 3) {
2268 #if DEBUG_SPY
2269 TRACE("code=%d, f-value=%d, f-name=%s, l-value=%d, l-name=%s, l-len=%d,\n",
2270 code, first->value, first->name, last->value, last->name, last->len);
2271 #endif
2272 if (first->value == code) return first;
2273 if (last->value == code) return last;
2274 return NULL;
2276 count = count / 2;
2277 test = first + count;
2278 #if DEBUG_SPY
2279 TRACE("first=%p, last=%p, test=%p, t-value=%d, code=%d, count=%d\n",
2280 first, last, test, test->value, code, count);
2281 #endif
2282 if (test->value == code) return test;
2283 if (test->value < code)
2284 last = test - 1;
2285 else
2286 first = test + 1;
2288 return NULL;
2291 /***********************************************************************
2292 * SPY_DumpMem
2294 static void SPY_DumpMem (LPCSTR header, const UINT *q, INT len)
2296 int i;
2298 for(i=0; i<len-12; i+=16) {
2299 TRACE("%s [%04x] %08x %08x %08x %08x\n",
2300 header, i, *q, *(q+1), *(q+2), *(q+3));
2301 q += 4;
2303 switch ((len - i + 3) & (~3)) {
2304 case 16:
2305 TRACE("%s [%04x] %08x %08x %08x %08x\n",
2306 header, i, *q, *(q+1), *(q+2), *(q+3));
2307 break;
2308 case 12:
2309 TRACE("%s [%04x] %08x %08x %08x\n",
2310 header, i, *q, *(q+1), *(q+2));
2311 break;
2312 case 8:
2313 TRACE("%s [%04x] %08x %08x\n",
2314 header, i, *q, *(q+1));
2315 break;
2316 case 4:
2317 TRACE("%s [%04x] %08x\n",
2318 header, i, *q);
2319 break;
2320 default:
2321 break;
2325 /***********************************************************************
2326 * SPY_DumpStructure
2328 static void SPY_DumpStructure(const SPY_INSTANCE *sp_e, BOOL enter)
2330 switch (sp_e->msgnum)
2332 case LVM_INSERTITEMW:
2333 case LVM_INSERTITEMA:
2334 case LVM_SETITEMW:
2335 case LVM_SETITEMA:
2336 if (!enter) break;
2337 /* fall through */
2338 case LVM_GETITEMW:
2339 case LVM_GETITEMA:
2341 LPLVITEMA item = (LPLVITEMA) sp_e->lParam;
2342 if (item) {
2343 SPY_DumpMem ("LVITEM", (UINT*)item, sizeof(LVITEMA));
2345 break;
2347 case TCM_INSERTITEMW:
2348 case TCM_INSERTITEMA:
2349 case TCM_SETITEMW:
2350 case TCM_SETITEMA:
2351 if (!enter) break;
2352 /* fall through */
2353 case TCM_GETITEMW:
2354 case TCM_GETITEMA:
2356 TCITEMA *item = (TCITEMA *) sp_e->lParam;
2357 if (item) {
2358 SPY_DumpMem ("TCITEM", (UINT*)item, sizeof(TCITEMA));
2360 break;
2362 case TCM_ADJUSTRECT:
2363 case LVM_GETITEMRECT:
2364 case LVM_GETSUBITEMRECT:
2366 LPRECT rc = (LPRECT) sp_e->lParam;
2367 if (rc)
2368 TRACE("lParam rect (%s)\n", wine_dbgstr_rect(rc));
2369 break;
2371 case LVM_SETITEMPOSITION32:
2372 if (!enter) break;
2373 /* fall through */
2374 case LVM_GETITEMPOSITION:
2375 case LVM_GETORIGIN:
2377 LPPOINT point = (LPPOINT) sp_e->lParam;
2378 if (point) {
2379 TRACE("lParam point x=%d, y=%d\n", point->x, point->y);
2381 break;
2383 case SBM_SETRANGE:
2384 if (!enter && (sp_e->msgnum == SBM_SETRANGE)) break;
2385 TRACE("min=%d max=%d\n", (INT)sp_e->wParam, (INT)sp_e->lParam);
2386 break;
2387 case SBM_GETRANGE:
2388 if ((enter && (sp_e->msgnum == SBM_GETRANGE)) ||
2389 (!enter && (sp_e->msgnum == SBM_SETRANGE))) break;
2391 LPINT ptmin = (LPINT) sp_e->wParam;
2392 LPINT ptmax = (LPINT) sp_e->lParam;
2393 if (ptmin && ptmax)
2394 TRACE("min=%d max=%d\n", *ptmin, *ptmax);
2395 else if (ptmin)
2396 TRACE("min=%d max=n/a\n", *ptmin);
2397 else if (ptmax)
2398 TRACE("min=n/a max=%d\n", *ptmax);
2399 break;
2401 case EM_EXSETSEL:
2402 if (enter && sp_e->lParam)
2404 CHARRANGE *cr = (CHARRANGE *) sp_e->lParam;
2405 TRACE("CHARRANGE: cpMin=%d cpMax=%d\n", cr->cpMin, cr->cpMax);
2407 break;
2408 case EM_SETCHARFORMAT:
2409 if (enter && sp_e->lParam)
2411 CHARFORMATW *cf = (CHARFORMATW *) sp_e->lParam;
2412 TRACE("CHARFORMAT: dwMask=0x%08x dwEffects=", cf->dwMask);
2413 if ((cf->dwMask & CFM_BOLD) && (cf->dwEffects & CFE_BOLD))
2414 TRACE(" CFE_BOLD");
2415 if ((cf->dwMask & CFM_COLOR) && (cf->dwEffects & CFE_AUTOCOLOR))
2416 TRACE(" CFE_AUTOCOLOR");
2417 if ((cf->dwMask & CFM_ITALIC) && (cf->dwEffects & CFE_ITALIC))
2418 TRACE(" CFE_ITALIC");
2419 if ((cf->dwMask & CFM_PROTECTED) && (cf->dwEffects & CFE_PROTECTED))
2420 TRACE(" CFE_PROTECTED");
2421 if ((cf->dwMask & CFM_STRIKEOUT) && (cf->dwEffects & CFE_STRIKEOUT))
2422 TRACE(" CFE_STRIKEOUT");
2423 if ((cf->dwMask & CFM_UNDERLINE) && (cf->dwEffects & CFE_UNDERLINE))
2424 TRACE(" CFE_UNDERLINE");
2425 TRACE("\n");
2426 if (cf->dwMask & CFM_SIZE)
2427 TRACE("yHeight=%d\n", cf->yHeight);
2428 if (cf->dwMask & CFM_OFFSET)
2429 TRACE("yOffset=%d\n", cf->yOffset);
2430 if ((cf->dwMask & CFM_COLOR) && !(cf->dwEffects & CFE_AUTOCOLOR))
2431 TRACE("crTextColor=%x\n", cf->crTextColor);
2432 TRACE("bCharSet=%x bPitchAndFamily=%x\n", cf->bCharSet, cf->bPitchAndFamily);
2433 /* FIXME: we should try to be a bit more intelligent about
2434 * whether this is in ANSI or Unicode (it could be either) */
2435 if (cf->dwMask & CFM_FACE)
2436 TRACE("szFaceName=%s\n", debugstr_wn(cf->szFaceName, LF_FACESIZE));
2437 /* FIXME: handle CHARFORMAT2 too */
2439 break;
2440 case WM_DRAWITEM:
2441 if (!enter) break;
2443 DRAWITEMSTRUCT *lpdis = (DRAWITEMSTRUCT*) sp_e->lParam;
2444 TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
2445 lpdis->CtlType, lpdis->CtlID);
2446 TRACE("itemID=0x%08x itemAction=0x%08x itemState=0x%08x\n",
2447 lpdis->itemID, lpdis->itemAction, lpdis->itemState);
2448 TRACE("hWnd=%p hDC=%p (%s) itemData=0x%08lx\n",
2449 lpdis->hwndItem, lpdis->hDC,
2450 wine_dbgstr_rect(&lpdis->rcItem), lpdis->itemData);
2452 break;
2453 case WM_MEASUREITEM:
2455 MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) sp_e->lParam;
2456 TRACE("MEASUREITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
2457 lpmis->CtlType, lpmis->CtlID);
2458 TRACE("itemID=0x%08x itemWidth=0x%08x itemHeight=0x%08x\n",
2459 lpmis->itemID, lpmis->itemWidth, lpmis->itemHeight);
2460 TRACE("itemData=0x%08lx\n", lpmis->itemData);
2462 break;
2463 case WM_NCCREATE:
2464 case WM_CREATE:
2466 BOOL unicode;
2467 CREATESTRUCTA *cs;
2469 if (!enter) break;
2471 unicode = IsWindowUnicode(sp_e->msg_hwnd);
2472 cs = (CREATESTRUCTA *)sp_e->lParam;
2473 TRACE("%s %s ex=%08x style=%08x %d,%d %dx%d parent=%p menu=%p inst=%p params=%p\n",
2474 unicode ? debugstr_w((LPCWSTR)cs->lpszName) : debugstr_a(cs->lpszName),
2475 unicode ? debugstr_w((LPCWSTR)cs->lpszClass) : debugstr_a(cs->lpszClass),
2476 cs->dwExStyle, cs->style, cs->x, cs->y, cs->cx, cs->cy,
2477 cs->hwndParent, cs->hMenu, cs->hInstance, cs->lpCreateParams);
2478 break;
2480 case WM_SIZE:
2481 if (!enter) break;
2482 TRACE("cx=%d cy=%d\n", LOWORD(sp_e->lParam), HIWORD(sp_e->lParam));
2483 break;
2484 case WM_WINDOWPOSCHANGED:
2485 if (!enter) break;
2486 case WM_WINDOWPOSCHANGING:
2488 WINDOWPOS *lpwp = (WINDOWPOS *)sp_e->lParam;
2489 TRACE("WINDOWPOS hwnd=%p, after=%p, at (%d,%d) w=%d h=%d, flags=0x%08x\n",
2490 lpwp->hwnd, lpwp->hwndInsertAfter, lpwp->x, lpwp->y,
2491 lpwp->cx, lpwp->cy, lpwp->flags);
2493 break;
2494 case WM_STYLECHANGED:
2495 if (!enter) break;
2496 case WM_STYLECHANGING:
2498 LPSTYLESTRUCT ss = (LPSTYLESTRUCT) sp_e->lParam;
2499 TRACE("STYLESTRUCT: StyleOld=0x%08x, StyleNew=0x%08x\n",
2500 ss->styleOld, ss->styleNew);
2502 break;
2503 case WM_NCCALCSIZE:
2505 RECT *rc = (RECT *)sp_e->lParam;
2506 TRACE("Rect (%s)\n", wine_dbgstr_rect(rc));
2508 break;
2509 case WM_NOTIFY:
2510 /* if (!enter) break; */
2512 NMHDR * pnmh = (NMHDR*) sp_e->lParam;
2513 UINT *q, dumplen;
2514 const SPY_NOTIFY *p;
2515 WCHAR from_class[60];
2516 DWORD save_error;
2518 p = SPY_Bsearch_Notify (&spnfy_array[0], end_spnfy_array,
2519 pnmh->code);
2520 if (p) {
2521 TRACE("NMHDR hwndFrom=%p idFrom=0x%08lx code=%s<0x%08x>, extra=0x%x\n",
2522 pnmh->hwndFrom, pnmh->idFrom, p->name, pnmh->code, p->len);
2523 dumplen = p->len;
2525 /* for CUSTOMDRAW, dump all the data for TOOLBARs */
2526 if (pnmh->code == NM_CUSTOMDRAW) {
2527 /* save and restore error code over the next call */
2528 save_error = GetLastError();
2529 GetClassNameW(pnmh->hwndFrom, from_class,
2530 sizeof(from_class)/sizeof(WCHAR));
2531 SetLastError(save_error);
2532 if (strcmpW(TOOLBARCLASSNAMEW, from_class) == 0)
2533 dumplen = sizeof(NMTBCUSTOMDRAW)-sizeof(NMHDR);
2534 } else if ( pnmh->code >= HDN_ENDDRAG
2535 && pnmh->code <= HDN_ITEMCHANGINGA ) {
2536 dumplen = sizeof(NMHEADERA)-sizeof(NMHDR);
2538 if (dumplen > 0) {
2539 q = (UINT *)(pnmh + 1);
2540 SPY_DumpMem ("NM extra", q, (INT)dumplen);
2543 else
2544 TRACE("NMHDR hwndFrom=%p idFrom=0x%08lx code=0x%08x\n",
2545 pnmh->hwndFrom, pnmh->idFrom, pnmh->code);
2547 default:
2548 if (sp_e->data_len > 0)
2549 SPY_DumpMem ("MSG lParam", (UINT *)sp_e->lParam, sp_e->data_len);
2550 break;
2554 /***********************************************************************
2555 * SPY_EnterMessage
2557 void SPY_EnterMessage( INT iFlag, HWND hWnd, UINT msg,
2558 WPARAM wParam, LPARAM lParam )
2560 SPY_INSTANCE sp_e;
2561 int indent;
2562 DWORD save_error = GetLastError();
2564 if (!TRACE_ON(message) || SPY_EXCLUDE(msg)) return;
2566 sp_e.msgnum = msg;
2567 sp_e.msg_hwnd = hWnd;
2568 sp_e.lParam = lParam;
2569 sp_e.wParam = wParam;
2570 SPY_GetWndName(&sp_e);
2571 SPY_GetMsgStuff(&sp_e);
2572 indent = get_indent_level();
2574 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
2575 switch(iFlag)
2577 case SPY_DISPATCHMESSAGE16:
2578 TRACE("%*s(%04x) %-16s message [%04x] %s dispatched wp=%04lx lp=%08lx\n",
2579 indent, "", HWND_16(hWnd),
2580 debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name, wParam, lParam);
2581 break;
2583 case SPY_DISPATCHMESSAGE:
2584 TRACE("%*s(%p) %-16s message [%04x] %s dispatched wp=%08lx lp=%08lx\n",
2585 indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg,
2586 sp_e.msg_name, wParam, lParam);
2587 break;
2589 case SPY_SENDMESSAGE16:
2590 case SPY_SENDMESSAGE:
2592 char taskName[20];
2593 DWORD tid = GetWindowThreadProcessId( hWnd, NULL );
2595 if (tid == GetCurrentThreadId()) strcpy( taskName, "self" );
2596 else sprintf( taskName, "tid %04x", GetCurrentThreadId() );
2598 if (iFlag == SPY_SENDMESSAGE16)
2599 TRACE("%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04lx lp=%08lx\n",
2600 indent, "", HWND_16(hWnd), debugstr_w(sp_e.wnd_name), msg,
2601 sp_e.msg_name, taskName, wParam, lParam );
2602 else
2603 { TRACE("%*s(%p) %-16s message [%04x] %s sent from %s wp=%08lx lp=%08lx\n",
2604 indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg,
2605 sp_e.msg_name, taskName, wParam, lParam );
2606 SPY_DumpStructure(&sp_e, TRUE);
2609 break;
2611 case SPY_DEFWNDPROC16:
2612 if( SPY_ExcludeDWP ) return;
2613 TRACE("%*s(%04x) DefWindowProc16: %s [%04x] wp=%04lx lp=%08lx\n",
2614 indent, "", HWND_16(hWnd), sp_e.msg_name, msg, wParam, lParam );
2615 break;
2617 case SPY_DEFWNDPROC:
2618 if( SPY_ExcludeDWP ) return;
2619 TRACE("%*s(%p) DefWindowProc32: %s [%04x] wp=%08lx lp=%08lx\n",
2620 indent, "", hWnd, sp_e.msg_name,
2621 msg, wParam, lParam );
2622 break;
2624 set_indent_level( indent + SPY_INDENT_UNIT );
2625 SetLastError( save_error );
2629 /***********************************************************************
2630 * SPY_ExitMessage
2632 void SPY_ExitMessage( INT iFlag, HWND hWnd, UINT msg, LRESULT lReturn,
2633 WPARAM wParam, LPARAM lParam )
2635 SPY_INSTANCE sp_e;
2636 int indent;
2637 DWORD save_error = GetLastError();
2639 if (!TRACE_ON(message) || SPY_EXCLUDE(msg) ||
2640 (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND)) )
2641 return;
2643 sp_e.msgnum = msg;
2644 sp_e.msg_hwnd = hWnd;
2645 sp_e.lParam = lParam;
2646 sp_e.wParam = wParam;
2647 SPY_GetWndName(&sp_e);
2648 SPY_GetMsgStuff(&sp_e);
2650 if ((indent = get_indent_level()))
2652 indent -= SPY_INDENT_UNIT;
2653 set_indent_level( indent );
2656 switch(iFlag)
2658 case SPY_RESULT_DEFWND16:
2659 TRACE(" %*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
2660 indent, "", HWND_16(hWnd), sp_e.msg_name, msg, lReturn );
2661 break;
2663 case SPY_RESULT_DEFWND:
2664 TRACE(" %*s(%p) DefWindowProc32: %s [%04x] returned %08lx\n",
2665 indent, "", hWnd, sp_e.msg_name, msg, lReturn );
2666 break;
2668 case SPY_RESULT_OK16:
2669 TRACE(" %*s(%04x) %-16s message [%04x] %s returned %08lx\n",
2670 indent, "", HWND_16(hWnd), debugstr_w(sp_e.wnd_name), msg,
2671 sp_e.msg_name, lReturn );
2672 break;
2674 case SPY_RESULT_OK:
2675 TRACE(" %*s(%p) %-16s message [%04x] %s returned %08lx\n",
2676 indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg,
2677 sp_e.msg_name, lReturn );
2678 SPY_DumpStructure(&sp_e, FALSE);
2679 break;
2681 case SPY_RESULT_INVALIDHWND16:
2682 WARN(" %*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
2683 indent, "", HWND_16(hWnd), debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name );
2684 break;
2686 case SPY_RESULT_INVALIDHWND:
2687 WARN(" %*s(%p) %-16s message [%04x] %s HAS INVALID HWND\n",
2688 indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg,
2689 sp_e.msg_name );
2690 break;
2692 SetLastError( save_error );
2696 /***********************************************************************
2697 * SPY_Init
2699 int SPY_Init(void)
2701 int i;
2702 UINT j;
2703 char buffer[1024];
2704 const SPY_NOTIFY *p;
2705 const USER_MSG *q;
2706 HKEY hkey;
2708 if (!TRACE_ON(message)) return TRUE;
2710 indent_tls_index = TlsAlloc();
2711 /* @@ Wine registry key: HKCU\Software\Wine\Debug */
2712 if(!RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Debug", &hkey))
2714 DWORD type, count = sizeof(buffer);
2716 buffer[0] = 0;
2717 if (!RegQueryValueExA(hkey, "SpyInclude", 0, &type, (LPBYTE) buffer, &count) &&
2718 strcmp( buffer, "INCLUDEALL" ))
2720 TRACE("Include=%s\n", buffer );
2721 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
2722 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
2725 count = sizeof(buffer);
2726 buffer[0] = 0;
2727 if (!RegQueryValueExA(hkey, "SpyExclude", 0, &type, (LPBYTE) buffer, &count))
2729 TRACE("Exclude=%s\n", buffer );
2730 if (!strcmp( buffer, "EXCLUDEALL" ))
2731 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
2732 else
2733 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
2734 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
2737 SPY_ExcludeDWP = 0;
2738 count = sizeof(buffer);
2739 if(!RegQueryValueExA(hkey, "SpyExcludeDWP", 0, &type, (LPBYTE) buffer, &count))
2740 SPY_ExcludeDWP = atoi(buffer);
2742 RegCloseKey(hkey);
2745 /* find last good entry in spy notify array and save addr for b-search */
2746 p = &spnfy_array[0];
2747 j = 0xffffffff;
2748 while (p->name) {
2749 if (p->value > j) {
2750 ERR("Notify message array out of order\n");
2751 ERR(" between values [%08x] %s and [%08x] %s\n",
2752 j, (p-1)->name, p->value, p->name);
2753 break;
2755 j = p->value;
2756 p++;
2758 p--;
2759 end_spnfy_array = p;
2761 /* find last good entry in each common control message array
2762 * and save addr for b-search.
2764 i = 0;
2765 while (cc_array[i].classname) {
2767 j = 0x0400; /* minimum entry in array */
2768 q = cc_array[i].classmsg;
2769 while(q->name) {
2770 if (q->value <= j) {
2771 ERR("Class message array out of order for class %s\n",
2772 debugstr_w(cc_array[i].classname));
2773 ERR(" between values [%04x] %s and [%04x] %s\n",
2774 j, (q-1)->name, q->value, q->name);
2775 break;
2777 j = q->value;
2778 q++;
2780 q--;
2781 cc_array[i].lastmsg = q;
2783 i++;
2786 return 1;