2 * Message spying routines
4 * Copyright 1994, Bob Amstadt
14 #include "wine/winuser16.h"
15 #include "wine/winbase16.h"
16 #include "wine/unicode.h"
18 #include "debugtools.h"
22 DEFAULT_DEBUG_CHANNEL(message);
24 #define SPY_MAX_MSGNUM WM_USER
25 #define SPY_INDENT_UNIT 4 /* 4 spaces */
27 static const char * const MessageTypeNames[SPY_MAX_MSGNUM + 1] =
45 "WM_CLOSE", /* 0x10 */
61 "WM_SETCURSOR", /* 0x20 */
77 "WM_SETFONT", /* 0x30 */
89 "wm_otherwindowcreated",
90 "wm_otherwindowdestroyed",
91 "wm_activateshellwindow",
95 "wm_compacting", NULL, NULL,
96 "WM_COMMNOTIFY", NULL,
97 "WM_WINDOWPOSCHANGING", /* 0x0046 */
98 "WM_WINDOWPOSCHANGED", /* 0x0047 */
101 "WM_CANCELJOURNAL", NULL, NULL,
105 "WM_INPUTLANGCHANGEREQUEST",
106 "WM_INPUTLANGCHANGE",
110 "WM_NOTIFYFORMAT", NULL, NULL,
111 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
114 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
115 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
118 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
126 "WM_SETICON", /* 0x0080 */
127 "WM_NCCREATE", /* 0x0081 */
128 "WM_NCDESTROY", /* 0x0082 */
129 "WM_NCCALCSIZE", /* 0x0083 */
130 "WM_NCHITTEST", /* 0x0084 */
131 "WM_NCPAINT", /* 0x0085 */
132 "WM_NCACTIVATE", /* 0x0086 */
133 "WM_GETDLGCODE", /* 0x0087 */
135 "WM_SYNCTASK", NULL, NULL, NULL, NULL, NULL, NULL,
138 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
139 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
142 "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,
154 /* 0x00B0 - Win32 Edit controls */
155 "EM_GETSEL", /* 0x00b0 */
156 "EM_SETSEL", /* 0x00b1 */
157 "EM_GETRECT", /* 0x00b2 */
158 "EM_SETRECT", /* 0x00b3 */
159 "EM_SETRECTNP", /* 0x00b4 */
160 "EM_SCROLL", /* 0x00b5 */
161 "EM_LINESCROLL", /* 0x00b6 */
162 "EM_SCROLLCARET", /* 0x00b7 */
163 "EM_GETMODIFY", /* 0x00b8 */
164 "EM_SETMODIFY", /* 0x00b9 */
165 "EM_GETLINECOUNT", /* 0x00ba */
166 "EM_LINEINDEX", /* 0x00bb */
167 "EM_SETHANDLE", /* 0x00bc */
168 "EM_GETHANDLE", /* 0x00bd */
169 "EM_GETTHUMB", /* 0x00be */
173 "EM_LINELENGTH", /* 0x00c1 */
174 "EM_REPLACESEL", /* 0x00c2 */
176 "EM_GETLINE", /* 0x00c4 */
177 "EM_LIMITTEXT", /* 0x00c5 */
178 "EM_CANUNDO", /* 0x00c6 */
179 "EM_UNDO", /* 0x00c7 */
180 "EM_FMTLINES", /* 0x00c8 */
181 "EM_LINEFROMCHAR", /* 0x00c9 */
183 "EM_SETTABSTOPS", /* 0x00cb */
184 "EM_SETPASSWORDCHAR", /* 0x00cc */
185 "EM_EMPTYUNDOBUFFER", /* 0x00cd */
186 "EM_GETFIRSTVISIBLELINE", /* 0x00ce */
187 "EM_SETREADONLY", /* 0x00cf */
189 "EM_SETWORDBREAKPROC", /* 0x00d0 */
190 "EM_GETWORDBREAKPROC", /* 0x00d1 */
191 "EM_GETPASSWORDCHAR", /* 0x00d2 */
192 "EM_SETMARGINS", /* 0x00d3 */
193 "EM_GETMARGINS", /* 0x00d4 */
194 "EM_GETLIMITTEXT", /* 0x00d5 */
195 "EM_POSFROMCHAR", /* 0x00d6 */
196 "EM_CHARFROMPOS", /* 0x00d7 */
197 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
199 /* 0x00E0 - Win32 Scrollbars */
200 "SBM_SETPOS", /* 0x00e0 */
201 "SBM_GETPOS", /* 0x00e1 */
202 "SBM_SETRANGE", /* 0x00e2 */
203 "SBM_GETRANGE", /* 0x00e3 */
204 "SBM_ENABLE_ARROWS", /* 0x00e4 */
206 "SBM_SETRANGEREDRAW", /* 0x00e6 */
208 "SBM_SETSCROLLINFO", /* 0x00e9 */
209 "SBM_GETSCROLLINFO", /* 0x00ea */
210 NULL, NULL, NULL, NULL, NULL,
212 /* 0x00F0 - Win32 Buttons */
213 "BM_GETCHECK", /* 0x00f0 */
214 "BM_SETCHECK", /* 0x00f1 */
215 "BM_GETSTATE", /* 0x00f2 */
216 "BM_SETSTATE", /* 0x00f3 */
217 "BM_SETSTYLE", /* 0x00f4 */
218 "BM_CLICK", /* 0x00f5 */
219 "BM_GETIMAGE", /* 0x00f6 */
220 "BM_SETIMAGE", /* 0x00f7 */
221 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
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 */
236 "WM_IME_STARTCOMPOSITION", /* 0x010d */
237 "WM_IME_ENDCOMPOSITION", /* 0x010e */
238 "WM_IME_COMPOSITION", /* 0x010f */
240 "WM_INITDIALOG", /* 0x0110 */
241 "WM_COMMAND", /* 0x0111 */
242 "WM_SYSCOMMAND", /* 0x0112 */
243 "WM_TIMER", /* 0x0113 */
244 "WM_HSCROLL", /* 0x0114 */
245 "WM_VSCROLL", /* 0x0115 */
246 "WM_INITMENU", /* 0x0116 */
247 "WM_INITMENUPOPUP", /* 0x0117 */
248 "WM_SYSTIMER", /* 0x0118 */
249 NULL, NULL, NULL, NULL, NULL, NULL,
250 "WM_MENUSELECT", /* 0x011f */
252 "WM_MENUCHAR", /* 0x0120 */
253 "WM_ENTERIDLE", /* 0x0121 */
255 "WM_MENURBUTTONUP", /* 0x0122 */
256 "WM_MENUDRAG", /* 0x0123 */
257 "WM_MENUGETOBJECT", /* 0x0124 */
258 "WM_UNINITMENUPOPUP", /* 0x0125 */
259 "WM_MENUCOMMAND", /* 0x0126 */
260 "WM_CHANGEUISTATE", /* 0x0127 */
261 "WM_UPDATEUISTATE", /* 0x0128 */
262 "WM_QUERYUISTATE", /* 0x0129 */
264 NULL, NULL, NULL, NULL, NULL, NULL,
268 "WM_LBTRACKPOINT", /* 0x0131 */
269 "WM_CTLCOLORMSGBOX", /* 0x0132 */
270 "WM_CTLCOLOREDIT", /* 0x0133 */
271 "WM_CTLCOLORLISTBOX", /* 0x0134 */
272 "WM_CTLCOLORBTN", /* 0x0135 */
273 "WM_CTLCOLORDLG", /* 0x0136 */
274 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
275 "WM_CTLCOLORSTATIC", /* 0x0138 */
276 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
278 /* 0x0140 - Win32 Comboboxes */
279 "CB_GETEDITSEL", /* 0x0140 */
280 "CB_LIMITTEXT", /* 0x0141 */
281 "CB_SETEDITSEL", /* 0x0142 */
282 "CB_ADDSTRING", /* 0x0143 */
283 "CB_DELETESTRING", /* 0x0144 */
284 "CB_DIR", /* 0x0145 */
285 "CB_GETCOUNT", /* 0x0146 */
286 "CB_GETCURSEL", /* 0x0147 */
287 "CB_GETLBTEXT", /* 0x0148 */
288 "CB_GETLBTEXTLEN", /* 0x0149 */
289 "CB_INSERTSTRING", /* 0x014a */
290 "CB_RESETCONTENT", /* 0x014b */
291 "CB_FINDSTRING", /* 0x014c */
292 "CB_SELECTSTRING", /* 0x014d */
293 "CB_SETCURSEL", /* 0x014e */
294 "CB_SHOWDROPDOWN", /* 0x014f */
296 "CB_GETITEMDATA", /* 0x0150 */
297 "CB_SETITEMDATA", /* 0x0151 */
298 "CB_GETDROPPEDCONTROLRECT", /* 0x0152 */
299 "CB_SETITEMHEIGHT", /* 0x0153 */
300 "CB_GETITEMHEIGHT", /* 0x0154 */
301 "CB_SETEXTENDEDUI", /* 0x0155 */
302 "CB_GETEXTENDEDUI", /* 0x0156 */
303 "CB_GETDROPPEDSTATE", /* 0x0157 */
304 "CB_FINDSTRINGEXACT", /* 0x0158 */
305 "CB_SETLOCALE", /* 0x0159 */
306 "CB_GETLOCALE", /* 0x015a */
307 "CB_GETTOPINDEX", /* 0x015b */
308 "CB_SETTOPINDEX", /* 0x015c */
309 "CB_GETHORIZONTALEXTENT", /* 0x015d */
310 "CB_SETHORIZONTALEXTENT", /* 0x015e */
311 "CB_GETDROPPEDWIDTH", /* 0x015f */
313 "CB_SETDROPPEDWIDTH", /* 0x0160 */
314 "CB_INITSTORAGE", /* 0x0161 */
315 NULL, NULL, NULL, NULL, NULL, NULL,
316 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
318 /* 0x0170 - Win32 Static controls */
319 "STM_SETICON", /* 0x0170 */
320 "STM_GETICON", /* 0x0171 */
321 "STM_SETIMAGE", /* 0x0172 */
322 "STM_GETIMAGE", /* 0x0173 */
323 NULL, NULL, NULL, NULL,
324 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
326 /* 0x0180 - Win32 Listboxes */
327 "LB_ADDSTRING", /* 0x0180 */
328 "LB_INSERTSTRING", /* 0x0181 */
329 "LB_DELETESTRING", /* 0x0182 */
330 "LB_SELITEMRANGEEX", /* 0x0183 */
331 "LB_RESETCONTENT", /* 0x0184 */
332 "LB_SETSEL", /* 0x0185 */
333 "LB_SETCURSEL", /* 0x0186 */
334 "LB_GETSEL", /* 0x0187 */
335 "LB_GETCURSEL", /* 0x0188 */
336 "LB_GETTEXT", /* 0x0189 */
337 "LB_GETTEXTLEN", /* 0x018a */
338 "LB_GETCOUNT", /* 0x018b */
339 "LB_SELECTSTRING", /* 0x018c */
340 "LB_DIR", /* 0x018d */
341 "LB_GETTOPINDEX", /* 0x018e */
342 "LB_FINDSTRING", /* 0x018f */
344 "LB_GETSELCOUNT", /* 0x0190 */
345 "LB_GETSELITEMS", /* 0x0191 */
346 "LB_SETTABSTOPS", /* 0x0192 */
347 "LB_GETHORIZONTALEXTENT", /* 0x0193 */
348 "LB_SETHORIZONTALEXTENT", /* 0x0194 */
349 "LB_SETCOLUMNWIDTH", /* 0x0195 */
350 "LB_ADDFILE", /* 0x0196 */
351 "LB_SETTOPINDEX", /* 0x0197 */
352 "LB_GETITEMRECT", /* 0x0198 */
353 "LB_GETITEMDATA", /* 0x0199 */
354 "LB_SETITEMDATA", /* 0x019a */
355 "LB_SELITEMRANGE", /* 0x019b */
356 "LB_SETANCHORINDEX", /* 0x019c */
357 "LB_GETANCHORINDEX", /* 0x019d */
358 "LB_SETCARETINDEX", /* 0x019e */
359 "LB_GETCARETINDEX", /* 0x019f */
361 "LB_SETITEMHEIGHT", /* 0x01a0 */
362 "LB_GETITEMHEIGHT", /* 0x01a1 */
363 "LB_FINDSTRINGEXACT", /* 0x01a2 */
364 "LB_CARETON", /* 0x01a3 */
365 "LB_CARETOFF", /* 0x01a4 */
366 "LB_SETLOCALE", /* 0x01a5 */
367 "LB_GETLOCALE", /* 0x01a6 */
368 "LB_SETCOUNT", /* 0x01a7 */
369 "LB_INITSTORAGE", /* 0x01a8 */
370 "LB_ITEMFROMPOINT", /* 0x01a9 */
371 NULL, NULL, NULL, NULL, NULL, NULL,
374 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
375 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
378 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
379 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
382 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
383 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
386 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
387 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
390 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
391 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
393 "WM_MOUSEMOVE", /* 0x0200 */
394 "WM_LBUTTONDOWN", /* 0x0201 */
395 "WM_LBUTTONUP", /* 0x0202 */
396 "WM_LBUTTONDBLCLK", /* 0x0203 */
397 "WM_RBUTTONDOWN", /* 0x0204 */
398 "WM_RBUTTONUP", /* 0x0205 */
399 "WM_RBUTTONDBLCLK", /* 0x0206 */
400 "WM_MBUTTONDOWN", /* 0x0207 */
401 "WM_MBUTTONUP", /* 0x0208 */
402 "WM_MBUTTONDBLCLK", /* 0x0209 */
403 "WM_MOUSEWHEEL", /* 0x020A */
404 NULL, NULL, NULL, NULL, NULL,
406 "WM_PARENTNOTIFY", /* 0x0210 */
407 "WM_ENTERMENULOOP", /* 0x0211 */
408 "WM_EXITMENULOOP", /* 0x0212 */
409 "WM_NEXTMENU", /* 0x0213 */
414 "WM_DEVICECHANGE", NULL, NULL, NULL, NULL, NULL, NULL,
416 "WM_MDICREATE", /* 0x0220 */
417 "WM_MDIDESTROY", /* 0x0221 */
418 "WM_MDIACTIVATE", /* 0x0222 */
419 "WM_MDIRESTORE", /* 0x0223 */
420 "WM_MDINEXT", /* 0x0224 */
421 "WM_MDIMAXIMIZE", /* 0x0225 */
422 "WM_MDITILE", /* 0x0226 */
423 "WM_MDICASCADE", /* 0x0227 */
424 "WM_MDIICONARRANGE", /* 0x0228 */
425 "WM_MDIGETACTIVE", /* 0x0229 */
428 "WM_QUERYDROPOBJECT",
435 "WM_MDISETMENU", /* 0x0230 */
436 "WM_ENTERSIZEMOVE", /* 0x0231 */
437 "WM_EXITSIZEMOVE", /* 0x0232 */
438 "WM_DROPFILES", /* 0x0233 */
439 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
441 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,
448 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
449 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
452 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
453 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
454 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
455 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
458 NULL, "WM_IME_SETCONTEXT", "WM_IME_NOTIFY", "WM_IME_CONTROL", "WM_IME_COMPOSITIONFULL", "WM_IME_SELECT", "WM_IME_CHAR", NULL,
459 "WM_IME_REQUEST", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
460 "WM_IME_KEYDOWN", "WM_IME_KEYUP", NULL, NULL, NULL, NULL, NULL, NULL,
461 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
464 NULL, "WM_MOUSEHOVER", NULL, "WM_MOUSELEAVE", NULL, NULL, NULL, NULL,
465 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
466 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
467 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
470 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
471 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
472 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
473 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
475 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
476 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
477 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
478 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
480 "WM_CUT", /* 0x0300 */
486 "WM_RENDERALLFORMATS",
487 "WM_DESTROYCLIPBOARD",
490 "WM_VSCROLLCLIPBOARD",
492 "WM_ASKCBFORMATNAME",
494 "WM_HSCROLLCLIPBOARD",
495 "WM_QUERYNEWPALETTE", /* 0x030f*/
497 "WM_PALETTEISCHANGING",
499 "WM_HOTKEY", /* 0x0312 */
500 NULL, NULL, NULL, NULL,
503 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
505 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
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,
511 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
512 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
513 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
514 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
516 "WM_QUERYAFXWNDPROC", /* 0x0360 */
517 "WM_SIZEPARENT", /* 0x0361 */
518 "WM_SETMESSAGESTRING", /* 0x0362 */
519 "WM_IDLEUPDATECMDUI", /* 0x0363 */
520 "WM_INITIALUPDATE", /* 0x0364 */
521 "WM_COMMANDHELP", /* 0x0365 */
522 "WM_HELPHITTEST", /* 0x0366 */
523 "WM_EXITHELPMODE", /* 0x0367 */
524 "WM_RECALCPARENT", /* 0x0368 */
525 "WM_SIZECHILD", /* 0x0369 */
526 "WM_KICKIDLE", /* 0x036A */
527 "WM_QUERYCENTERWND", /* 0x036B */
528 "WM_DISABLEMODAL", /* 0x036C */
529 "WM_FLOATSTATUS", /* 0x036D */
530 "WM_ACTIVATETOPLEVEL", /* 0x036E */
531 "WM_QUERY3DCONTROLS", /* 0x036F */
533 "WM_SOCKET_NOTIFY", /* 0x0373 */
534 "WM_SOCKET_DEAD", /* 0x0374 */
535 "WM_POPMESSAGESTRING", /* 0x0375 */
536 "WM_OCC_LOADFROMSTREAM", /* 0x0376 */
537 "WM_OCC_LOADFROMSTORAGE", /* 0x0377 */
538 "WM_OCC_INITNEW", /* 0x0378 */
539 "WM_QUEUE_SENTINEL", /* 0x0379 */
540 "WM_OCC_LOADFROMSTREAM_EX", /* 0x037A */
541 "WM_OCC_LOADFROMSTORAGE_EX", /* 0x037B */
545 "WM_PENWINFIRST", /* 0x0380 */
546 "WM_RCRESULT", /* 0x0381 */
547 "WM_HOOKRCRESULT", /* 0x0382 */
548 "WM_GLOBALRCCHANGE", /* 0x0383 */
549 "WM_SKB", /* 0x0384 */
550 "WM_HEDITCTL", /* 0x0385 */
552 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
553 "WM_PENWINLAST", /* 0x038F */
555 "WM_COALESCE_FIRST", /* 0x0390 */
556 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
557 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
558 "WM_COALESCE_LAST", /* 0x039F */
565 NULL, NULL, NULL, NULL,
566 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
569 NULL, NULL, NULL, NULL, NULL,
593 NULL, NULL, NULL, NULL, NULL, NULL,
594 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
595 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
598 "WM_DDE_INITIATE", /* 0x3E0 */
599 "WM_DDE_TERMINATE", /* 0x3E1 */
600 "WM_DDE_ADVISE", /* 0x3E2 */
601 "WM_DDE_UNADVISE", /* 0x3E3 */
602 "WM_DDE_ACK", /* 0x3E4 */
603 "WM_DDE_DATA", /* 0x3E5 */
604 "WM_DDE_REQUEST", /* 0x3E6 */
605 "WM_DDE_POKE", /* 0x3E7 */
606 "WM_DDE_EXECUTE", /* 0x3E8 */
607 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
611 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
612 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
614 "WM_USER" /* 0x0400 */
618 #define SPY_MAX_LVMMSGNUM 140
619 static const char * const LVMMessageTypeNames[SPY_MAX_LVMMSGNUM + 1] =
621 "LVM_GETBKCOLOR", /* 1000 */
630 "LVM_DELETEALLITEMS",
631 "LVM_GETCALLBACKMASK",
632 "LVM_SETCALLBACKMASK",
636 "LVM_SETITEMPOSITION",
637 "LVM_GETITEMPOSITION",
638 "LVM_GETSTRINGWIDTHA",
645 "LVM_GETEDITCONTROL",
650 "LVM_GETCOLUMNWIDTH",
651 "LVM_SETCOLUMNWIDTH",
654 "LVM_CREATEDRAGIMAGE",
658 "LVM_GETTEXTBKCOLOR",
659 "LVM_SETTEXTBKCOLOR",
661 "LVM_GETCOUNTPERPAGE",
670 "LVM_SETITEMPOSITION32",
671 "LVM_GETSELECTEDCOUNT",
672 "LVM_GETITEMSPACING",
673 "LVM_GETISEARCHSTRINGA",
674 "LVM_SETICONSPACING",
675 "LVM_SETEXTENDEDLISTVIEWSTYLE",
676 "LVM_GETEXTENDEDLISTVIEWSTYLE",
677 "LVM_GETSUBITEMRECT",
678 "LVM_SUBITEMHITTEST",
679 "LVM_SETCOLUMNORDERARRAY",
680 "LVM_GETCOLUMNORDERARRAY",
685 "LVM_APPROXIMATEVIEWRECT",
687 "LVM_GETSELECTIONMARK",
688 "LVM_SETSELECTIONMARK",
694 "LVM_GETNUMBEROFWORKAREAS",
708 "LVM_GETSTRINGWIDTHW",
738 "LVM_GETISEARCHSTRINGW",
761 "LVM_GETBKIMAGEW" /* 0x108B */
765 #define SPY_MAX_TVMSGNUM 65
766 static const char * const TVMessageTypeNames[SPY_MAX_TVMSGNUM + 1] =
768 "TVM_INSERTITEMA", /* 1100 */
783 "TVM_GETEDITCONTROL",
784 "TVM_GETVISIBLECOUNT",
786 "TVM_CREATEDRAGIMAGE",
789 "TVM_SORTCHILDRENCB",
790 "TVM_ENDEDITLABELNOW",
791 "TVM_GETISEARCHSTRINGA",
805 "TVM_SETINSERTMARKCOLOR",
806 "TVM_GETINSERTMARKCOLOR",
832 "TVM_GETISEARCHSTRINGW",
837 #define SPY_MAX_HDMMSGNUM 19
838 static const char * const HDMMessageTypeNames[SPY_MAX_HDMMSGNUM + 1] =
840 "HDM_GETITEMCOUNT", /* 1200 */
856 "HDM_CREATEDRAGIMAGE",
857 "GETORDERARRAYINDEX",
858 "SETORDERARRAYINDEX",
863 #define SPY_MAX_TCMMSGNUM 62
864 static const char * const TCMMessageTypeNames[SPY_MAX_TCMMSGNUM + 1] =
875 "TCM_DELETEALLITEMS",
915 "TCM_SETMINTABWIDTH",
918 "TCM_SETEXTENDEDSTYLE",
919 "TCM_GETEXTENDEDSTYLE",
931 #define SPY_MAX_PGMMSGNUM 13
932 static const char * const PGMMessageTypeNames[SPY_MAX_PGMMSGNUM + 1] =
946 "PGM_GETBUTTONSTATE",
951 #define SPY_MAX_CCMMSGNUM 6
952 static const char * const CCMMessageTypeNames[SPY_MAX_CCMMSGNUM + 1] =
956 "CCM_SETCOLORSCHEME",
957 "CCM_GETCOLORSCHEME",
959 "CCM_SETUNICODEFORMAT",
960 "CCM_GETUNICODEFORMAT"
963 #define SPY_MAX_WINEMSGNUM 6
964 static const char * const WINEMessageTypeNames[SPY_MAX_WINEMSGNUM + 1] =
966 "WM_WINE_DESTROYWINDOW",
967 "WM_WINE_SETWINDOWPOS",
968 "WM_WINE_SHOWWINDOW",
970 "WM_WINE_SETWINDOWLONG",
971 "WM_WINE_ENABLEWINDOW"
974 /* Virtual key names */
975 #define SPY_MAX_VKKEYSNUM 255
976 static const char * const VK_KeyNames[SPY_MAX_VKKEYSNUM + 1] =
979 "VK_LBUTTON", /* 0x01 */
980 "VK_RBUTTON", /* 0x02 */
981 "VK_CANCEL", /* 0x03 */
982 "VK_MBUTTON", /* 0x04 */
986 "VK_BACK", /* 0x08 */
990 "VK_CLEAR", /* 0x0C */
991 "VK_RETURN", /* 0x0D */
994 "VK_SHIFT", /* 0x10 */
995 "VK_CONTROL", /* 0x11 */
996 "VK_MENU", /* 0x12 */
997 "VK_PAUSE", /* 0x13 */
998 "VK_CAPITAL", /* 0x14 */
1005 "VK_ESCAPE", /* 0x1B */
1010 "VK_SPACE", /* 0x20 */
1011 "VK_PRIOR", /* 0x21 */
1012 "VK_NEXT", /* 0x22 */
1013 "VK_END", /* 0x23 */
1014 "VK_HOME", /* 0x24 */
1015 "VK_LEFT", /* 0x25 */
1017 "VK_RIGHT", /* 0x27 */
1018 "VK_DOWN", /* 0x28 */
1019 "VK_SELECT", /* 0x29 */
1020 "VK_PRINT", /* 0x2A */
1021 "VK_EXECUTE", /* 0x2B */
1022 "VK_SNAPSHOT", /* 0x2C */
1023 "VK_INSERT", /* 0x2D */
1024 "VK_DELETE", /* 0x2E */
1025 "VK_HELP", /* 0x2F */
1069 "VK_LWIN", /* 0x5B */
1070 "VK_RWIN", /* 0x5C */
1071 "VK_APPS", /* 0x5D */
1074 "VK_NUMPAD0", /* 0x60 */
1075 "VK_NUMPAD1", /* 0x61 */
1076 "VK_NUMPAD2", /* 0x62 */
1077 "VK_NUMPAD3", /* 0x63 */
1078 "VK_NUMPAD4", /* 0x64 */
1079 "VK_NUMPAD5", /* 0x65 */
1080 "VK_NUMPAD6", /* 0x66 */
1081 "VK_NUMPAD7", /* 0x67 */
1082 "VK_NUMPAD8", /* 0x68 */
1083 "VK_NUMPAD9", /* 0x69 */
1084 "VK_MULTIPLY", /* 0x6A */
1085 "VK_ADD", /* 0x6B */
1086 "VK_SEPARATOR", /* 0x6C */
1087 "VK_SUBTRACT", /* 0x6D */
1088 "VK_DECIMAL", /* 0x6E */
1089 "VK_DIVIDE", /* 0x6F */
1099 "VK_F10", /* 0x79 */
1100 "VK_F11", /* 0x7A */
1101 "VK_F12", /* 0x7B */
1102 "VK_F13", /* 0x7C */
1103 "VK_F14", /* 0x7D */
1104 "VK_F15", /* 0x7E */
1105 "VK_F16", /* 0x7F */
1106 "VK_F17", /* 0x80 */
1107 "VK_F18", /* 0x81 */
1108 "VK_F19", /* 0x82 */
1109 "VK_F20", /* 0x83 */
1110 "VK_F21", /* 0x84 */
1111 "VK_F22", /* 0x85 */
1112 "VK_F23", /* 0x86 */
1113 "VK_F24", /* 0x87 */
1122 "VK_NUMLOCK", /* 0x90 */
1123 "VK_SCROLL", /* 0x91 */
1138 "VK_LSHIFT", /* 0xA0 */
1139 "VK_RSHIFT", /* 0xA1 */
1140 "VK_LCONTROL", /* 0xA2 */
1141 "VK_RCONTROL", /* 0xA3 */
1142 "VK_LMENU", /* 0xA4 */
1143 "VK_RMENU", /* 0xA5 */
1164 "VK_OEM_1", /* 0xBA */
1165 "VK_OEM_PLUS", /* 0xBB */
1166 "VK_OEM_COMMA", /* 0xBC */
1167 "VK_OEM_MINUS", /* 0xBD */
1168 "VK_OEM_PERIOD", /* 0xBE */
1169 "VK_OEM_2", /* 0xBF */
1170 "VK_OEM_3", /* 0xC0 */
1197 "VK_OEM_4", /* 0xDB */
1198 "VK_OEM_5", /* 0xDC */
1199 "VK_OEM_6", /* 0xDD */
1200 "VK_OEM_7", /* 0xDE */
1201 "VK_OEM_8", /* 0xDF */
1203 "VK_OEM_AX", /* 0xE1 */
1204 "VK_OEM_102", /* 0xE2 */
1205 "VK_ICO_HELP", /* 0xE3 */
1206 "VK_ICO_00", /* 0xE4 */
1207 "VK_PROCESSKEY", /* 0xE5 */
1224 "VK_ATTN", /* 0xF6 */
1225 "VK_CRSEL", /* 0xF7 */
1226 "VK_EXSEL", /* 0xF8 */
1227 "VK_EREOF", /* 0xF9 */
1228 "VK_PLAY", /* 0xFA */
1229 "VK_ZOOM", /* 0xFB */
1230 "VK_NONAME", /* 0xFC */
1231 "VK_PA1", /* 0xFD */
1232 "VK_OEM_CLEAR", /* 0xFE */
1237 /************************************************************************/
1240 /* WM_USER+n message values for "common controls" */
1244 const char *name; /* name of control message */
1245 UINT value; /* message number (0x0401-0x0fff */
1246 UINT len; /* length of space at lParam to dump */
1252 const WCHAR *classname; /* class name to match */
1253 const USER_MSG *classmsg; /* pointer to first USER_MSG for class */
1254 USER_MSG *lastmsg; /* pointer to last USER_MSG for class */
1257 #define USM(a,b) { #a ,a,b}
1258 #define SZOF(a) sizeof(a)
1260 /* To dump memory at the lParam for any of these messages, */
1261 /* replace the "0" with a "SZOF(structure)", or with a */
1262 /* number. (First method prefered.) */
1264 static const USER_MSG rebar_array[] = {
1265 USM(RB_INSERTBANDA, 0),
1266 USM(RB_DELETEBAND, 0),
1267 USM(RB_GETBARINFO, 0),
1268 USM(RB_SETBARINFO, 0),
1269 USM(RB_GETBANDINFO, 0),
1270 USM(RB_SETBANDINFOA, 0),
1271 USM(RB_SETPARENT, 0),
1274 USM(RB_INSERTBANDW, 0),
1275 USM(RB_SETBANDINFOW, 0),
1276 USM(RB_GETBANDCOUNT, 0),
1277 USM(RB_GETROWCOUNT, 0),
1278 USM(RB_GETROWHEIGHT, 0),
1279 USM(RB_IDTOINDEX, 0),
1280 USM(RB_GETTOOLTIPS, 0),
1281 USM(RB_SETTOOLTIPS, 0),
1282 USM(RB_SETBKCOLOR, 0),
1283 USM(RB_GETBKCOLOR, 0),
1284 USM(RB_SETTEXTCOLOR, 0),
1285 USM(RB_GETTEXTCOLOR, 0),
1286 USM(RB_SIZETORECT, 0),
1287 USM(RB_BEGINDRAG, 0),
1289 USM(RB_DRAGMOVE, 0),
1290 USM(RB_GETBARHEIGHT, 0),
1291 USM(RB_GETBANDINFOW, 0),
1292 USM(RB_GETBANDINFOA, 0),
1293 USM(RB_MINIMIZEBAND, 0),
1294 USM(RB_MAXIMIZEBAND, 0),
1295 USM(RB_GETBANDBORDERS, 0),
1296 USM(RB_SHOWBAND, 0),
1297 USM(RB_SETPALETTE, 0),
1298 USM(RB_GETPALETTE, 0),
1299 USM(RB_MOVEBAND, 0),
1302 static const USER_MSG toolbar_array[] = {
1303 USM(TB_ENABLEBUTTON ,0),
1304 USM(TB_CHECKBUTTON ,0),
1305 USM(TB_PRESSBUTTON ,0),
1306 USM(TB_HIDEBUTTON ,0),
1307 USM(TB_INDETERMINATE ,0),
1308 USM(TB_MARKBUTTON ,0),
1309 USM(TB_ISBUTTONENABLED ,0),
1310 USM(TB_ISBUTTONCHECKED ,0),
1311 USM(TB_ISBUTTONPRESSED ,0),
1312 USM(TB_ISBUTTONHIDDEN ,0),
1313 USM(TB_ISBUTTONINDETERMINATE ,0),
1314 USM(TB_ISBUTTONHIGHLIGHTED ,0),
1315 USM(TB_SETSTATE ,0),
1316 USM(TB_GETSTATE ,0),
1317 USM(TB_ADDBITMAP ,0),
1318 USM(TB_ADDBUTTONSA ,0),
1319 USM(TB_INSERTBUTTONA ,0),
1320 USM(TB_DELETEBUTTON ,0),
1321 USM(TB_GETBUTTON ,0),
1322 USM(TB_BUTTONCOUNT ,0),
1323 USM(TB_COMMANDTOINDEX ,0),
1324 USM(TB_SAVERESTOREA ,0),
1325 USM(TB_CUSTOMIZE ,0),
1326 USM(TB_ADDSTRINGA ,0),
1327 USM(TB_GETITEMRECT ,0),
1328 USM(TB_BUTTONSTRUCTSIZE ,0),
1329 USM(TB_SETBUTTONSIZE ,0),
1330 USM(TB_SETBITMAPSIZE ,0),
1331 USM(TB_AUTOSIZE ,0),
1332 USM(TB_GETTOOLTIPS ,0),
1333 USM(TB_SETTOOLTIPS ,0),
1334 USM(TB_SETPARENT ,0),
1337 USM(TB_GETBITMAPFLAGS ,0),
1338 USM(TB_SETCMDID ,0),
1339 USM(TB_CHANGEBITMAP ,0),
1340 USM(TB_GETBITMAP ,0),
1341 USM(TB_GETBUTTONTEXTA ,0),
1342 USM(TB_REPLACEBITMAP ,0),
1343 USM(TB_SETINDENT ,0),
1344 USM(TB_SETIMAGELIST ,0),
1345 USM(TB_GETIMAGELIST ,0),
1346 USM(TB_LOADIMAGES ,0),
1348 USM(TB_SETHOTIMAGELIST ,0),
1349 USM(TB_GETHOTIMAGELIST ,0),
1350 USM(TB_SETDISABLEDIMAGELIST ,0),
1351 USM(TB_GETDISABLEDIMAGELIST ,0),
1352 USM(TB_SETSTYLE ,0),
1353 USM(TB_GETSTYLE ,0),
1354 USM(TB_GETBUTTONSIZE ,0),
1355 USM(TB_SETBUTTONWIDTH ,0),
1356 USM(TB_SETMAXTEXTROWS ,0),
1357 USM(TB_GETTEXTROWS ,0),
1358 USM(TB_GETOBJECT ,0),
1359 USM(TB_GETBUTTONINFOW ,0),
1360 USM(TB_SETBUTTONINFOW ,0),
1361 USM(TB_GETBUTTONINFOA ,0),
1362 USM(TB_SETBUTTONINFOA ,0),
1363 USM(TB_INSERTBUTTONW ,0),
1364 USM(TB_ADDBUTTONSW ,0),
1366 USM(TB_SETDRAWTEXTFLAGS ,0),
1367 USM(TB_GETHOTITEM ,0),
1368 USM(TB_SETHOTITEM ,0),
1369 USM(TB_SETANCHORHIGHLIGHT ,0),
1370 USM(TB_GETANCHORHIGHLIGHT ,0),
1371 USM(TB_GETBUTTONTEXTW ,0),
1372 USM(TB_SAVERESTOREW ,0),
1373 USM(TB_ADDSTRINGW ,0),
1374 USM(TB_MAPACCELERATORA ,0),
1375 USM(TB_GETINSERTMARK ,0),
1376 USM(TB_SETINSERTMARK ,0),
1377 USM(TB_INSERTMARKHITTEST ,0),
1378 USM(TB_MOVEBUTTON ,0),
1379 USM(TB_GETMAXSIZE ,0),
1380 USM(TB_SETEXTENDEDSTYLE ,0),
1381 USM(TB_GETEXTENDEDSTYLE ,0),
1382 USM(TB_GETPADDING ,0),
1383 USM(TB_SETPADDING ,0),
1384 USM(TB_SETINSERTMARKCOLOR ,0),
1385 USM(TB_GETINSERTMARKCOLOR ,0),
1386 USM(TB_MAPACCELERATORW ,0),
1389 static const USER_MSG comboex_array[] = {
1390 USM(CBEM_INSERTITEMA ,0),
1391 USM(CBEM_SETIMAGELIST ,0),
1392 USM(CBEM_GETIMAGELIST ,0),
1393 USM(CBEM_GETITEMA ,0),
1394 USM(CBEM_SETITEMA ,0),
1395 USM(CBEM_GETCOMBOCONTROL ,0),
1396 USM(CBEM_GETEDITCONTROL ,0),
1397 USM(CBEM_SETEXSTYLE ,0),
1398 USM(CBEM_GETEXTENDEDSTYLE ,0),
1399 USM(CBEM_HASEDITCHANGED ,0),
1400 USM(CBEM_INSERTITEMW ,0),
1401 USM(CBEM_SETITEMW ,0),
1402 USM(CBEM_GETITEMW ,0),
1403 USM(CBEM_SETEXTENDEDSTYLE ,0),
1409 static CONTROL_CLASS cc_array[] = {
1410 {WC_COMBOBOXEXW, comboex_array, 0},
1411 {REBARCLASSNAMEW, rebar_array, 0},
1412 {TOOLBARCLASSNAMEW, toolbar_array, 0},
1416 /************************************************************************/
1419 /* WM_NOTIFY function codes display */
1423 const char *name; /* name of notify message */
1424 UINT value; /* notify code value */
1425 UINT len; /* length of extra space to dump */
1428 #define SPNFY(a,b) { #a ,a,sizeof(b)-sizeof(NMHDR)}
1430 /* Array MUST be in descending order by the 'value' field */
1431 /* (since value is UNSIGNED, 0xffffffff is largest and */
1432 /* 0xfffffffe is smaller). A binary search is used to */
1433 /* locate the correct 'value'. */
1434 static const SPY_NOTIFY spnfy_array[] = {
1435 /* common 0U to 0U-99U */
1436 SPNFY(NM_OUTOFMEMORY, NMHDR),
1437 SPNFY(NM_CLICK, NMHDR),
1438 SPNFY(NM_DBLCLK, NMHDR),
1439 SPNFY(NM_RETURN, NMHDR),
1440 SPNFY(NM_RCLICK, NMHDR),
1441 SPNFY(NM_RDBLCLK, NMHDR),
1442 SPNFY(NM_SETFOCUS, NMHDR),
1443 SPNFY(NM_KILLFOCUS, NMHDR),
1444 SPNFY(NM_CUSTOMDRAW, NMCUSTOMDRAW),
1445 SPNFY(NM_HOVER, NMHDR),
1446 SPNFY(NM_NCHITTEST, NMMOUSE),
1447 SPNFY(NM_KEYDOWN, NMKEY),
1448 SPNFY(NM_RELEASEDCAPTURE, NMHDR),
1449 SPNFY(NM_SETCURSOR, NMMOUSE),
1450 SPNFY(NM_CHAR, NMCHAR),
1451 SPNFY(NM_TOOLTIPSCREATED, NMTOOLTIPSCREATED),
1452 /* Listview 0U-100U to 0U-199U */
1453 SPNFY(LVN_ITEMCHANGING, NMLISTVIEW),
1454 SPNFY(LVN_ITEMCHANGED, NMLISTVIEW),
1455 SPNFY(LVN_INSERTITEM, NMLISTVIEW),
1456 SPNFY(LVN_DELETEITEM, NMLISTVIEW),
1457 SPNFY(LVN_DELETEALLITEMS, NMLISTVIEW),
1458 SPNFY(LVN_BEGINLABELEDITA, NMLVDISPINFOA),
1459 SPNFY(LVN_ENDLABELEDITA, NMLVDISPINFOA),
1460 SPNFY(LVN_COLUMNCLICK, NMLISTVIEW),
1461 SPNFY(LVN_BEGINDRAG, NMLISTVIEW),
1462 SPNFY(LVN_BEGINRDRAG, NMLISTVIEW),
1463 SPNFY(LVN_ODCACHEHINT, NMLVCACHEHINT),
1464 SPNFY(LVN_ITEMACTIVATE, NMITEMACTIVATE),
1465 SPNFY(LVN_ODSTATECHANGED, NMLVODSTATECHANGE),
1466 SPNFY(LVN_HOTTRACK, NMLISTVIEW),
1467 SPNFY(LVN_GETDISPINFOA, NMLVDISPINFOA),
1468 SPNFY(LVN_SETDISPINFOA, NMLVDISPINFOA),
1469 SPNFY(LVN_ODFINDITEMA, NMLVFINDITEMA),
1470 SPNFY(LVN_KEYDOWN, NMLVKEYDOWN),
1471 SPNFY(LVN_MARQUEEBEGIN, NMLISTVIEW),
1472 SPNFY(LVN_GETINFOTIPA, NMLVGETINFOTIPA),
1473 SPNFY(LVN_GETINFOTIPW, NMLVGETINFOTIPW),
1474 SPNFY(LVN_BEGINLABELEDITW, NMLVDISPINFOW),
1475 SPNFY(LVN_ENDLABELEDITW, NMLVDISPINFOW),
1476 SPNFY(LVN_GETDISPINFOW, NMLVDISPINFOW),
1477 SPNFY(LVN_SETDISPINFOW, NMLVDISPINFOW),
1478 SPNFY(LVN_ODFINDITEMW, NMLVFINDITEMW),
1479 /* Header 0U-300U to 0U-399U */
1480 SPNFY(HDN_ITEMCHANGINGA, NMHDR),
1481 SPNFY(HDN_ITEMCHANGEDA, NMHDR),
1482 SPNFY(HDN_ITEMCLICKA, NMHDR),
1483 SPNFY(HDN_ITEMDBLCLICKA, NMHDR),
1484 SPNFY(HDN_DIVIDERDBLCLICKA, NMHDR),
1485 SPNFY(HDN_BEGINTRACKA, NMHDR),
1486 SPNFY(HDN_ENDTRACKA, NMHDR),
1487 SPNFY(HDN_GETDISPINFOA, NMHDR),
1488 SPNFY(HDN_BEGINDRAG, NMHDR),
1489 SPNFY(HDN_ENDDRAG, NMHDR),
1490 SPNFY(HDN_ITEMCHANGINGW, NMHDR),
1491 SPNFY(HDN_ITEMCHANGEDW, NMHDR),
1492 SPNFY(HDN_ITEMCLICKW, NMHDR),
1493 SPNFY(HDN_ITEMDBLCLICKW, NMHDR),
1494 SPNFY(HDN_DIVIDERDBLCLICKW, NMHDR),
1495 SPNFY(HDN_BEGINTRACKW, NMHDR),
1496 SPNFY(HDN_ENDTRACKW, NMHDR),
1497 SPNFY(HDN_GETDISPINFOW, NMHDR),
1498 /* Treeview 0U-400U to 0U-499U */
1499 SPNFY(TVN_SELCHANGINGA, NMHDR),
1500 SPNFY(TVN_SELCHANGEDA, NMHDR),
1501 SPNFY(TVN_GETDISPINFOA, NMHDR),
1502 SPNFY(TVN_SETDISPINFOA, NMHDR),
1503 SPNFY(TVN_ITEMEXPANDINGA, NMHDR),
1504 SPNFY(TVN_ITEMEXPANDEDA, NMHDR),
1505 SPNFY(TVN_BEGINDRAGA, NMHDR),
1506 SPNFY(TVN_BEGINRDRAGA, NMHDR),
1507 SPNFY(TVN_DELETEITEMA, NMHDR),
1508 SPNFY(TVN_BEGINLABELEDITA, NMHDR),
1509 SPNFY(TVN_ENDLABELEDITA, NMHDR),
1510 SPNFY(TVN_KEYDOWN, NMHDR),
1511 SPNFY(TVN_SELCHANGINGW, NMHDR),
1512 SPNFY(TVN_SELCHANGEDW, NMHDR),
1513 SPNFY(TVN_GETDISPINFOW, NMHDR),
1514 SPNFY(TVN_SETDISPINFOW, NMHDR),
1515 SPNFY(TVN_ITEMEXPANDINGW, NMHDR),
1516 SPNFY(TVN_ITEMEXPANDEDW, NMHDR),
1517 SPNFY(TVN_BEGINDRAGW, NMHDR),
1518 SPNFY(TVN_BEGINRDRAGW, NMHDR),
1519 SPNFY(TVN_DELETEITEMW, NMHDR),
1520 SPNFY(TVN_BEGINLABELEDITW, NMHDR),
1521 SPNFY(TVN_ENDLABELEDITW, NMHDR),
1522 /* Tooltips 0U-520U to 0U-549U */
1523 /* Tab 0U-550U to 0U-580U */
1524 SPNFY(TCN_KEYDOWN, NMHDR),
1525 SPNFY(TCN_SELCHANGE, NMHDR),
1526 SPNFY(TCN_SELCHANGING, NMHDR),
1527 SPNFY(TCN_GETOBJECT, NMHDR),
1528 /* Common Dialog 0U-601U to 0U-699U */
1529 /* Toolbar 0U-700U to 0U-720U */
1530 SPNFY(TBN_GETBUTTONINFOA, NMTOOLBARA),
1531 SPNFY(TBN_BEGINDRAG, NMTOOLBARA),
1532 SPNFY(TBN_ENDDRAG, NMTOOLBARA),
1533 SPNFY(TBN_BEGINADJUST, NMHDR),
1534 SPNFY(TBN_ENDADJUST, NMHDR),
1535 SPNFY(TBN_RESET, NMHDR),
1536 SPNFY(TBN_QUERYINSERT, NMTOOLBARA),
1537 SPNFY(TBN_QUERYDELETE, NMTOOLBARA),
1538 SPNFY(TBN_TOOLBARCHANGE, NMHDR),
1539 SPNFY(TBN_CUSTHELP, NMHDR),
1540 SPNFY(TBN_DROPDOWN, NMTOOLBARA),
1541 SPNFY(TBN_GETOBJECT, NMOBJECTNOTIFY),
1542 SPNFY(TBN_HOTITEMCHANGE, NMTBHOTITEM),
1543 SPNFY(TBN_DRAGOUT, NMTOOLBARA),
1544 SPNFY(TBN_DELETINGBUTTON, NMTOOLBARA),
1545 SPNFY(TBN_GETDISPINFOA, NMTBDISPINFOA),
1546 SPNFY(TBN_GETDISPINFOW, NMTBDISPINFOW),
1547 SPNFY(TBN_GETINFOTIPA, NMTBGETINFOTIPA),
1548 SPNFY(TBN_GETINFOTIPW, NMTBGETINFOTIPW),
1549 SPNFY(TBN_GETBUTTONINFOW, NMTOOLBARW),
1550 /* Up/Down 0U-721U to 0U-740U */
1551 /* Month Calendar 0U-750U to 0U-759U */
1552 /* Date/Time 0U-760U to 0U-799U */
1553 /* ComboBoxEx 0U-800U to 0U-830U */
1554 SPNFY(CBEN_GETDISPINFOA, NMCOMBOBOXEXA),
1555 SPNFY(CBEN_INSERTITEM, NMCOMBOBOXEXA),
1556 SPNFY(CBEN_DELETEITEM, NMCOMBOBOXEXA),
1557 SPNFY(CBEN_BEGINEDIT, NMHDR),
1558 SPNFY(CBEN_ENDEDITA, NMCBEENDEDITA),
1559 SPNFY(CBEN_ENDEDITW, NMCBEENDEDITW),
1560 SPNFY(CBEN_GETDISPINFOW, NMCOMBOBOXEXW),
1561 SPNFY(CBEN_DRAGBEGINA, NMCBEDRAGBEGINA),
1562 SPNFY(CBEN_DRAGBEGINW, NMCBEDRAGBEGINW),
1563 /* Rebar 0U-831U to 0U-859U */
1564 SPNFY(RBN_HEIGHTCHANGE, NMHDR),
1565 SPNFY(RBN_GETOBJECT, NMOBJECTNOTIFY),
1566 SPNFY(RBN_LAYOUTCHANGED, NMHDR),
1567 SPNFY(RBN_AUTOSIZE, NMRBAUTOSIZE),
1568 SPNFY(RBN_BEGINDRAG, NMREBAR),
1569 SPNFY(RBN_ENDDRAG, NMREBAR),
1570 SPNFY(RBN_DELETINGBAND, NMREBAR),
1571 SPNFY(RBN_DELETEDBAND, NMREBAR),
1572 SPNFY(RBN_CHILDSIZE, NMREBARCHILDSIZE),
1573 /* IP Adderss 0U-860U to 0U-879U */
1574 /* Status bar 0U-880U to 0U-899U */
1575 /* Pager 0U-900U to 0U-950U */
1576 SPNFY(PGN_SCROLL, NMPGSCROLL),
1577 SPNFY(PGN_CALCSIZE, NMPGCALCSIZE),
1579 static const SPY_NOTIFY *end_spnfy_array; /* ptr to last good entry in array */
1583 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
1584 static BOOL16 SPY_ExcludeDWP = 0;
1586 #define SPY_EXCLUDE(msg) \
1587 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
1592 UINT msgnum; /* message number */
1593 HWND msg_hwnd; /* window handle for message */
1594 WPARAM wParam; /* message parameter */
1595 LPARAM lParam; /* message parameter */
1596 INT data_len; /* length of data to dump */
1597 char msg_name[60]; /* message name (see SPY_GetMsgName) */
1598 WCHAR wnd_class[60]; /* window class name (full) */
1599 WCHAR wnd_name[16]; /* window name for message */
1602 /* This is defined so that the external entry point can return the addr */
1603 static SPY_INSTANCE ext_sp_e;
1605 static int indent_tls_index;
1607 /***********************************************************************
1610 inline static int get_indent_level(void)
1612 return (int)TlsGetValue( indent_tls_index );
1616 /***********************************************************************
1619 inline static void set_indent_level( int level )
1621 TlsSetValue( indent_tls_index, (void *)level );
1625 /***********************************************************************
1626 * SPY_GetMsgInternal
1628 static const char *SPY_GetMsgInternal( UINT msg )
1630 static char msg_buffer[20];
1632 if (msg <= SPY_MAX_MSGNUM)
1634 if (!MessageTypeNames[msg]) return "???";
1635 return MessageTypeNames[msg];
1638 if (msg >= LVM_FIRST && msg <= LVM_FIRST + SPY_MAX_LVMMSGNUM)
1640 if (!LVMMessageTypeNames[msg-LVM_FIRST]) return "LVM_?";
1641 return LVMMessageTypeNames[msg-LVM_FIRST];
1644 if (msg >= TV_FIRST && msg <= TV_FIRST + SPY_MAX_TVMSGNUM)
1646 if (!TVMessageTypeNames[msg-TV_FIRST]) return "TV_?";
1647 return TVMessageTypeNames[msg-TV_FIRST];
1650 if (msg >= HDM_FIRST && msg <= HDM_FIRST + SPY_MAX_HDMMSGNUM)
1652 if (!HDMMessageTypeNames[msg-HDM_FIRST]) return "HDM_?";
1653 return HDMMessageTypeNames[msg-HDM_FIRST];
1656 if (msg >= TCM_FIRST && msg <= TCM_FIRST + SPY_MAX_TCMMSGNUM)
1658 if (!TCMMessageTypeNames[msg-TCM_FIRST]) return "TCM_?";
1659 return TCMMessageTypeNames[msg-TCM_FIRST];
1662 if (msg >= PGM_FIRST && msg <= PGM_FIRST + SPY_MAX_PGMMSGNUM)
1664 if (!PGMMessageTypeNames[msg-PGM_FIRST]) return "PGM_?";
1665 return PGMMessageTypeNames[msg-PGM_FIRST];
1668 if (msg >= CCM_FIRST && msg <= CCM_FIRST + SPY_MAX_CCMMSGNUM)
1670 if (!CCMMessageTypeNames[msg-CCM_FIRST]) return "???";
1671 return CCMMessageTypeNames[msg-CCM_FIRST];
1674 if (msg >= WM_WINE_DESTROYWINDOW && msg <= WM_WINE_DESTROYWINDOW + SPY_MAX_WINEMSGNUM)
1676 if (!WINEMessageTypeNames[msg-WM_WINE_DESTROYWINDOW]) return "???";
1677 return WINEMessageTypeNames[msg-WM_WINE_DESTROYWINDOW];
1680 sprintf( msg_buffer, "WM_USER+%04x", msg - WM_USER );
1684 /***********************************************************************
1687 const USER_MSG *SPY_Bsearch_Msg( const USER_MSG *first, const USER_MSG *last, UINT code)
1690 const USER_MSG *test;
1692 while (last >= first) {
1693 count = 1 + last - first;
1695 /* TRACE("code=%d, f-value=%d, f-name=%s, l-value=%d, l-name=%s, l-len=%d,\n",
1696 code, first->value, first->name, last->value, last->name, last->len); */
1697 if (first->value == code) return first;
1698 if (last->value == code) return last;
1702 test = first + count;
1703 /* TRACE("first=%p, last=%p, test=%p, t-value=%d, code=%d, count=%d\n",
1704 first, last, test, test->value, code, count); */
1705 if (test->value == code) return test;
1706 if (test->value > code)
1714 /***********************************************************************
1717 * Get message name and other information for dumping
1719 static void SPY_GetMsgStuff( SPY_INSTANCE *sp_e )
1723 sp_e->msg_name[sizeof(sp_e->msg_name)-1] = 0;
1724 strncpy (sp_e->msg_name, SPY_GetMsgInternal( sp_e->msgnum ),
1725 sizeof(sp_e->msg_name)-1);
1728 if (strncmp(sp_e->msg_name, "WM_USER+", 8) == 0) {
1731 /* TRACE("looking class %s\n", sp_e->wnd_class); */
1733 while (cc_array[i].classname &&
1734 strcmpW(cc_array[i].classname, sp_e->wnd_class) !=0) i++;
1736 if (!cc_array[i].classname) return;
1737 /* TRACE("process class %s, first %p, last %p\n",
1738 debugstr_w(cc_array[i].classname), cc_array[i].classmsg,
1739 cc_array[i].lastmsg); */
1740 p = SPY_Bsearch_Msg (cc_array[i].classmsg, cc_array[i].lastmsg,
1743 strncpy (sp_e->msg_name, p->name, sizeof(sp_e->msg_name)-1);
1744 sp_e->data_len = p->len;
1749 /***********************************************************************
1752 * Sets the value of "wnd_name" and "wnd_class" members of the
1753 * instance structure.
1756 void SPY_GetWndName( SPY_INSTANCE *sp_e )
1761 /* save and restore error code over the next call */
1762 save_error = GetLastError();
1763 GetClassNameW(sp_e->msg_hwnd, sp_e->wnd_class, sizeof(sp_e->wnd_class)/sizeof(WCHAR));
1764 SetLastError(save_error);
1766 len = InternalGetWindowText(sp_e->msg_hwnd, sp_e->wnd_name, sizeof(sp_e->wnd_name)/sizeof(WCHAR));
1767 if(!len) /* get class name */
1769 LPWSTR dst = sp_e->wnd_name;
1770 LPWSTR src = sp_e->wnd_class;
1771 int n = sizeof(sp_e->wnd_name)/sizeof(WCHAR) - 3;
1773 while ((n-- > 0) && *src) *dst++ = *src++;
1779 /***********************************************************************
1782 * **** External function ****
1786 const char *SPY_GetMsgName( UINT msg, HWND hWnd )
1788 ext_sp_e.msgnum = msg;
1789 ext_sp_e.msg_hwnd = hWnd;
1790 ext_sp_e.lParam = 0;
1791 ext_sp_e.wParam = 0;
1792 SPY_GetWndName(&ext_sp_e);
1793 SPY_GetMsgStuff(&ext_sp_e);
1794 return ext_sp_e.msg_name;
1797 /***********************************************************************
1800 const char *SPY_GetVKeyName(WPARAM wParam)
1802 const char *vk_key_name;
1804 if(wParam <= SPY_MAX_VKKEYSNUM && VK_KeyNames[wParam])
1805 vk_key_name = VK_KeyNames[wParam];
1807 vk_key_name = "VK_???";
1812 /***********************************************************************
1813 * SPY_Bsearch_Notify
1815 const SPY_NOTIFY *SPY_Bsearch_Notify( const SPY_NOTIFY *first, const SPY_NOTIFY *last, UINT code)
1818 const SPY_NOTIFY *test;
1820 while (last >= first) {
1821 count = 1 + last - first;
1823 /* TRACE("code=%d, f-value=%d, f-name=%s, l-value=%d, l-name=%s, l-len=%d,\n",
1824 code, first->value, first->name, last->value, last->name, last->len); */
1825 if (first->value == code) return first;
1826 if (last->value == code) return last;
1830 test = first + count;
1831 /* TRACE("first=%p, last=%p, test=%p, t-value=%d, code=%d, count=%d\n",
1832 first, last, test, test->value, code, count); */
1833 if (test->value == code) return test;
1834 if (test->value < code)
1842 /***********************************************************************
1845 void SPY_DumpMem (LPSTR header, UINT *q, INT len)
1849 for(i=0; i<len-12; i+=16) {
1850 TRACE("%s [%04x] %08x %08x %08x %08x\n",
1851 header, i, *q, *(q+1), *(q+2), *(q+3));
1856 TRACE("%s [%04x] %08x %08x %08x\n",
1857 header, i, *q, *(q+1), *(q+2));
1860 TRACE("%s [%04x] %08x %08x\n",
1861 header, i, *q, *(q+1));
1864 TRACE("%s [%04x] %08x\n",
1872 /***********************************************************************
1875 void SPY_DumpStructure (SPY_INSTANCE *sp_e, BOOL enter)
1877 switch (sp_e->msgnum)
1882 DRAWITEMSTRUCT *lpdis = (DRAWITEMSTRUCT*) sp_e->lParam;
1883 TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
1884 lpdis->CtlType, lpdis->CtlID);
1885 TRACE("itemID=0x%08x itemAction=0x%08x itemState=0x%08x\n",
1886 lpdis->itemID, lpdis->itemAction, lpdis->itemState);
1887 TRACE("hWnd=0x%04x hDC=0x%04x (%d,%d)-(%d,%d) itemData=0x%08lx\n",
1888 lpdis->hwndItem, lpdis->hDC, lpdis->rcItem.left,
1889 lpdis->rcItem.top, lpdis->rcItem.right,
1890 lpdis->rcItem.bottom, lpdis->itemData);
1893 case WM_MEASUREITEM:
1895 MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) sp_e->lParam;
1896 TRACE("MEASUREITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
1897 lpmis->CtlType, lpmis->CtlID);
1898 TRACE("itemID=0x%08x itemWidth=0x%08x itemHeight=0x%08x\n",
1899 lpmis->itemID, lpmis->itemWidth, lpmis->itemHeight);
1900 TRACE("itemData=0x%08lx\n", lpmis->itemData);
1903 case WM_WINDOWPOSCHANGED:
1905 case WM_WINDOWPOSCHANGING:
1907 WINDOWPOS *lpwp = (WINDOWPOS *)sp_e->lParam;
1908 TRACE("WINDOWPOS hwnd=0x%04x, after=0x%04x, at (%d,%d) w=%d h=%d, flags=0x%08x\n",
1909 lpwp->hwnd, lpwp->hwndInsertAfter, lpwp->x, lpwp->y,
1910 lpwp->cx, lpwp->cy, lpwp->flags);
1913 case WM_STYLECHANGED:
1915 case WM_STYLECHANGING:
1917 LPSTYLESTRUCT ss = (LPSTYLESTRUCT) sp_e->lParam;
1918 TRACE("STYLESTRUCT: StyleOld=0x%08lx, StyleNew=0x%08lx\n",
1919 ss->styleOld, ss->styleNew);
1924 RECT *rc = (RECT *)sp_e->lParam;
1925 TRACE("Rect (%d,%d)-(%d,%d)\n",
1926 rc->left, rc->top, rc->right, rc->bottom);
1932 NMHDR * pnmh = (NMHDR*) sp_e->lParam;
1934 const SPY_NOTIFY *p;
1936 p = SPY_Bsearch_Notify (&spnfy_array[0], end_spnfy_array,
1939 TRACE("NMHDR hwndFrom=0x%08x idFrom=0x%08x code=%s<0x%08x>, extra=0x%x\n",
1940 pnmh->hwndFrom, pnmh->idFrom, p->name, pnmh->code, p->len);
1942 q = (UINT *)(pnmh + 1);
1943 SPY_DumpMem ("NM extra", q, (INT)p->len);
1947 TRACE("NMHDR hwndFrom=0x%08x idFrom=0x%08x code=0x%08x\n",
1948 pnmh->hwndFrom, pnmh->idFrom, pnmh->code);
1951 if (sp_e->data_len > 0)
1952 SPY_DumpMem ("MSG lParam", (UINT *)sp_e->lParam, sp_e->data_len);
1957 /***********************************************************************
1960 void SPY_EnterMessage( INT iFlag, HWND hWnd, UINT msg,
1961 WPARAM wParam, LPARAM lParam )
1966 if (!TRACE_ON(message) || SPY_EXCLUDE(msg)) return;
1969 sp_e.msg_hwnd = hWnd;
1970 sp_e.lParam = lParam;
1971 sp_e.wParam = wParam;
1972 SPY_GetWndName(&sp_e);
1973 SPY_GetMsgStuff(&sp_e);
1974 indent = get_indent_level();
1976 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
1979 case SPY_DISPATCHMESSAGE16:
1980 TRACE("%*s(%04x) %-16s message [%04x] %s dispatched wp=%04x lp=%08lx\n",
1981 indent, "", WIN_Handle16(hWnd),
1982 debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name, wParam, lParam);
1985 case SPY_DISPATCHMESSAGE:
1986 TRACE("%*s(%08x) %-16s message [%04x] %s dispatched wp=%08x lp=%08lx\n",
1987 indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg,
1988 sp_e.msg_name, wParam, lParam);
1991 case SPY_SENDMESSAGE16:
1992 case SPY_SENDMESSAGE:
1995 HTASK16 hTask = GetWindowTask16( WIN_Handle16(hWnd) );
1997 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
1998 else if (!hTask) strcpy( taskName, "Wine" );
2001 sprintf( taskName, "task %04x ???", hTask );
2002 GetModuleName16( hTask, taskName + 10, sizeof(taskName) - 10 );
2005 if (iFlag == SPY_SENDMESSAGE16)
2006 TRACE("%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
2007 indent, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg,
2008 sp_e.msg_name, taskName, wParam, lParam );
2010 { TRACE("%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
2011 indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg,
2012 sp_e.msg_name, taskName, wParam, lParam );
2013 SPY_DumpStructure(&sp_e, TRUE);
2018 case SPY_DEFWNDPROC16:
2019 if( SPY_ExcludeDWP ) return;
2020 TRACE("%*s(%04x) DefWindowProc16: %s [%04x] wp=%04x lp=%08lx\n",
2021 indent, "", WIN_Handle16(hWnd), sp_e.msg_name, msg, wParam, lParam );
2024 case SPY_DEFWNDPROC:
2025 if( SPY_ExcludeDWP ) return;
2026 TRACE("%*s(%08x) DefWindowProc32: %s [%04x] wp=%08x lp=%08lx\n",
2027 indent, "", hWnd, sp_e.msg_name,
2028 msg, wParam, lParam );
2031 set_indent_level( indent + SPY_INDENT_UNIT );
2035 /***********************************************************************
2038 void SPY_ExitMessage( INT iFlag, HWND hWnd, UINT msg, LRESULT lReturn,
2039 WPARAM wParam, LPARAM lParam )
2044 if (!TRACE_ON(message) || SPY_EXCLUDE(msg) ||
2045 (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND)) )
2049 sp_e.msg_hwnd = hWnd;
2050 sp_e.lParam = lParam;
2051 sp_e.wParam = wParam;
2052 SPY_GetWndName(&sp_e);
2053 SPY_GetMsgStuff(&sp_e);
2055 if ((indent = get_indent_level()))
2057 indent -= SPY_INDENT_UNIT;
2058 set_indent_level( indent );
2063 case SPY_RESULT_DEFWND16:
2064 TRACE(" %*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
2065 indent, "", WIN_Handle16(hWnd), sp_e.msg_name, msg, lReturn );
2068 case SPY_RESULT_DEFWND:
2069 TRACE(" %*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n",
2070 indent, "", hWnd, sp_e.msg_name, msg, lReturn );
2073 case SPY_RESULT_OK16:
2074 TRACE(" %*s(%04x) %-16s message [%04x] %s returned %08lx\n",
2075 indent, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg,
2076 sp_e.msg_name, lReturn );
2080 TRACE(" %*s(%08x) %-16s message [%04x] %s returned %08lx\n",
2081 indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg,
2082 sp_e.msg_name, lReturn );
2083 SPY_DumpStructure(&sp_e, FALSE);
2086 case SPY_RESULT_INVALIDHWND16:
2087 WARN(" %*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
2088 indent, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name );
2091 case SPY_RESULT_INVALIDHWND:
2092 WARN(" %*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
2093 indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg,
2100 /***********************************************************************
2107 const SPY_NOTIFY *p;
2111 if (!TRACE_ON(message)) return TRUE;
2113 indent_tls_index = TlsAlloc();
2115 if(!RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Spy", &hkey))
2117 DWORD type, count = sizeof(buffer);
2118 RegQueryValueExA(hkey, "Include", 0, &type, buffer, &count);
2121 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
2123 TRACE("Include=%s\n", buffer );
2124 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
2125 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
2129 if(!RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Spy", &hkey))
2131 DWORD type, count = sizeof(buffer);
2132 RegQueryValueExA(hkey, "Exclude", 0, &type, buffer, &count);
2137 TRACE("Exclude=%s\n", buffer );
2138 if (!strcmp( buffer, "EXCLUDEALL" ))
2139 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
2141 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
2142 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
2146 if(!RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Spy", &hkey))
2148 DWORD type, count = sizeof(buffer);
2149 if(!RegQueryValueExA(hkey, "ExcludeDWP", 0, &type, buffer, &count))
2150 SPY_ExcludeDWP = atoi(buffer);
2154 /* find last good entry in spy notify array and save addr for b-search */
2155 p = &spnfy_array[0];
2158 if ((UINT)p->value > (UINT)j) {
2159 ERR("Notify message array out of order\n");
2160 ERR(" between values [%08x] %s and [%08x] %s\n",
2161 j, (p-1)->name, p->value, p->name);
2168 end_spnfy_array = p;
2170 /* find last good entry in each common control message array
2171 * and save addr for b-search.
2174 while (cc_array[i].classname) {
2176 j = 0x0400; /* minimum entry in array */
2177 q = cc_array[i].classmsg;
2179 if (q->value <= j) {
2180 ERR("Class message array out of order for class %s\n",
2181 debugstr_w(cc_array[i].classname));
2182 ERR(" between values [%04x] %s and [%04x] %s\n",
2183 j, (q-1)->name, q->value, q->name);
2190 cc_array[i].lastmsg = (USER_MSG *)q;