Use the passed hdc in CreateDIBitmap instead of creating a new one.
[wine/multimedia.git] / windows / spy.c
blob1117406b867c52f5155d9a0db72ffddfcf30bcff
1 /*
2 * Message spying routines
4 * Copyright 1994, Bob Amstadt
5 * 1995, Alex Korobka
6 */
8 #include <stdlib.h>
9 #include <string.h>
10 #include <stdio.h>
11 #include "windef.h"
12 #include "wingdi.h"
13 #include "winreg.h"
14 #include "wine/winuser16.h"
15 #include "wine/winbase16.h"
16 #include "win.h"
17 #include "debugtools.h"
18 #include "spy.h"
19 #include "commctrl.h"
21 DEFAULT_DEBUG_CHANNEL(message);
23 #define SPY_MAX_MSGNUM WM_USER
24 #define SPY_INDENT_UNIT 4 /* 4 spaces */
26 static const char * const MessageTypeNames[SPY_MAX_MSGNUM + 1] =
28 "WM_NULL", /* 0x00 */
29 "WM_CREATE",
30 "WM_DESTROY",
31 "WM_MOVE",
32 "wm_sizewait",
33 "WM_SIZE",
34 "WM_ACTIVATE",
35 "WM_SETFOCUS",
36 "WM_KILLFOCUS",
37 "WM_SETVISIBLE",
38 "WM_ENABLE",
39 "WM_SETREDRAW",
40 "WM_SETTEXT",
41 "WM_GETTEXT",
42 "WM_GETTEXTLENGTH",
43 "WM_PAINT",
44 "WM_CLOSE", /* 0x10 */
45 "WM_QUERYENDSESSION",
46 "WM_QUIT",
47 "WM_QUERYOPEN",
48 "WM_ERASEBKGND",
49 "WM_SYSCOLORCHANGE",
50 "WM_ENDSESSION",
51 "wm_systemerror",
52 "WM_SHOWWINDOW",
53 "WM_CTLCOLOR",
54 "WM_WININICHANGE",
55 "WM_DEVMODECHANGE",
56 "WM_ACTIVATEAPP",
57 "WM_FONTCHANGE",
58 "WM_TIMECHANGE",
59 "WM_CANCELMODE",
60 "WM_SETCURSOR", /* 0x20 */
61 "WM_MOUSEACTIVATE",
62 "WM_CHILDACTIVATE",
63 "WM_QUEUESYNC",
64 "WM_GETMINMAXINFO",
65 "wm_unused3",
66 "wm_painticon",
67 "WM_ICONERASEBKGND",
68 "WM_NEXTDLGCTL",
69 "wm_alttabactive",
70 "WM_SPOOLERSTATUS",
71 "WM_DRAWITEM",
72 "WM_MEASUREITEM",
73 "WM_DELETEITEM",
74 "WM_VKEYTOITEM",
75 "WM_CHARTOITEM",
76 "WM_SETFONT", /* 0x30 */
77 "WM_GETFONT",
78 "WM_SETHOTKEY",
79 "WM_GETHOTKEY",
80 "wm_filesyschange",
81 "wm_isactiveicon",
82 "wm_queryparkicon",
83 "WM_QUERYDRAGICON",
84 "wm_querysavestate",
85 "WM_COMPAREITEM",
86 "wm_testing",
87 NULL,
88 "wm_otherwindowcreated",
89 "wm_otherwindowdestroyed",
90 "wm_activateshellwindow",
91 NULL,
93 NULL, /* 0x40 */
94 "wm_compacting", NULL, NULL,
95 "WM_COMMNOTIFY", NULL,
96 "WM_WINDOWPOSCHANGING", /* 0x0046 */
97 "WM_WINDOWPOSCHANGED", /* 0x0047 */
98 "WM_POWER", NULL,
99 "WM_COPYDATA",
100 "WM_CANCELJOURNAL", NULL, NULL,
101 "WM_NOTIFY", NULL,
103 /* 0x0050 */
104 "WM_INPUTLANGCHANGEREQUEST",
105 "WM_INPUTLANGCHANGE",
106 "WM_TCARD",
107 "WM_HELP",
108 "WM_USERCHANGED",
109 "WM_NOTIFYFORMAT", NULL, NULL,
110 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
112 /* 0x0060 */
113 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
114 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
116 /* 0x0070 */
117 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
118 NULL, NULL, NULL,
119 "WM_CONTEXTMENU",
120 "WM_STYLECHANGING",
121 "WM_STYLECHANGED",
122 "WM_DISPLAYCHANGE",
123 "WM_GETICON",
125 "WM_SETICON", /* 0x0080 */
126 "WM_NCCREATE", /* 0x0081 */
127 "WM_NCDESTROY", /* 0x0082 */
128 "WM_NCCALCSIZE", /* 0x0083 */
129 "WM_NCHITTEST", /* 0x0084 */
130 "WM_NCPAINT", /* 0x0085 */
131 "WM_NCACTIVATE", /* 0x0086 */
132 "WM_GETDLGCODE", /* 0x0087 */
133 "WM_SYNCPAINT",
134 "WM_SYNCTASK", NULL, NULL, NULL, NULL, NULL, NULL,
136 /* 0x0090 */
137 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
138 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
140 /* 0x00A0 */
141 "WM_NCMOUSEMOVE", /* 0x00A0 */
142 "WM_NCLBUTTONDOWN", /* 0x00A1 */
143 "WM_NCLBUTTONUP", /* 0x00A2 */
144 "WM_NCLBUTTONDBLCLK", /* 0x00A3 */
145 "WM_NCRBUTTONDOWN", /* 0x00A4 */
146 "WM_NCRBUTTONUP", /* 0x00A5 */
147 "WM_NCRBUTTONDBLCLK", /* 0x00A6 */
148 "WM_NCMBUTTONDOWN", /* 0x00A7 */
149 "WM_NCMBUTTONUP", /* 0x00A8 */
150 "WM_NCMBUTTONDBLCLK", /* 0x00A9 */
151 NULL, NULL, NULL, NULL, NULL, NULL,
153 /* 0x00B0 - Win32 Edit controls */
154 "EM_GETSEL", /* 0x00b0 */
155 "EM_SETSEL", /* 0x00b1 */
156 "EM_GETRECT", /* 0x00b2 */
157 "EM_SETRECT", /* 0x00b3 */
158 "EM_SETRECTNP", /* 0x00b4 */
159 "EM_SCROLL", /* 0x00b5 */
160 "EM_LINESCROLL", /* 0x00b6 */
161 "EM_SCROLLCARET", /* 0x00b7 */
162 "EM_GETMODIFY", /* 0x00b8 */
163 "EM_SETMODIFY", /* 0x00b9 */
164 "EM_GETLINECOUNT", /* 0x00ba */
165 "EM_LINEINDEX", /* 0x00bb */
166 "EM_SETHANDLE", /* 0x00bc */
167 "EM_GETHANDLE", /* 0x00bd */
168 "EM_GETTHUMB", /* 0x00be */
169 NULL, /* 0x00bf */
171 NULL, /* 0x00c0 */
172 "EM_LINELENGTH", /* 0x00c1 */
173 "EM_REPLACESEL", /* 0x00c2 */
174 NULL, /* 0x00c3 */
175 "EM_GETLINE", /* 0x00c4 */
176 "EM_LIMITTEXT", /* 0x00c5 */
177 "EM_CANUNDO", /* 0x00c6 */
178 "EM_UNDO", /* 0x00c7 */
179 "EM_FMTLINES", /* 0x00c8 */
180 "EM_LINEFROMCHAR", /* 0x00c9 */
181 NULL, /* 0x00ca */
182 "EM_SETTABSTOPS", /* 0x00cb */
183 "EM_SETPASSWORDCHAR", /* 0x00cc */
184 "EM_EMPTYUNDOBUFFER", /* 0x00cd */
185 "EM_GETFIRSTVISIBLELINE", /* 0x00ce */
186 "EM_SETREADONLY", /* 0x00cf */
188 "EM_SETWORDBREAKPROC", /* 0x00d0 */
189 "EM_GETWORDBREAKPROC", /* 0x00d1 */
190 "EM_GETPASSWORDCHAR", /* 0x00d2 */
191 "EM_SETMARGINS", /* 0x00d3 */
192 "EM_GETMARGINS", /* 0x00d4 */
193 "EM_GETLIMITTEXT", /* 0x00d5 */
194 "EM_POSFROMCHAR", /* 0x00d6 */
195 "EM_CHARFROMPOS", /* 0x00d7 */
196 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
198 /* 0x00E0 - Win32 Scrollbars */
199 "SBM_SETPOS", /* 0x00e0 */
200 "SBM_GETPOS", /* 0x00e1 */
201 "SBM_SETRANGE", /* 0x00e2 */
202 "SBM_GETRANGE", /* 0x00e3 */
203 "SBM_ENABLE_ARROWS", /* 0x00e4 */
204 NULL,
205 "SBM_SETRANGEREDRAW", /* 0x00e6 */
206 NULL, NULL,
207 "SBM_SETSCROLLINFO", /* 0x00e9 */
208 "SBM_GETSCROLLINFO", /* 0x00ea */
209 NULL, NULL, NULL, NULL, NULL,
211 /* 0x00F0 - Win32 Buttons */
212 "BM_GETCHECK", /* 0x00f0 */
213 "BM_SETCHECK", /* 0x00f1 */
214 "BM_GETSTATE", /* 0x00f2 */
215 "BM_SETSTATE", /* 0x00f3 */
216 "BM_SETSTYLE", /* 0x00f4 */
217 "BM_CLICK", /* 0x00f5 */
218 "BM_GETIMAGE", /* 0x00f6 */
219 "BM_SETIMAGE", /* 0x00f7 */
220 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
222 "WM_KEYDOWN", /* 0x0100 */
223 "WM_KEYUP", /* 0x0101 */
224 "WM_CHAR", /* 0x0102 */
225 "WM_DEADCHAR", /* 0x0103 */
226 "WM_SYSKEYDOWN", /* 0x0104 */
227 "WM_SYSKEYUP", /* 0x0105 */
228 "WM_SYSCHAR", /* 0x0106 */
229 "WM_SYSDEADCHAR", /* 0x0107 */
230 "WM_KEYLAST", /* 0x0108 */
231 NULL,
232 "WM_CONVERTREQUEST",
233 "WM_CONVERTRESULT",
234 "WM_INTERIM",
235 "WM_IME_STARTCOMPOSITION", /* 0x010d */
236 "WM_IME_ENDCOMPOSITION", /* 0x010e */
237 "WM_IME_COMPOSITION", /* 0x010f */
239 "WM_INITDIALOG", /* 0x0110 */
240 "WM_COMMAND", /* 0x0111 */
241 "WM_SYSCOMMAND", /* 0x0112 */
242 "WM_TIMER", /* 0x0113 */
243 "WM_HSCROLL", /* 0x0114 */
244 "WM_VSCROLL", /* 0x0115 */
245 "WM_INITMENU", /* 0x0116 */
246 "WM_INITMENUPOPUP", /* 0x0117 */
247 "WM_SYSTIMER", /* 0x0118 */
248 NULL, NULL, NULL, NULL, NULL, NULL,
249 "WM_MENUSELECT", /* 0x011f */
251 "WM_MENUCHAR", /* 0x0120 */
252 "WM_ENTERIDLE", /* 0x0121 */
253 NULL, NULL, NULL, NULL, NULL, NULL,
254 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
256 /* 0x0130 */
257 NULL,
258 "WM_LBTRACKPOINT", /* 0x0131 */
259 "WM_CTLCOLORMSGBOX", /* 0x0132 */
260 "WM_CTLCOLOREDIT", /* 0x0133 */
261 "WM_CTLCOLORLISTBOX", /* 0x0134 */
262 "WM_CTLCOLORBTN", /* 0x0135 */
263 "WM_CTLCOLORDLG", /* 0x0136 */
264 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
265 "WM_CTLCOLORSTATIC", /* 0x0138 */
266 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
268 /* 0x0140 - Win32 Comboboxes */
269 "CB_GETEDITSEL", /* 0x0140 */
270 "CB_LIMITTEXT", /* 0x0141 */
271 "CB_SETEDITSEL", /* 0x0142 */
272 "CB_ADDSTRING", /* 0x0143 */
273 "CB_DELETESTRING", /* 0x0144 */
274 "CB_DIR", /* 0x0145 */
275 "CB_GETCOUNT", /* 0x0146 */
276 "CB_GETCURSEL", /* 0x0147 */
277 "CB_GETLBTEXT", /* 0x0148 */
278 "CB_GETLBTEXTLEN", /* 0x0149 */
279 "CB_INSERTSTRING", /* 0x014a */
280 "CB_RESETCONTENT", /* 0x014b */
281 "CB_FINDSTRING", /* 0x014c */
282 "CB_SELECTSTRING", /* 0x014d */
283 "CB_SETCURSEL", /* 0x014e */
284 "CB_SHOWDROPDOWN", /* 0x014f */
286 "CB_GETITEMDATA", /* 0x0150 */
287 "CB_SETITEMDATA", /* 0x0151 */
288 "CB_GETDROPPEDCONTROLRECT", /* 0x0152 */
289 "CB_SETITEMHEIGHT", /* 0x0153 */
290 "CB_GETITEMHEIGHT", /* 0x0154 */
291 "CB_SETEXTENDEDUI", /* 0x0155 */
292 "CB_GETEXTENDEDUI", /* 0x0156 */
293 "CB_GETDROPPEDSTATE", /* 0x0157 */
294 "CB_FINDSTRINGEXACT", /* 0x0158 */
295 "CB_SETLOCALE", /* 0x0159 */
296 "CB_GETLOCALE", /* 0x015a */
297 "CB_GETTOPINDEX", /* 0x015b */
298 "CB_SETTOPINDEX", /* 0x015c */
299 "CB_GETHORIZONTALEXTENT", /* 0x015d */
300 "CB_SETHORIZONTALEXTENT", /* 0x015e */
301 "CB_GETDROPPEDWIDTH", /* 0x015f */
303 "CB_SETDROPPEDWIDTH", /* 0x0160 */
304 "CB_INITSTORAGE", /* 0x0161 */
305 NULL, NULL, NULL, NULL, NULL, NULL,
306 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
308 /* 0x0170 - Win32 Static controls */
309 "STM_SETICON", /* 0x0170 */
310 "STM_GETICON", /* 0x0171 */
311 "STM_SETIMAGE", /* 0x0172 */
312 "STM_GETIMAGE", /* 0x0173 */
313 NULL, NULL, NULL, NULL,
314 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
316 /* 0x0180 - Win32 Listboxes */
317 "LB_ADDSTRING", /* 0x0180 */
318 "LB_INSERTSTRING", /* 0x0181 */
319 "LB_DELETESTRING", /* 0x0182 */
320 "LB_SELITEMRANGEEX", /* 0x0183 */
321 "LB_RESETCONTENT", /* 0x0184 */
322 "LB_SETSEL", /* 0x0185 */
323 "LB_SETCURSEL", /* 0x0186 */
324 "LB_GETSEL", /* 0x0187 */
325 "LB_GETCURSEL", /* 0x0188 */
326 "LB_GETTEXT", /* 0x0189 */
327 "LB_GETTEXTLEN", /* 0x018a */
328 "LB_GETCOUNT", /* 0x018b */
329 "LB_SELECTSTRING", /* 0x018c */
330 "LB_DIR", /* 0x018d */
331 "LB_GETTOPINDEX", /* 0x018e */
332 "LB_FINDSTRING", /* 0x018f */
334 "LB_GETSELCOUNT", /* 0x0190 */
335 "LB_GETSELITEMS", /* 0x0191 */
336 "LB_SETTABSTOPS", /* 0x0192 */
337 "LB_GETHORIZONTALEXTENT", /* 0x0193 */
338 "LB_SETHORIZONTALEXTENT", /* 0x0194 */
339 "LB_SETCOLUMNWIDTH", /* 0x0195 */
340 "LB_ADDFILE", /* 0x0196 */
341 "LB_SETTOPINDEX", /* 0x0197 */
342 "LB_GETITEMRECT", /* 0x0198 */
343 "LB_GETITEMDATA", /* 0x0199 */
344 "LB_SETITEMDATA", /* 0x019a */
345 "LB_SELITEMRANGE", /* 0x019b */
346 "LB_SETANCHORINDEX", /* 0x019c */
347 "LB_GETANCHORINDEX", /* 0x019d */
348 "LB_SETCARETINDEX", /* 0x019e */
349 "LB_GETCARETINDEX", /* 0x019f */
351 "LB_SETITEMHEIGHT", /* 0x01a0 */
352 "LB_GETITEMHEIGHT", /* 0x01a1 */
353 "LB_FINDSTRINGEXACT", /* 0x01a2 */
354 "LB_CARETON", /* 0x01a3 */
355 "LB_CARETOFF", /* 0x01a4 */
356 "LB_SETLOCALE", /* 0x01a5 */
357 "LB_GETLOCALE", /* 0x01a6 */
358 "LB_SETCOUNT", /* 0x01a7 */
359 "LB_INITSTORAGE", /* 0x01a8 */
360 "LB_ITEMFROMPOINT", /* 0x01a9 */
361 NULL, NULL, NULL, NULL, NULL, NULL,
363 /* 0x01B0 */
364 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
365 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
367 /* 0x01C0 */
368 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
369 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
371 /* 0x01D0 */
372 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
373 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
375 /* 0x01E0 */
376 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
377 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
379 /* 0x01F0 */
380 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
381 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
383 "WM_MOUSEMOVE", /* 0x0200 */
384 "WM_LBUTTONDOWN", /* 0x0201 */
385 "WM_LBUTTONUP", /* 0x0202 */
386 "WM_LBUTTONDBLCLK", /* 0x0203 */
387 "WM_RBUTTONDOWN", /* 0x0204 */
388 "WM_RBUTTONUP", /* 0x0205 */
389 "WM_RBUTTONDBLCLK", /* 0x0206 */
390 "WM_MBUTTONDOWN", /* 0x0207 */
391 "WM_MBUTTONUP", /* 0x0208 */
392 "WM_MBUTTONDBLCLK", /* 0x0209 */
393 "WM_MOUSEWHEEL", /* 0x020A */
394 NULL, NULL, NULL, NULL, NULL,
396 "WM_PARENTNOTIFY", /* 0x0210 */
397 "WM_ENTERMENULOOP", /* 0x0211 */
398 "WM_EXITMENULOOP", /* 0x0212 */
399 "WM_NEXTMENU", /* 0x0213 */
400 "WM_SIZING",
401 "WM_CAPTURECHANGED",
402 "WM_MOVING", NULL,
403 "WM_POWERBROADCAST",
404 "WM_DEVICECHANGE", NULL, NULL, NULL, NULL, NULL, NULL,
406 "WM_MDICREATE", /* 0x0220 */
407 "WM_MDIDESTROY", /* 0x0221 */
408 "WM_MDIACTIVATE", /* 0x0222 */
409 "WM_MDIRESTORE", /* 0x0223 */
410 "WM_MDINEXT", /* 0x0224 */
411 "WM_MDIMAXIMIZE", /* 0x0225 */
412 "WM_MDITILE", /* 0x0226 */
413 "WM_MDICASCADE", /* 0x0227 */
414 "WM_MDIICONARRANGE", /* 0x0228 */
415 "WM_MDIGETACTIVE", /* 0x0229 */
417 "WM_DROPOBJECT",
418 "WM_QUERYDROPOBJECT",
419 "WM_BEGINDRAG",
420 "WM_DRAGLOOP",
421 "WM_DRAGSELECT",
422 "WM_DRAGMOVE",
424 /* 0x0230*/
425 "WM_MDISETMENU", /* 0x0230 */
426 "WM_ENTERSIZEMOVE", /* 0x0231 */
427 "WM_EXITSIZEMOVE", /* 0x0232 */
428 "WM_DROPFILES", /* 0x0233 */
429 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
430 /* 0x0238*/
431 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
433 /* 0x0240 */
434 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
435 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
437 /* 0x0250 */
438 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
439 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
441 /* 0x0260 */
442 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
443 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
444 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
445 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
447 /* 0x0280 */
448 NULL, "WM_IME_SETCONTEXT", "WM_IME_NOTIFY", "WM_IME_CONTROL", "WM_IME_COMPOSITIONFULL", "WM_IME_SELECT", "WM_IME_CHAR", NULL,
449 "WM_IME_REQUEST", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
450 "WM_IME_KEYDOWN", "WM_IME_KEYUP", NULL, NULL, NULL, NULL, NULL, NULL,
451 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
453 /* 0x02a0 */
454 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
455 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
456 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
457 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
459 /* 0x02c0 */
460 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
461 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
462 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
463 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
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,
468 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
470 "WM_CUT", /* 0x0300 */
471 "WM_COPY",
472 "WM_PASTE",
473 "WM_CLEAR",
474 "WM_UNDO",
475 "WM_RENDERFORMAT",
476 "WM_RENDERALLFORMATS",
477 "WM_DESTROYCLIPBOARD",
478 "WM_DRAWCLIPBOARD",
479 "WM_PAINTCLIPBOARD",
480 "WM_VSCROLLCLIPBOARD",
481 "WM_SIZECLIPBOARD",
482 "WM_ASKCBFORMATNAME",
483 "WM_CHANGECBCHAIN",
484 "WM_HSCROLLCLIPBOARD",
485 "WM_QUERYNEWPALETTE", /* 0x030f*/
487 "WM_PALETTEISCHANGING",
488 "WM_PALETTECHANGED",
489 "WM_HOTKEY", /* 0x0312 */
490 NULL, NULL, NULL, NULL,
491 "WM_PRINT",
492 "WM_PRINTCLIENT",
493 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
495 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
496 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
497 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
498 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
500 /* 0x0340 */
501 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
502 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
503 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
504 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
506 "WM_QUERYAFXWNDPROC", /* 0x0360 */
507 "WM_SIZEPARENT", /* 0x0361 */
508 "WM_SETMESSAGESTRING", /* 0x0362 */
509 "WM_IDLEUPDATECMDUI", /* 0x0363 */
510 "WM_INITIALUPDATE", /* 0x0364 */
511 "WM_COMMANDHELP", /* 0x0365 */
512 "WM_HELPHITTEST", /* 0x0366 */
513 "WM_EXITHELPMODE", /* 0x0367 */
514 "WM_RECALCPARENT", /* 0x0368 */
515 "WM_SIZECHILD", /* 0x0369 */
516 "WM_KICKIDLE", /* 0x036A */
517 "WM_QUERYCENTERWND", /* 0x036B */
518 "WM_DISABLEMODAL", /* 0x036C */
519 "WM_FLOATSTATUS", /* 0x036D */
520 "WM_ACTIVATETOPLEVEL", /* 0x036E */
521 "WM_QUERY3DCONTROLS", /* 0x036F */
522 NULL,NULL,NULL,
523 "WM_SOCKET_NOTIFY", /* 0x0373 */
524 "WM_SOCKET_DEAD", /* 0x0374 */
525 "WM_POPMESSAGESTRING", /* 0x0375 */
526 "WM_OCC_LOADFROMSTREAM", /* 0x0376 */
527 "WM_OCC_LOADFROMSTORAGE", /* 0x0377 */
528 "WM_OCC_INITNEW", /* 0x0378 */
529 "WM_QUEUE_SENTINEL", /* 0x0379 */
530 "WM_OCC_LOADFROMSTREAM_EX", /* 0x037A */
531 "WM_OCC_LOADFROMSTORAGE_EX", /* 0x037B */
533 NULL,NULL,NULL,NULL,
535 /* 0x0380 */
536 "WM_PENWINFIRST",
537 "WM_RCRESULT",
538 "WM_HOOKRCRESULT",
539 "WM_GLOBALRCCHANGE",
540 "WM_SKB",
541 "WM_HEDITCTL",
542 NULL, NULL,
543 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
545 "WM_COALESCE_FIRST",
546 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
547 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
548 "WM_COALESCE_LAST",
550 /* 0x03a0 */
551 "MM_JOY1MOVE",
552 "MM_JOY2MOVE",
553 "MM_JOY1ZMOVE",
554 "MM_JOY2ZMOVE",
555 NULL, NULL, NULL, NULL,
556 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
558 /* 0x03b0 */
559 NULL, NULL, NULL, NULL, NULL,
560 "MM_JOY1BUTTONDOWN",
561 "MM_JOY2BUTTONDOWN",
562 "MM_JOY1BUTTONUP",
563 "MM_JOY2BUTTONUP",
564 "MM_MCINOTIFY",
565 NULL,
566 "MM_WOM_OPEN",
567 "MM_WOM_CLOSE",
568 "MM_WOM_DONE",
569 "MM_WIM_OPEN",
570 "MM_WIM_CLOSE",
572 /* 0x03c0 */
573 "MM_WIM_DATA",
574 "MM_MIM_OPEN",
575 "MM_MIM_CLOSE",
576 "MM_MIM_DATA",
577 "MM_MIM_LONGDATA",
578 "MM_MIM_ERROR",
579 "MM_MIM_LONGERROR",
580 "MM_MOM_OPEN",
581 "MM_MOM_CLOSE",
582 "MM_MOM_DONE",
583 NULL, NULL, NULL, NULL, NULL, NULL,
584 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
585 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
587 /* 0x03e0 */
588 "WM_DDE_INITIATE", /* 0x3E0 */
589 "WM_DDE_TERMINATE", /* 0x3E1 */
590 "WM_DDE_ADVISE", /* 0x3E2 */
591 "WM_DDE_UNADVISE", /* 0x3E3 */
592 "WM_DDE_ACK", /* 0x3E4 */
593 "WM_DDE_DATA", /* 0x3E5 */
594 "WM_DDE_REQUEST", /* 0x3E6 */
595 "WM_DDE_POKE", /* 0x3E7 */
596 "WM_DDE_EXECUTE", /* 0x3E8 */
597 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
600 /* 0x03f0 */
601 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
602 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
604 "WM_USER"
608 #define SPY_MAX_LVMMSGNUM 140
609 static const char * const LVMMessageTypeNames[SPY_MAX_LVMMSGNUM + 1] =
611 "LVM_GETBKCOLOR", /* 1000 */
612 "LVM_SETBKCOLOR",
613 "LVM_GETIMAGELIST",
614 "LVM_SETIMAGELIST",
615 "LVM_GETITEMCOUNT",
616 "LVM_GETITEMA",
617 "LVM_SETITEMA",
618 "LVM_INSERTITEMA",
619 "LVM_DELETEITEM",
620 "LVM_DELETEALLITEMS",
621 "LVM_GETCALLBACKMASK",
622 "LVM_SETCALLBACKMASK",
623 "LVM_GETNEXTITEM",
624 "LVM_FINDITEMA",
625 "LVM_GETITEMRECT",
626 "LVM_SETITEMPOSITION",
627 "LVM_GETITEMPOSITION",
628 "LVM_GETSTRINGWIDTHA",
629 "LVM_HITTEST",
630 "LVM_ENSUREVISIBLE",
631 "LVM_SCROLL",
632 "LVM_REDRAWITEMS",
633 "LVM_ARRANGE",
634 "LVM_EDITLABELA",
635 "LVM_GETEDITCONTROL",
636 "LVM_GETCOLUMNA",
637 "LVM_SETCOLUMNA",
638 "LVM_INSERTCOLUMNA",
639 "LVM_DELETECOLUMN",
640 "LVM_GETCOLUMNWIDTH",
641 "LVM_SETCOLUMNWIDTH",
642 "LVM_GETHEADER",
643 NULL,
644 "LVM_CREATEDRAGIMAGE",
645 "LVM_GETVIEWRECT",
646 "LVM_GETTEXTCOLOR",
647 "LVM_SETTEXTCOLOR",
648 "LVM_GETTEXTBKCOLOR",
649 "LVM_SETTEXTBKCOLOR",
650 "LVM_GETTOPINDEX",
651 "LVM_GETCOUNTPERPAGE",
652 "LVM_GETORIGIN",
653 "LVM_UPDATE",
654 "LVM_SETITEMSTATE",
655 "LVM_GETITEMSTATE",
656 "LVM_GETITEMTEXTA",
657 "LVM_SETITEMTEXTA",
658 "LVM_SETITEMCOUNT",
659 "LVM_SORTITEMS",
660 "LVM_SETITEMPOSITION32",
661 "LVM_GETSELECTEDCOUNT",
662 "LVM_GETITEMSPACING",
663 "LVM_GETISEARCHSTRINGA",
664 "LVM_SETICONSPACING",
665 "LVM_SETEXTENDEDLISTVIEWSTYLE",
666 "LVM_GETEXTENDEDLISTVIEWSTYLE",
667 "LVM_GETSUBITEMRECT",
668 "LVM_SUBITEMHITTEST",
669 "LVM_SETCOLUMNORDERARRAY",
670 "LVM_GETCOLUMNORDERARRAY",
671 "LVM_SETHOTITEM",
672 "LVM_GETHOTITEM",
673 "LVM_SETHOTCURSOR",
674 "LVM_GETHOTCURSOR",
675 "LVM_APPROXIMATEVIEWRECT",
676 "LVM_SETWORKAREAS",
677 "LVM_GETSELECTIONMARK",
678 "LVM_SETSELECTIONMARK",
679 "LVM_SETBKIMAGEA",
680 "LVM_GETBKIMAGEA",
681 "LVM_GETWORKAREAS",
682 "LVM_SETHOVERTIME",
683 "LVM_GETHOVERTIME",
684 "LVM_GETNUMBEROFWORKAREAS",
685 "LVM_SETTOOLTIPS",
686 "LVM_GETITEMW",
687 "LVM_SETITEMW",
688 "LVM_INSERTITEMW",
689 "LVM_GETTOOLTIPS",
690 NULL,
691 NULL,
692 NULL,
693 NULL,
694 "LVM_FINDITEMW",
695 NULL,
696 NULL,
697 NULL,
698 "LVM_GETSTRINGWIDTHW",
699 NULL,
700 NULL,
701 NULL,
702 NULL,
703 NULL,
704 NULL,
705 NULL,
706 "LVM_GETCOLUMNW",
707 "LVM_SETCOLUMNW",
708 "LVM_INSERTCOLUMNW",
709 NULL,
710 NULL,
711 NULL,
712 NULL,
713 NULL,
714 NULL,
715 NULL,
716 NULL,
717 NULL,
718 NULL,
719 NULL,
720 NULL,
721 NULL,
722 NULL,
723 NULL,
724 NULL,
725 NULL,
726 "LVM_GETITEMTEXTW",
727 "LVM_SETITEMTEXTW",
728 "LVM_GETISEARCHSTRINGW",
729 "LVM_EDITLABELW",
730 NULL,
731 NULL,
732 NULL,
733 NULL,
734 NULL,
735 NULL,
736 NULL,
737 NULL,
738 NULL,
739 NULL,
740 NULL,
741 NULL,
742 NULL,
743 NULL,
744 NULL,
745 NULL,
746 NULL,
747 NULL,
748 NULL,
749 NULL,
750 "LVM_SETBKIMAGEW",
751 "LVM_GETBKIMAGEW" /* 0x108B */
755 #define SPY_MAX_TVMSGNUM 65
756 static const char * const TVMessageTypeNames[SPY_MAX_TVMSGNUM + 1] =
758 "TVM_INSERTITEMA", /* 1100 */
759 "TVM_DELETEITEM",
760 "TVM_EXPAND",
761 NULL,
762 "TVM_GETITEMRECT",
763 "TVM_GETCOUNT",
764 "TVM_GETINDENT",
765 "TVM_SETINDENT",
766 "TVM_GETIMAGELIST",
767 "TVM_SETIMAGELIST",
768 "TVM_GETNEXTITEM",
769 "TVM_SELECTITEM",
770 "TVM_GETITEMA",
771 "TVM_SETITEMA",
772 "TVM_EDITLABELA",
773 "TVM_GETEDITCONTROL",
774 "TVM_GETVISIBLECOUNT",
775 "TVM_HITTEST",
776 "TVM_CREATEDRAGIMAGE",
777 "TVM_SORTCHILDREN",
778 "TVM_ENSUREVISIBLE",
779 "TVM_SORTCHILDRENCB",
780 "TVM_ENDEDITLABELNOW",
781 "TVM_GETISEARCHSTRINGA",
782 "TVM_SETTOOLTIPS",
783 "TVM_GETTOOLTIPS",
784 "TVM_SETINSERTMARK",
785 "TVM_SETITEMHEIGHT",
786 "TVM_GETITEMHEIGHT",
787 "TVM_SETBKCOLOR",
788 "TVM_SETTEXTCOLOR",
789 "TVM_GETBKCOLOR",
790 "TVM_GETTEXTCOLOR",
791 "TVM_SETSCROLLTIME",
792 "TVM_GETSCROLLTIME",
793 "TVM_UNKNOWN35",
794 "TVM_UNKNOWN36",
795 "TVM_SETINSERTMARKCOLOR",
796 "TVM_GETINSERTMARKCOLOR",
797 "TVM_GETITEMSTATE",
798 "TVM_SETLINECOLOR",
799 "TVM_GETLINECOLOR",
800 NULL,
801 NULL,
802 NULL,
803 NULL,
804 NULL,
805 NULL,
806 NULL,
807 NULL,
808 "TVM_INSERTITEMW",
809 NULL,
810 NULL,
811 NULL,
812 NULL,
813 NULL,
814 NULL,
815 NULL,
816 NULL,
817 NULL,
818 NULL,
819 NULL,
820 "TVM_GETITEMW",
821 "TVM_SETITEMW",
822 "TVM_GETISEARCHSTRINGW",
823 "TVM_EDITLABELW"
827 #define SPY_MAX_HDMMSGNUM 19
828 static const char * const HDMMessageTypeNames[SPY_MAX_HDMMSGNUM + 1] =
830 "HDM_GETITEMCOUNT", /* 1200 */
831 "HDM_INSERTITEMA",
832 "HDM_DELETEITEM",
833 "HDM_GETITEMA",
834 "HDM_SETITEMA",
835 "HDM_LAYOUT",
836 "HDM_HITTEST",
837 "HDM_GETITEMRECT",
838 "HDM_SETIMAGELIST",
839 "HDM_GETIMAGELIST",
840 "HDM_INSERTITEMW",
841 "HDM_GETITEMW",
842 "HDM_SETITEMW",
843 NULL,
844 NULL,
845 "HDM_ORDERTOINDEX",
846 "HDM_CREATEDRAGIMAGE",
847 "GETORDERARRAYINDEX",
848 "SETORDERARRAYINDEX",
849 "SETHOTDIVIDER"
853 #define SPY_MAX_TCMMSGNUM 62
854 static const char * const TCMMessageTypeNames[SPY_MAX_TCMMSGNUM + 1] =
856 NULL, /* 1300 */
857 NULL,
858 "TCM_SETIMAGELIST",
859 "TCM_GETIMAGELIST",
860 "TCM_GETITEMCOUNT",
861 "TCM_GETITEMA",
862 "TCM_SETITEMA",
863 "TCM_INSERTITEMA",
864 "TCM_DELETEITEM",
865 "TCM_DELETEALLITEMS",
866 "TCM_GETITEMRECT",
867 "TCM_GETCURSEL",
868 "TCM_SETCURSEL",
869 "TCM_HITTEST",
870 "TCM_SETITEMEXTRA",
871 NULL,
872 NULL,
873 NULL,
874 NULL,
875 NULL,
876 NULL,
877 NULL,
878 NULL,
879 NULL,
880 NULL,
881 NULL,
882 NULL,
883 NULL,
884 NULL,
885 NULL,
886 NULL,
887 NULL,
888 NULL,
889 NULL,
890 NULL,
891 NULL,
892 NULL,
893 NULL,
894 NULL,
895 NULL,
896 "TCM_ADJUSTRECT",
897 "TCM_SETITEMSIZE",
898 "TCM_REMOVEIMAGE",
899 "TCM_SETPADDING",
900 "TCM_GETROWCOUNT",
901 "TCM_GETTOOLTIPS",
902 "TCM_SETTOOLTIPS",
903 "TCM_GETCURFOCUS",
904 "TCM_SETCURFOCUS",
905 "TCM_SETMINTABWIDTH",
906 "TCM_DESELECTALL",
907 "TCM_HIGHLIGHTITEM",
908 "TCM_SETEXTENDEDSTYLE",
909 "TCM_GETEXTENDEDSTYLE",
910 NULL,
911 NULL,
912 NULL,
913 NULL,
914 NULL,
915 NULL,
916 "TCM_GETITEMW",
917 "TCM_SETITEMW",
918 "TCM_INSERTITEMW"
921 #define SPY_MAX_PGMMSGNUM 13
922 static const char * const PGMMessageTypeNames[SPY_MAX_PGMMSGNUM + 1] =
924 NULL, /* 1400 */
925 "PGM_SETCHILD",
926 "PGM_RECALCSIZE",
927 "PGM_FORWARDMOUSE",
928 "PGM_SETBKCOLOR",
929 "PGM_GETBKCOLOR",
930 "PGM_SETBORDER",
931 "PGM_GETBORDER",
932 "PGM_SETPOS",
933 "PGM_GETPOS",
934 "PGM_SETBUTTONSIZE",
935 "PGM_GETBUTTONSIZE",
936 "PGM_GETBUTTONSTATE",
937 "PGM_GETDROPTARGET"
941 #define SPY_MAX_CCMMSGNUM 6
942 static const char * const CCMMessageTypeNames[SPY_MAX_CCMMSGNUM + 1] =
944 NULL, /* 0x2000 */
945 "CCM_SETBKCOLOR",
946 "CCM_SETCOLORSCHEME",
947 "CCM_GETCOLORSCHEME",
948 "CCM_GETDROPTARGET",
949 "CCM_SETUNICODEFORMAT",
950 "CCM_GETUNICODEFORMAT"
953 /* Virtual key names */
954 #define SPY_MAX_VKKEYSNUM 255
955 static const char * const VK_KeyNames[SPY_MAX_VKKEYSNUM + 1] =
957 NULL, /* 0x00 */
958 "VK_LBUTTON", /* 0x01 */
959 "VK_RBUTTON", /* 0x02 */
960 "VK_CANCEL", /* 0x03 */
961 "VK_MBUTTON", /* 0x04 */
962 NULL, /* 0x05 */
963 NULL, /* 0x06 */
964 NULL, /* 0x07 */
965 "VK_BACK", /* 0x08 */
966 "VK_TAB", /* 0x09 */
967 NULL, /* 0x0A */
968 NULL, /* 0x0B */
969 "VK_CLEAR", /* 0x0C */
970 "VK_RETURN", /* 0x0D */
971 NULL, /* 0x0E */
972 NULL, /* 0x0F */
973 "VK_SHIFT", /* 0x10 */
974 "VK_CONTROL", /* 0x11 */
975 "VK_MENU", /* 0x12 */
976 "VK_PAUSE", /* 0x13 */
977 "VK_CAPITAL", /* 0x14 */
978 NULL, /* 0x15 */
979 NULL, /* 0x16 */
980 NULL, /* 0x17 */
981 NULL, /* 0x18 */
982 NULL, /* 0x19 */
983 NULL, /* 0x1A */
984 "VK_ESCAPE", /* 0x1B */
985 NULL, /* 0x1C */
986 NULL, /* 0x1D */
987 NULL, /* 0x1E */
988 NULL, /* 0x1F */
989 "VK_SPACE", /* 0x20 */
990 "VK_PRIOR", /* 0x21 */
991 "VK_NEXT", /* 0x22 */
992 "VK_END", /* 0x23 */
993 "VK_HOME", /* 0x24 */
994 "VK_LEFT", /* 0x25 */
995 "VK_UP", /* 0x26 */
996 "VK_RIGHT", /* 0x27 */
997 "VK_DOWN", /* 0x28 */
998 "VK_SELECT", /* 0x29 */
999 "VK_PRINT", /* 0x2A */
1000 "VK_EXECUTE", /* 0x2B */
1001 "VK_SNAPSHOT", /* 0x2C */
1002 "VK_INSERT", /* 0x2D */
1003 "VK_DELETE", /* 0x2E */
1004 "VK_HELP", /* 0x2F */
1005 "VK_0", /* 0x30 */
1006 "VK_1", /* 0x31 */
1007 "VK_2", /* 0x32 */
1008 "VK_3", /* 0x33 */
1009 "VK_4", /* 0x34 */
1010 "VK_5", /* 0x35 */
1011 "VK_6", /* 0x36 */
1012 "VK_7", /* 0x37 */
1013 "VK_8", /* 0x38 */
1014 "VK_9", /* 0x39 */
1015 NULL, /* 0x3A */
1016 NULL, /* 0x3B */
1017 NULL, /* 0x3C */
1018 NULL, /* 0x3D */
1019 NULL, /* 0x3E */
1020 NULL, /* 0x3F */
1021 NULL, /* 0x40 */
1022 "VK_A", /* 0x41 */
1023 "VK_B", /* 0x42 */
1024 "VK_C", /* 0x43 */
1025 "VK_D", /* 0x44 */
1026 "VK_E", /* 0x45 */
1027 "VK_F", /* 0x46 */
1028 "VK_G", /* 0x47 */
1029 "VK_H", /* 0x48 */
1030 "VK_I", /* 0x49 */
1031 "VK_J", /* 0x4A */
1032 "VK_K", /* 0x4B */
1033 "VK_L", /* 0x4C */
1034 "VK_M", /* 0x4D */
1035 "VK_N", /* 0x4E */
1036 "VK_O", /* 0x4F */
1037 "VK_P", /* 0x50 */
1038 "VK_Q", /* 0x51 */
1039 "VK_R", /* 0x52 */
1040 "VK_S", /* 0x53 */
1041 "VK_T", /* 0x54 */
1042 "VK_U", /* 0x55 */
1043 "VK_V", /* 0x56 */
1044 "VK_W", /* 0x57 */
1045 "VK_X", /* 0x58 */
1046 "VK_Y", /* 0x59 */
1047 "VK_Z", /* 0x5A */
1048 "VK_LWIN", /* 0x5B */
1049 "VK_RWIN", /* 0x5C */
1050 "VK_APPS", /* 0x5D */
1051 NULL, /* 0x5E */
1052 NULL, /* 0x5F */
1053 "VK_NUMPAD0", /* 0x60 */
1054 "VK_NUMPAD1", /* 0x61 */
1055 "VK_NUMPAD2", /* 0x62 */
1056 "VK_NUMPAD3", /* 0x63 */
1057 "VK_NUMPAD4", /* 0x64 */
1058 "VK_NUMPAD5", /* 0x65 */
1059 "VK_NUMPAD6", /* 0x66 */
1060 "VK_NUMPAD7", /* 0x67 */
1061 "VK_NUMPAD8", /* 0x68 */
1062 "VK_NUMPAD9", /* 0x69 */
1063 "VK_MULTIPLY", /* 0x6A */
1064 "VK_ADD", /* 0x6B */
1065 "VK_SEPARATOR", /* 0x6C */
1066 "VK_SUBTRACT", /* 0x6D */
1067 "VK_DECIMAL", /* 0x6E */
1068 "VK_DIVIDE", /* 0x6F */
1069 "VK_F1", /* 0x70 */
1070 "VK_F2", /* 0x71 */
1071 "VK_F3", /* 0x72 */
1072 "VK_F4", /* 0x73 */
1073 "VK_F5", /* 0x74 */
1074 "VK_F6", /* 0x75 */
1075 "VK_F7", /* 0x76 */
1076 "VK_F8", /* 0x77 */
1077 "VK_F9", /* 0x78 */
1078 "VK_F10", /* 0x79 */
1079 "VK_F11", /* 0x7A */
1080 "VK_F12", /* 0x7B */
1081 "VK_F13", /* 0x7C */
1082 "VK_F14", /* 0x7D */
1083 "VK_F15", /* 0x7E */
1084 "VK_F16", /* 0x7F */
1085 "VK_F17", /* 0x80 */
1086 "VK_F18", /* 0x81 */
1087 "VK_F19", /* 0x82 */
1088 "VK_F20", /* 0x83 */
1089 "VK_F21", /* 0x84 */
1090 "VK_F22", /* 0x85 */
1091 "VK_F23", /* 0x86 */
1092 "VK_F24", /* 0x87 */
1093 NULL, /* 0x88 */
1094 NULL, /* 0x89 */
1095 NULL, /* 0x8A */
1096 NULL, /* 0x8B */
1097 NULL, /* 0x8C */
1098 NULL, /* 0x8D */
1099 NULL, /* 0x8E */
1100 NULL, /* 0x8F */
1101 "VK_NUMLOCK", /* 0x90 */
1102 "VK_SCROLL", /* 0x91 */
1103 NULL, /* 0x92 */
1104 NULL, /* 0x93 */
1105 NULL, /* 0x94 */
1106 NULL, /* 0x95 */
1107 NULL, /* 0x96 */
1108 NULL, /* 0x97 */
1109 NULL, /* 0x98 */
1110 NULL, /* 0x99 */
1111 NULL, /* 0x9A */
1112 NULL, /* 0x9B */
1113 NULL, /* 0x9C */
1114 NULL, /* 0x9D */
1115 NULL, /* 0x9E */
1116 NULL, /* 0x9F */
1117 "VK_LSHIFT", /* 0xA0 */
1118 "VK_RSHIFT", /* 0xA1 */
1119 "VK_LCONTROL", /* 0xA2 */
1120 "VK_RCONTROL", /* 0xA3 */
1121 "VK_LMENU", /* 0xA4 */
1122 "VK_RMENU", /* 0xA5 */
1123 NULL, /* 0xA6 */
1124 NULL, /* 0xA7 */
1125 NULL, /* 0xA8 */
1126 NULL, /* 0xA9 */
1127 NULL, /* 0xAA */
1128 NULL, /* 0xAB */
1129 NULL, /* 0xAC */
1130 NULL, /* 0xAD */
1131 NULL, /* 0xAE */
1132 NULL, /* 0xAF */
1133 NULL, /* 0xB0 */
1134 NULL, /* 0xB1 */
1135 NULL, /* 0xB2 */
1136 NULL, /* 0xB3 */
1137 NULL, /* 0xB4 */
1138 NULL, /* 0xB5 */
1139 NULL, /* 0xB6 */
1140 NULL, /* 0xB7 */
1141 NULL, /* 0xB8 */
1142 NULL, /* 0xB9 */
1143 "VK_OEM_1", /* 0xBA */
1144 "VK_OEM_PLUS", /* 0xBB */
1145 "VK_OEM_COMMA", /* 0xBC */
1146 "VK_OEM_MINUS", /* 0xBD */
1147 "VK_OEM_PERIOD", /* 0xBE */
1148 "VK_OEM_2", /* 0xBF */
1149 "VK_OEM_3", /* 0xC0 */
1150 NULL, /* 0xC1 */
1151 NULL, /* 0xC2 */
1152 NULL, /* 0xC3 */
1153 NULL, /* 0xC4 */
1154 NULL, /* 0xC5 */
1155 NULL, /* 0xC6 */
1156 NULL, /* 0xC7 */
1157 NULL, /* 0xC8 */
1158 NULL, /* 0xC9 */
1159 NULL, /* 0xCA */
1160 NULL, /* 0xCB */
1161 NULL, /* 0xCC */
1162 NULL, /* 0xCD */
1163 NULL, /* 0xCE */
1164 NULL, /* 0xCF */
1165 NULL, /* 0xD0 */
1166 NULL, /* 0xD1 */
1167 NULL, /* 0xD2 */
1168 NULL, /* 0xD3 */
1169 NULL, /* 0xD4 */
1170 NULL, /* 0xD5 */
1171 NULL, /* 0xD6 */
1172 NULL, /* 0xD7 */
1173 NULL, /* 0xD8 */
1174 NULL, /* 0xD9 */
1175 NULL, /* 0xDA */
1176 "VK_OEM_4", /* 0xDB */
1177 "VK_OEM_5", /* 0xDC */
1178 "VK_OEM_6", /* 0xDD */
1179 "VK_OEM_7", /* 0xDE */
1180 "VK_OEM_8", /* 0xDF */
1181 NULL, /* 0xE0 */
1182 "VK_OEM_AX", /* 0xE1 */
1183 "VK_OEM_102", /* 0xE2 */
1184 "VK_ICO_HELP", /* 0xE3 */
1185 "VK_ICO_00", /* 0xE4 */
1186 "VK_PROCESSKEY", /* 0xE5 */
1187 NULL, /* 0xE6 */
1188 NULL, /* 0xE7 */
1189 NULL, /* 0xE8 */
1190 NULL, /* 0xE9 */
1191 NULL, /* 0xEA */
1192 NULL, /* 0xEB */
1193 NULL, /* 0xEC */
1194 NULL, /* 0xED */
1195 NULL, /* 0xEE */
1196 NULL, /* 0xEF */
1197 NULL, /* 0xF0 */
1198 NULL, /* 0xF1 */
1199 NULL, /* 0xF2 */
1200 NULL, /* 0xF3 */
1201 NULL, /* 0xF4 */
1202 NULL, /* 0xF5 */
1203 "VK_ATTN", /* 0xF6 */
1204 "VK_CRSEL", /* 0xF7 */
1205 "VK_EXSEL", /* 0xF8 */
1206 "VK_EREOF", /* 0xF9 */
1207 "VK_PLAY", /* 0xFA */
1208 "VK_ZOOM", /* 0xFB */
1209 "VK_NONAME", /* 0xFC */
1210 "VK_PA1", /* 0xFD */
1211 "VK_OEM_CLEAR", /* 0xFE */
1212 NULL /* 0xFF */
1216 /************************************************************************/
1219 /* WM_USER+n message values for "common controls" */
1221 typedef struct
1223 const char *name; /* name of control message */
1224 UINT value; /* message number (0x0401-0x0fff */
1225 UINT len; /* length of space at lParam to dump */
1226 } USER_MSG;
1229 typedef struct
1231 CHAR *classname; /* class name to match */
1232 const USER_MSG *classmsg; /* pointer to first USER_MSG for class */
1233 USER_MSG *lastmsg; /* pointer to last USER_MSG for class */
1234 } CONTROL_CLASS;
1236 #define USM(a,b) { #a ,a,b}
1237 #define SZOF(a) sizeof(a)
1239 /* To dump memory at the lParam for any of these messages, */
1240 /* replace the "0" with a "SZOF(structure)", or with a */
1241 /* number. (First method prefered.) */
1243 static const USER_MSG rebar_array[] = {
1244 USM(RB_INSERTBANDA, 0),
1245 USM(RB_DELETEBAND, 0),
1246 USM(RB_GETBARINFO, 0),
1247 USM(RB_SETBARINFO, 0),
1248 USM(RB_GETBANDINFO, 0),
1249 USM(RB_SETBANDINFOA, 0),
1250 USM(RB_SETPARENT, 0),
1251 USM(RB_HITTEST, 0),
1252 USM(RB_GETRECT, 0),
1253 USM(RB_INSERTBANDW, 0),
1254 USM(RB_SETBANDINFOW, 0),
1255 USM(RB_GETBANDCOUNT, 0),
1256 USM(RB_GETROWCOUNT, 0),
1257 USM(RB_GETROWHEIGHT, 0),
1258 USM(RB_IDTOINDEX, 0),
1259 USM(RB_GETTOOLTIPS, 0),
1260 USM(RB_SETTOOLTIPS, 0),
1261 USM(RB_SETBKCOLOR, 0),
1262 USM(RB_GETBKCOLOR, 0),
1263 USM(RB_SETTEXTCOLOR, 0),
1264 USM(RB_GETTEXTCOLOR, 0),
1265 USM(RB_SIZETORECT, 0),
1266 USM(RB_BEGINDRAG, 0),
1267 USM(RB_ENDDRAG, 0),
1268 USM(RB_DRAGMOVE, 0),
1269 USM(RB_GETBARHEIGHT, 0),
1270 USM(RB_GETBANDINFOW, 0),
1271 USM(RB_GETBANDINFOA, 0),
1272 USM(RB_MINIMIZEBAND, 0),
1273 USM(RB_MAXIMIZEBAND, 0),
1274 USM(RB_GETBANDBORDERS, 0),
1275 USM(RB_SHOWBAND, 0),
1276 USM(RB_SETPALETTE, 0),
1277 USM(RB_GETPALETTE, 0),
1278 USM(RB_MOVEBAND, 0),
1279 {0,0,0} };
1281 static const USER_MSG toolbar_array[] = {
1282 USM(TB_ENABLEBUTTON ,0),
1283 USM(TB_CHECKBUTTON ,0),
1284 USM(TB_PRESSBUTTON ,0),
1285 USM(TB_HIDEBUTTON ,0),
1286 USM(TB_INDETERMINATE ,0),
1287 USM(TB_MARKBUTTON ,0),
1288 USM(TB_ISBUTTONENABLED ,0),
1289 USM(TB_ISBUTTONCHECKED ,0),
1290 USM(TB_ISBUTTONPRESSED ,0),
1291 USM(TB_ISBUTTONHIDDEN ,0),
1292 USM(TB_ISBUTTONINDETERMINATE ,0),
1293 USM(TB_ISBUTTONHIGHLIGHTED ,0),
1294 USM(TB_SETSTATE ,0),
1295 USM(TB_GETSTATE ,0),
1296 USM(TB_ADDBITMAP ,0),
1297 USM(TB_ADDBUTTONSA ,0),
1298 USM(TB_INSERTBUTTONA ,0),
1299 USM(TB_DELETEBUTTON ,0),
1300 USM(TB_GETBUTTON ,0),
1301 USM(TB_BUTTONCOUNT ,0),
1302 USM(TB_COMMANDTOINDEX ,0),
1303 USM(TB_SAVERESTOREA ,0),
1304 USM(TB_CUSTOMIZE ,0),
1305 USM(TB_ADDSTRINGA ,0),
1306 USM(TB_GETITEMRECT ,0),
1307 USM(TB_BUTTONSTRUCTSIZE ,0),
1308 USM(TB_SETBUTTONSIZE ,0),
1309 USM(TB_SETBITMAPSIZE ,0),
1310 USM(TB_AUTOSIZE ,0),
1311 USM(TB_GETTOOLTIPS ,0),
1312 USM(TB_SETTOOLTIPS ,0),
1313 USM(TB_SETPARENT ,0),
1314 USM(TB_SETROWS ,0),
1315 USM(TB_GETROWS ,0),
1316 USM(TB_GETBITMAPFLAGS ,0),
1317 USM(TB_SETCMDID ,0),
1318 USM(TB_CHANGEBITMAP ,0),
1319 USM(TB_GETBITMAP ,0),
1320 USM(TB_GETBUTTONTEXTA ,0),
1321 USM(TB_REPLACEBITMAP ,0),
1322 USM(TB_SETINDENT ,0),
1323 USM(TB_SETIMAGELIST ,0),
1324 USM(TB_GETIMAGELIST ,0),
1325 USM(TB_LOADIMAGES ,0),
1326 USM(TB_GETRECT ,0),
1327 USM(TB_SETHOTIMAGELIST ,0),
1328 USM(TB_GETHOTIMAGELIST ,0),
1329 USM(TB_SETDISABLEDIMAGELIST ,0),
1330 USM(TB_GETDISABLEDIMAGELIST ,0),
1331 USM(TB_SETSTYLE ,0),
1332 USM(TB_GETSTYLE ,0),
1333 USM(TB_GETBUTTONSIZE ,0),
1334 USM(TB_SETBUTTONWIDTH ,0),
1335 USM(TB_SETMAXTEXTROWS ,0),
1336 USM(TB_GETTEXTROWS ,0),
1337 USM(TB_GETOBJECT ,0),
1338 USM(TB_GETBUTTONINFOW ,0),
1339 USM(TB_SETBUTTONINFOW ,0),
1340 USM(TB_GETBUTTONINFOA ,0),
1341 USM(TB_SETBUTTONINFOA ,0),
1342 USM(TB_INSERTBUTTONW ,0),
1343 USM(TB_ADDBUTTONSW ,0),
1344 USM(TB_HITTEST ,0),
1345 USM(TB_SETDRAWTEXTFLAGS ,0),
1346 USM(TB_GETHOTITEM ,0),
1347 USM(TB_SETHOTITEM ,0),
1348 USM(TB_SETANCHORHIGHLIGHT ,0),
1349 USM(TB_GETANCHORHIGHLIGHT ,0),
1350 USM(TB_GETBUTTONTEXTW ,0),
1351 USM(TB_SAVERESTOREW ,0),
1352 USM(TB_ADDSTRINGW ,0),
1353 USM(TB_MAPACCELERATORA ,0),
1354 USM(TB_GETINSERTMARK ,0),
1355 USM(TB_SETINSERTMARK ,0),
1356 USM(TB_INSERTMARKHITTEST ,0),
1357 USM(TB_MOVEBUTTON ,0),
1358 USM(TB_GETMAXSIZE ,0),
1359 USM(TB_SETEXTENDEDSTYLE ,0),
1360 USM(TB_GETEXTENDEDSTYLE ,0),
1361 USM(TB_GETPADDING ,0),
1362 USM(TB_SETPADDING ,0),
1363 USM(TB_SETINSERTMARKCOLOR ,0),
1364 USM(TB_GETINSERTMARKCOLOR ,0),
1365 USM(TB_MAPACCELERATORW ,0),
1366 {0,0,0} };
1368 static const USER_MSG comboex_array[] = {
1369 USM(CBEM_INSERTITEMA ,0),
1370 USM(CBEM_SETIMAGELIST ,0),
1371 USM(CBEM_GETIMAGELIST ,0),
1372 USM(CBEM_GETITEMA ,0),
1373 USM(CBEM_SETITEMA ,0),
1374 USM(CBEM_GETCOMBOCONTROL ,0),
1375 USM(CBEM_GETEDITCONTROL ,0),
1376 USM(CBEM_SETEXSTYLE ,0),
1377 USM(CBEM_GETEXTENDEDSTYLE ,0),
1378 USM(CBEM_HASEDITCHANGED ,0),
1379 USM(CBEM_INSERTITEMW ,0),
1380 USM(CBEM_SETITEMW ,0),
1381 USM(CBEM_GETITEMW ,0),
1382 USM(CBEM_SETEXTENDEDSTYLE ,0),
1383 {0,0,0} };
1385 #undef SZOF
1386 #undef USM
1388 static CONTROL_CLASS cc_array[] = {
1389 {WC_COMBOBOXEXA, comboex_array, 0},
1390 {REBARCLASSNAMEA, rebar_array, 0},
1391 {TOOLBARCLASSNAMEA, toolbar_array, 0},
1392 {0, 0, 0} };
1395 /************************************************************************/
1398 /* WM_NOTIFY function codes display */
1400 typedef struct
1402 const char *name; /* name of notify message */
1403 UINT value; /* notify code value */
1404 UINT len; /* length of extra space to dump */
1405 } SPY_NOTIFY;
1407 #define SPNFY(a,b) { #a ,a,sizeof(b)-sizeof(NMHDR)}
1409 /* Array MUST be in descending order by the 'value' field */
1410 /* (since value is UNSIGNED, 0xffffffff is largest and */
1411 /* 0xfffffffe is smaller). A binary search is used to */
1412 /* locate the correct 'value'. */
1413 static const SPY_NOTIFY spnfy_array[] = {
1414 /* common 0U to 0U-99U */
1415 SPNFY(NM_OUTOFMEMORY, NMHDR),
1416 SPNFY(NM_CLICK, NMHDR),
1417 SPNFY(NM_DBLCLK, NMHDR),
1418 SPNFY(NM_RETURN, NMHDR),
1419 SPNFY(NM_RCLICK, NMHDR),
1420 SPNFY(NM_RDBLCLK, NMHDR),
1421 SPNFY(NM_SETFOCUS, NMHDR),
1422 SPNFY(NM_KILLFOCUS, NMHDR),
1423 SPNFY(NM_CUSTOMDRAW, NMCUSTOMDRAW),
1424 SPNFY(NM_HOVER, NMHDR),
1425 SPNFY(NM_NCHITTEST, NMMOUSE),
1426 SPNFY(NM_KEYDOWN, NMKEY),
1427 SPNFY(NM_RELEASEDCAPTURE, NMHDR),
1428 SPNFY(NM_SETCURSOR, NMMOUSE),
1429 SPNFY(NM_CHAR, NMCHAR),
1430 SPNFY(NM_TOOLTIPSCREATED, NMTOOLTIPSCREATED),
1431 /* Listview 0U-100U to 0U-199U */
1432 SPNFY(LVN_ITEMCHANGING, NMLISTVIEW),
1433 SPNFY(LVN_ITEMCHANGED, NMLISTVIEW),
1434 SPNFY(LVN_INSERTITEM, NMLISTVIEW),
1435 SPNFY(LVN_DELETEITEM, NMLISTVIEW),
1436 SPNFY(LVN_DELETEALLITEMS, NMLISTVIEW),
1437 SPNFY(LVN_BEGINLABELEDITA, NMLVDISPINFOA),
1438 SPNFY(LVN_ENDLABELEDITA, NMLVDISPINFOA),
1439 SPNFY(LVN_COLUMNCLICK, NMLISTVIEW),
1440 SPNFY(LVN_BEGINDRAG, NMLISTVIEW),
1441 SPNFY(LVN_BEGINRDRAG, NMLISTVIEW),
1442 SPNFY(LVN_ODCACHEHINT, NMLVCACHEHINT),
1443 SPNFY(LVN_ITEMACTIVATE, NMITEMACTIVATE),
1444 SPNFY(LVN_ODSTATECHANGED, NMLVODSTATECHANGE),
1445 SPNFY(LVN_HOTTRACK, NMLISTVIEW),
1446 SPNFY(LVN_GETDISPINFOA, NMLVDISPINFOA),
1447 SPNFY(LVN_SETDISPINFOA, NMLVDISPINFOA),
1448 SPNFY(LVN_ODFINDITEMA, NMLVFINDITEM),
1449 SPNFY(LVN_KEYDOWN, NMLVKEYDOWN),
1450 SPNFY(LVN_MARQUEEBEGIN, NMLISTVIEW),
1451 SPNFY(LVN_GETINFOTIPA, NMLVGETINFOTIPA),
1452 SPNFY(LVN_GETINFOTIPW, NMLVGETINFOTIPW),
1453 SPNFY(LVN_BEGINLABELEDITW, NMLVDISPINFOW),
1454 SPNFY(LVN_ENDLABELEDITW, NMLVDISPINFOW),
1455 SPNFY(LVN_GETDISPINFOW, NMLVDISPINFOW),
1456 SPNFY(LVN_SETDISPINFOW, NMLVDISPINFOW),
1457 SPNFY(LVN_ODFINDITEMW, NMLVFINDITEM),
1458 /* Header 0U-300U to 0U-399U */
1459 SPNFY(HDN_ITEMCHANGINGA, NMHDR),
1460 SPNFY(HDN_ITEMCHANGEDA, NMHDR),
1461 SPNFY(HDN_ITEMCLICKA, NMHDR),
1462 SPNFY(HDN_ITEMDBLCLICKA, NMHDR),
1463 SPNFY(HDN_DIVIDERDBLCLICKA, NMHDR),
1464 SPNFY(HDN_BEGINTRACKA, NMHDR),
1465 SPNFY(HDN_ENDTRACKA, NMHDR),
1466 SPNFY(HDN_GETDISPINFOA, NMHDR),
1467 SPNFY(HDN_BEGINDRAG, NMHDR),
1468 SPNFY(HDN_ENDDRAG, NMHDR),
1469 SPNFY(HDN_ITEMCHANGINGW, NMHDR),
1470 SPNFY(HDN_ITEMCHANGEDW, NMHDR),
1471 SPNFY(HDN_ITEMCLICKW, NMHDR),
1472 SPNFY(HDN_ITEMDBLCLICKW, NMHDR),
1473 SPNFY(HDN_DIVIDERDBLCLICKW, NMHDR),
1474 SPNFY(HDN_BEGINTRACKW, NMHDR),
1475 SPNFY(HDN_ENDTRACKW, NMHDR),
1476 SPNFY(HDN_GETDISPINFOW, NMHDR),
1477 /* Treeview 0U-400U to 0U-499U */
1478 SPNFY(TVN_SELCHANGINGA, NMHDR),
1479 SPNFY(TVN_SELCHANGEDA, NMHDR),
1480 SPNFY(TVN_GETDISPINFOA, NMHDR),
1481 SPNFY(TVN_SETDISPINFOA, NMHDR),
1482 SPNFY(TVN_ITEMEXPANDINGA, NMHDR),
1483 SPNFY(TVN_ITEMEXPANDEDA, NMHDR),
1484 SPNFY(TVN_BEGINDRAGA, NMHDR),
1485 SPNFY(TVN_BEGINRDRAGA, NMHDR),
1486 SPNFY(TVN_DELETEITEMA, NMHDR),
1487 SPNFY(TVN_BEGINLABELEDITA, NMHDR),
1488 SPNFY(TVN_ENDLABELEDITA, NMHDR),
1489 SPNFY(TVN_KEYDOWN, NMHDR),
1490 SPNFY(TVN_SELCHANGINGW, NMHDR),
1491 SPNFY(TVN_SELCHANGEDW, NMHDR),
1492 SPNFY(TVN_GETDISPINFOW, NMHDR),
1493 SPNFY(TVN_SETDISPINFOW, NMHDR),
1494 SPNFY(TVN_ITEMEXPANDINGW, NMHDR),
1495 SPNFY(TVN_ITEMEXPANDEDW, NMHDR),
1496 SPNFY(TVN_BEGINDRAGW, NMHDR),
1497 SPNFY(TVN_BEGINRDRAGW, NMHDR),
1498 SPNFY(TVN_DELETEITEMW, NMHDR),
1499 SPNFY(TVN_BEGINLABELEDITW, NMHDR),
1500 SPNFY(TVN_ENDLABELEDITW, NMHDR),
1501 /* Tooltips 0U-520U to 0U-549U */
1502 /* Tab 0U-550U to 0U-580U */
1503 SPNFY(TCN_KEYDOWN, NMHDR),
1504 SPNFY(TCN_SELCHANGE, NMHDR),
1505 SPNFY(TCN_SELCHANGING, NMHDR),
1506 SPNFY(TCN_GETOBJECT, NMHDR),
1507 /* Common Dialog 0U-601U to 0U-699U */
1508 /* Toolbar 0U-700U to 0U-720U */
1509 SPNFY(TBN_GETBUTTONINFOA, NMTOOLBARA),
1510 SPNFY(TBN_BEGINDRAG, NMTOOLBARA),
1511 SPNFY(TBN_ENDDRAG, NMTOOLBARA),
1512 SPNFY(TBN_BEGINADJUST, NMHDR),
1513 SPNFY(TBN_ENDADJUST, NMHDR),
1514 SPNFY(TBN_RESET, NMHDR),
1515 SPNFY(TBN_QUERYINSERT, NMTOOLBARA),
1516 SPNFY(TBN_QUERYDELETE, NMTOOLBARA),
1517 SPNFY(TBN_TOOLBARCHANGE, NMHDR),
1518 SPNFY(TBN_CUSTHELP, NMHDR),
1519 SPNFY(TBN_DROPDOWN, NMTOOLBARA),
1520 SPNFY(TBN_GETOBJECT, NMOBJECTNOTIFY),
1521 SPNFY(TBN_HOTITEMCHANGE, NMTBHOTITEM),
1522 SPNFY(TBN_DRAGOUT, NMTOOLBARA),
1523 SPNFY(TBN_DELETINGBUTTON, NMTOOLBARA),
1524 SPNFY(TBN_GETDISPINFOA, NMTBDISPINFOA),
1525 SPNFY(TBN_GETDISPINFOW, NMTBDISPINFOW),
1526 SPNFY(TBN_GETINFOTIPA, NMTBGETINFOTIPA),
1527 SPNFY(TBN_GETINFOTIPW, NMTBGETINFOTIPW),
1528 SPNFY(TBN_GETBUTTONINFOW, NMTOOLBARW),
1529 /* Up/Down 0U-721U to 0U-740U */
1530 /* Month Calendar 0U-750U to 0U-759U */
1531 /* Date/Time 0U-760U to 0U-799U */
1532 /* ComboBoxEx 0U-800U to 0U-830U */
1533 SPNFY(CBEN_GETDISPINFOA, NMCOMBOBOXEXA),
1534 SPNFY(CBEN_INSERTITEM, NMCOMBOBOXEXA),
1535 SPNFY(CBEN_DELETEITEM, NMCOMBOBOXEXA),
1536 SPNFY(CBEN_BEGINEDIT, NMHDR),
1537 SPNFY(CBEN_ENDEDITA, NMCBEENDEDITA),
1538 SPNFY(CBEN_ENDEDITW, NMCBEENDEDITW),
1539 SPNFY(CBEN_GETDISPINFOW, NMCOMBOBOXEXW),
1540 SPNFY(CBEN_DRAGBEGINA, NMCBEDRAGBEGINA),
1541 SPNFY(CBEN_DRAGBEGINW, NMCBEDRAGBEGINW),
1542 /* Rebar 0U-831U to 0U-859U */
1543 SPNFY(RBN_HEIGHTCHANGE, NMHDR),
1544 SPNFY(RBN_GETOBJECT, NMOBJECTNOTIFY),
1545 SPNFY(RBN_LAYOUTCHANGED, NMHDR),
1546 SPNFY(RBN_AUTOSIZE, NMRBAUTOSIZE),
1547 SPNFY(RBN_BEGINDRAG, NMREBAR),
1548 SPNFY(RBN_ENDDRAG, NMREBAR),
1549 SPNFY(RBN_DELETINGBAND, NMREBAR),
1550 SPNFY(RBN_DELETEDBAND, NMREBAR),
1551 SPNFY(RBN_CHILDSIZE, NMREBARCHILDSIZE),
1552 /* IP Adderss 0U-860U to 0U-879U */
1553 /* Status bar 0U-880U to 0U-899U */
1554 /* Pager 0U-900U to 0U-950U */
1555 SPNFY(PGN_SCROLL, NMPGSCROLL),
1556 SPNFY(PGN_CALCSIZE, NMPGCALCSIZE),
1557 {0,0,0}};
1558 static const SPY_NOTIFY *end_spnfy_array; /* ptr to last good entry in array */
1559 #undef SPNFY
1562 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
1563 static BOOL16 SPY_ExcludeDWP = 0;
1564 static int SPY_IndentLevel = 0;
1566 #define SPY_EXCLUDE(msg) \
1567 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
1570 typedef struct
1572 UINT msgnum; /* message number */
1573 HWND msg_hwnd; /* window handle for message */
1574 WPARAM wParam; /* message parameter */
1575 LPARAM lParam; /* message parameter */
1576 INT data_len; /* length of data to dump */
1577 char msg_name[60]; /* message name (see SPY_GetMsgName) */
1578 CHAR wnd_class[60]; /* window class name (full) */
1579 CHAR wnd_name[16]; /* window name for message */
1580 } SPY_INSTANCE;
1583 /***********************************************************************
1584 * SPY_GetMsgInternal
1586 static const char *SPY_GetMsgInternal( UINT msg, BOOL support_common_clts )
1588 static char msg_buffer[20];
1590 if (msg <= SPY_MAX_MSGNUM)
1592 if (!MessageTypeNames[msg]) return "???";
1593 return MessageTypeNames[msg];
1596 if (msg >= LVM_FIRST && msg <= LVM_FIRST + SPY_MAX_LVMMSGNUM)
1598 if (!LVMMessageTypeNames[msg-LVM_FIRST]) return "LVM_?";
1599 return LVMMessageTypeNames[msg-LVM_FIRST];
1602 if (msg >= TV_FIRST && msg <= TV_FIRST + SPY_MAX_TVMSGNUM)
1604 if (!TVMessageTypeNames[msg-TV_FIRST]) return "TV_?";
1605 return TVMessageTypeNames[msg-TV_FIRST];
1608 if (msg >= HDM_FIRST && msg <= HDM_FIRST + SPY_MAX_HDMMSGNUM)
1610 if (!HDMMessageTypeNames[msg-HDM_FIRST]) return "HDM_?";
1611 return HDMMessageTypeNames[msg-HDM_FIRST];
1614 if (msg >= TCM_FIRST && msg <= TCM_FIRST + SPY_MAX_TCMMSGNUM)
1616 if (!TCMMessageTypeNames[msg-TCM_FIRST]) return "TCM_?";
1617 return TCMMessageTypeNames[msg-TCM_FIRST];
1620 if (msg >= PGM_FIRST && msg <= PGM_FIRST + SPY_MAX_PGMMSGNUM)
1622 if (!PGMMessageTypeNames[msg-PGM_FIRST]) return "PGM_?";
1623 return PGMMessageTypeNames[msg-PGM_FIRST];
1626 if (msg >= CCM_FIRST && msg <= CCM_FIRST + SPY_MAX_CCMMSGNUM)
1628 if (!CCMMessageTypeNames[msg-CCM_FIRST]) return "???";
1629 return CCMMessageTypeNames[msg-CCM_FIRST];
1632 sprintf( msg_buffer, "WM_USER+%04x", msg - WM_USER );
1633 return msg_buffer;
1636 /***********************************************************************
1637 * SPY_Bsearch_Msg
1639 const USER_MSG *SPY_Bsearch_Msg( const USER_MSG *first, const USER_MSG *last, UINT code)
1641 INT count;
1642 const USER_MSG *test;
1644 while (last >= first) {
1645 count = 1 + last - first;
1646 if (count < 3) {
1647 /* TRACE("code=%d, f-value=%d, f-name=%s, l-value=%d, l-name=%s, l-len=%d,\n",
1648 code, first->value, first->name, last->value, last->name, last->len); */
1649 if (first->value == code) return first;
1650 if (last->value == code) return last;
1651 return NULL;
1653 count = count / 2;
1654 test = first + count;
1655 /* TRACE("first=%p, last=%p, test=%p, t-value=%d, code=%d, count=%d\n",
1656 first, last, test, test->value, code, count); */
1657 if (test->value == code) return test;
1658 if (test->value > code)
1659 last = test - 1;
1660 else
1661 first = test + 1;
1663 return NULL;
1666 /***********************************************************************
1667 * SPY_GetMsgStuff
1669 * Get message name and other information for dumping
1671 static void SPY_GetMsgStuff( SPY_INSTANCE *sp_e )
1673 const USER_MSG *p;
1675 sp_e->msg_name[sizeof(sp_e->msg_name)-1] = 0;
1676 strncpy (sp_e->msg_name, SPY_GetMsgInternal( sp_e->msgnum, TRUE ),
1677 sizeof(sp_e->msg_name)-1);
1679 sp_e->data_len = 0;
1680 if (strncmp(sp_e->msg_name, "WM_USER+", 8) == 0) {
1681 INT i = 0;
1683 /* TRACE("looking class %s\n", sp_e->wnd_class); */
1685 while (cc_array[i].classname &&
1686 strcmp(cc_array[i].classname, sp_e->wnd_class) !=0) i++;
1688 if (!cc_array[i].classname) return;
1689 /* TRACE("process class %s, first %p, last %p\n",
1690 cc_array[i].classname, cc_array[i].classmsg,
1691 cc_array[i].lastmsg); */
1692 p = SPY_Bsearch_Msg (cc_array[i].classmsg, cc_array[i].lastmsg,
1693 sp_e->msgnum);
1694 if (p) {
1695 strncpy (sp_e->msg_name, p->name, sizeof(sp_e->msg_name)-1);
1696 sp_e->data_len = p->len;
1701 /***********************************************************************
1702 * SPY_GetMsgName
1704 * **** External function ****
1706 * Get message name
1708 const char *SPY_GetMsgName( UINT msg )
1710 return SPY_GetMsgInternal( msg, FALSE );
1713 /***********************************************************************
1714 * SPY_GetWndName
1716 * Sets the value of "wnd_name" and "wnd_class" members of the
1717 * instance structure.
1720 void SPY_GetWndName( SPY_INSTANCE *sp_e )
1722 WND* pWnd = WIN_FindWndPtr( sp_e->msg_hwnd );
1723 if( pWnd )
1725 LPSTR p = (LPSTR)&sp_e->wnd_name;
1726 LPSTR s = (LPSTR)&sp_e->wnd_name;
1727 char postfix;
1728 DWORD save_error;
1730 /* save and restore error code over the next call */
1731 save_error = GetLastError();
1732 GlobalGetAtomNameA((ATOM) GetClassWord(pWnd->hwndSelf, GCW_ATOM),
1733 (LPSTR)&sp_e->wnd_class,
1734 sizeof(sp_e->wnd_class)-1);
1735 SetLastError(save_error);
1737 if( pWnd->text && pWnd->text[0] != '\0' )
1739 LPWSTR src = pWnd->text;
1740 int n=sizeof(sp_e->wnd_name)-2;
1741 *(p++) = postfix = '\"';
1742 while ((n-- > 0) && *src) *p++ = *src++;
1744 else /* get class name */
1746 LPSTR src = (LPSTR)&sp_e->wnd_class;
1747 int n=sizeof(sp_e->wnd_name)-2;
1748 *(p++) = '{';
1749 while ((n-- > 0) && *src) *p++ = *src++;
1750 postfix='}';
1753 if( p-s >= sizeof(sp_e->wnd_name)-1 ) {
1754 p = s + sizeof(sp_e->wnd_name)-5;
1755 *(p++) = '.';
1756 *(p++) = '.';
1757 *(p++) = '.';
1759 *(p++) = postfix;
1760 *(p++) = '\0';
1761 WIN_ReleaseWndPtr(pWnd);
1764 else {strcpy( sp_e->wnd_name, "\"NULL\"" ); sp_e->wnd_class[0] = 0;}
1765 return;
1768 /***********************************************************************
1769 * SPY_GetVKeyName
1771 const char *SPY_GetVKeyName(WPARAM wParam)
1773 const char *vk_key_name;
1775 if(wParam <= SPY_MAX_VKKEYSNUM && VK_KeyNames[wParam])
1776 vk_key_name = VK_KeyNames[wParam];
1777 else
1778 vk_key_name = "VK_???";
1780 return vk_key_name;
1783 /***********************************************************************
1784 * SPY_Bsearch_Notify
1786 const SPY_NOTIFY *SPY_Bsearch_Notify( const SPY_NOTIFY *first, const SPY_NOTIFY *last, UINT code)
1788 INT count;
1789 const SPY_NOTIFY *test;
1791 while (last >= first) {
1792 count = 1 + last - first;
1793 if (count < 3) {
1794 /* TRACE("code=%d, f-value=%d, f-name=%s, l-value=%d, l-name=%s, l-len=%d,\n",
1795 code, first->value, first->name, last->value, last->name, last->len); */
1796 if (first->value == code) return first;
1797 if (last->value == code) return last;
1798 return NULL;
1800 count = count / 2;
1801 test = first + count;
1802 /* TRACE("first=%p, last=%p, test=%p, t-value=%d, code=%d, count=%d\n",
1803 first, last, test, test->value, code, count); */
1804 if (test->value == code) return test;
1805 if (test->value < code)
1806 last = test - 1;
1807 else
1808 first = test + 1;
1810 return NULL;
1813 /***********************************************************************
1814 * SPY_DumpMem
1816 void SPY_DumpMem (LPSTR header, UINT *q, INT len)
1818 int i;
1820 for(i=0; i<len-12; i+=16) {
1821 TRACE("%s [%04x] %08x %08x %08x %08x\n",
1822 header, i, *q, *(q+1), *(q+2), *(q+3));
1823 q += 4;
1825 switch (len - i) {
1826 case 12:
1827 TRACE("%s [%04x] %08x %08x %08x\n",
1828 header, i, *q, *(q+1), *(q+2));
1829 break;
1830 case 8:
1831 TRACE("%s [%04x] %08x %08x\n",
1832 header, i, *q, *(q+1));
1833 break;
1834 case 4:
1835 TRACE("%s [%04x] %08x\n",
1836 header, i, *q);
1837 break;
1838 default:
1839 break;
1843 /***********************************************************************
1844 * SPY_DumpStructure
1846 void SPY_DumpStructure (SPY_INSTANCE *sp_e, BOOL enter)
1848 switch (sp_e->msgnum)
1850 case WM_DRAWITEM:
1851 if (!enter) break;
1853 DRAWITEMSTRUCT *lpdis = (DRAWITEMSTRUCT*) sp_e->lParam;
1854 TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
1855 lpdis->CtlType, lpdis->CtlID);
1856 TRACE("itemID=0x%08x itemAction=0x%08x itemState=0x%08x\n",
1857 lpdis->itemID, lpdis->itemAction, lpdis->itemState);
1858 TRACE("hWnd=0x%04x hDC=0x%04x (%d,%d)-(%d,%d) itemData=0x%08lx\n",
1859 lpdis->hwndItem, lpdis->hDC, lpdis->rcItem.left,
1860 lpdis->rcItem.top, lpdis->rcItem.right,
1861 lpdis->rcItem.bottom, lpdis->itemData);
1863 break;
1864 case WM_MEASUREITEM:
1866 MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) sp_e->lParam;
1867 TRACE("MEASUREITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
1868 lpmis->CtlType, lpmis->CtlID);
1869 TRACE("itemID=0x%08x itemWidth=0x%08x itemHeight=0x%08x\n",
1870 lpmis->itemID, lpmis->itemWidth, lpmis->itemHeight);
1871 TRACE("itemData=0x%08lx\n", lpmis->itemData);
1873 break;
1874 case WM_WINDOWPOSCHANGED:
1875 if (!enter) break;
1876 case WM_WINDOWPOSCHANGING:
1878 WINDOWPOS *lpwp = (WINDOWPOS *)sp_e->lParam;
1879 TRACE("WINDOWPOS hwnd=0x%04x, after=0x%04x, at (%d,%d) w=%d h=%d, flags=0x%08x\n",
1880 lpwp->hwnd, lpwp->hwndInsertAfter, lpwp->x, lpwp->y,
1881 lpwp->cx, lpwp->cy, lpwp->flags);
1883 break;
1884 case WM_STYLECHANGED:
1885 if (!enter) break;
1886 case WM_STYLECHANGING:
1888 LPSTYLESTRUCT ss = (LPSTYLESTRUCT) sp_e->lParam;
1889 TRACE("STYLESTRUCT: StyleOld=0x%08lx, StyleNew=0x%08lx\n",
1890 ss->styleOld, ss->styleNew);
1892 break;
1893 case WM_NCCALCSIZE:
1895 RECT *rc = (RECT *)sp_e->lParam;
1896 TRACE("Rect (%d,%d)-(%d,%d)\n",
1897 rc->left, rc->top, rc->right, rc->bottom);
1899 break;
1900 case WM_NOTIFY:
1901 if (!enter) break;
1903 NMHDR * pnmh = (NMHDR*) sp_e->lParam;
1904 UINT *q;
1905 const SPY_NOTIFY *p;
1907 p = SPY_Bsearch_Notify (&spnfy_array[0], end_spnfy_array,
1908 pnmh->code);
1909 if (p) {
1910 TRACE("NMHDR hwndFrom=0x%08x idFrom=0x%08x code=%s<0x%08x>, extra=0x%x\n",
1911 pnmh->hwndFrom, pnmh->idFrom, p->name, pnmh->code, p->len);
1912 if (p->len > 0) {
1913 q = (UINT *)(pnmh + 1);
1914 SPY_DumpMem ("NM extra", q, (INT)p->len);
1917 else
1918 TRACE("NMHDR hwndFrom=0x%08x idFrom=0x%08x code=0x%08x\n",
1919 pnmh->hwndFrom, pnmh->idFrom, pnmh->code);
1921 default:
1922 if (sp_e->data_len > 0)
1923 SPY_DumpMem ("MSG lParam", (UINT *)sp_e->lParam, sp_e->data_len);
1924 break;
1928 /***********************************************************************
1929 * SPY_EnterMessage
1931 void SPY_EnterMessage( INT iFlag, HWND hWnd, UINT msg,
1932 WPARAM wParam, LPARAM lParam )
1934 SPY_INSTANCE sp_e;
1936 if (!TRACE_ON(message) || SPY_EXCLUDE(msg)) return;
1938 sp_e.msgnum = msg;
1939 sp_e.msg_hwnd = hWnd;
1940 sp_e.lParam = lParam;
1941 sp_e.wParam = wParam;
1942 SPY_GetWndName(&sp_e);
1943 SPY_GetMsgStuff(&sp_e);
1945 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
1946 switch(iFlag)
1948 case SPY_DISPATCHMESSAGE16:
1949 TRACE("%*s(%04x) %-16s message [%04x] %s dispatched wp=%04x lp=%08lx\n",
1950 SPY_IndentLevel, "", hWnd, sp_e.wnd_name, msg,
1951 sp_e.msg_name, wParam, lParam);
1952 break;
1954 case SPY_DISPATCHMESSAGE:
1955 TRACE("%*s(%08x) %-16s message [%04x] %s dispatched wp=%08x lp=%08lx\n",
1956 SPY_IndentLevel, "", hWnd, sp_e.wnd_name, msg,
1957 sp_e.msg_name, wParam, lParam);
1958 break;
1960 case SPY_SENDMESSAGE16:
1961 case SPY_SENDMESSAGE:
1963 char taskName[30];
1964 HTASK16 hTask = GetWindowTask16(hWnd);
1966 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
1967 else if (!hTask) strcpy( taskName, "Wine" );
1968 else
1970 sprintf( taskName, "task %04x ???", hTask );
1971 GetModuleName16( hTask, taskName + 10, sizeof(taskName) - 10 );
1974 if (iFlag == SPY_SENDMESSAGE16)
1975 TRACE("%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
1976 SPY_IndentLevel, "", hWnd, sp_e.wnd_name, msg,
1977 sp_e.msg_name, taskName, wParam, lParam );
1978 else
1979 { TRACE("%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
1980 SPY_IndentLevel, "", hWnd, sp_e.wnd_name, msg,
1981 sp_e.msg_name, taskName, wParam, lParam );
1982 SPY_DumpStructure(&sp_e, TRUE);
1985 break;
1987 case SPY_DEFWNDPROC16:
1988 if( SPY_ExcludeDWP ) return;
1989 TRACE("%*s(%04x) DefWindowProc16: %s [%04x] wp=%04x lp=%08lx\n",
1990 SPY_IndentLevel, "", hWnd, sp_e.msg_name,
1991 msg, wParam, lParam );
1992 break;
1994 case SPY_DEFWNDPROC:
1995 if( SPY_ExcludeDWP ) return;
1996 TRACE("%*s(%08x) DefWindowProc32: %s [%04x] wp=%08x lp=%08lx\n",
1997 SPY_IndentLevel, "", hWnd, sp_e.msg_name,
1998 msg, wParam, lParam );
1999 break;
2001 SPY_IndentLevel += SPY_INDENT_UNIT;
2005 /***********************************************************************
2006 * SPY_ExitMessage
2008 void SPY_ExitMessage( INT iFlag, HWND hWnd, UINT msg, LRESULT lReturn,
2009 WPARAM wParam, LPARAM lParam )
2011 SPY_INSTANCE sp_e;
2013 if (!TRACE_ON(message) || SPY_EXCLUDE(msg) ||
2014 (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND)) )
2015 return;
2017 sp_e.msgnum = msg;
2018 sp_e.msg_hwnd = hWnd;
2019 sp_e.lParam = lParam;
2020 sp_e.wParam = wParam;
2021 SPY_GetWndName(&sp_e);
2022 SPY_GetMsgStuff(&sp_e);
2024 if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
2026 switch(iFlag)
2028 case SPY_RESULT_DEFWND16:
2029 TRACE(" %*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
2030 SPY_IndentLevel, "", hWnd, sp_e.msg_name, msg, lReturn );
2031 break;
2033 case SPY_RESULT_DEFWND:
2034 TRACE(" %*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n",
2035 SPY_IndentLevel, "", hWnd, sp_e.msg_name, msg, lReturn );
2036 break;
2038 case SPY_RESULT_OK16:
2039 TRACE(" %*s(%04x) %-16s message [%04x] %s returned %08lx\n",
2040 SPY_IndentLevel, "", hWnd, sp_e.wnd_name, msg,
2041 sp_e.msg_name, lReturn );
2042 break;
2044 case SPY_RESULT_OK:
2045 TRACE(" %*s(%08x) %-16s message [%04x] %s returned %08lx\n",
2046 SPY_IndentLevel, "", hWnd, sp_e.wnd_name, msg,
2047 sp_e.msg_name, lReturn );
2048 SPY_DumpStructure(&sp_e, FALSE);
2049 break;
2051 case SPY_RESULT_INVALIDHWND16:
2052 WARN(" %*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
2053 SPY_IndentLevel, "", hWnd, sp_e.wnd_name, msg,
2054 sp_e.msg_name );
2055 break;
2057 case SPY_RESULT_INVALIDHWND:
2058 WARN(" %*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
2059 SPY_IndentLevel, "", hWnd, sp_e.wnd_name, msg,
2060 sp_e.msg_name );
2061 break;
2066 /***********************************************************************
2067 * SPY_Init
2069 int SPY_Init(void)
2071 int i, j;
2072 char buffer[1024];
2073 const SPY_NOTIFY *p;
2074 const USER_MSG *q;
2075 HKEY hkey;
2077 if (!TRACE_ON(message)) return TRUE;
2079 buffer[0] = 0;
2080 if(!RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Spy", &hkey))
2082 DWORD type, count = sizeof(buffer);
2083 RegQueryValueExA(hkey, "Include", 0, &type, buffer, &count);
2084 RegCloseKey(hkey);
2086 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
2088 TRACE("Include=%s\n", buffer );
2089 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
2090 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
2093 buffer[0] = 0;
2094 if(!RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Spy", &hkey))
2096 DWORD type, count = sizeof(buffer);
2097 RegQueryValueExA(hkey, "Exclude", 0, &type, buffer, &count);
2098 RegCloseKey(hkey);
2100 if (buffer[0])
2102 TRACE("Exclude=%s\n", buffer );
2103 if (!strcmp( buffer, "EXCLUDEALL" ))
2104 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
2105 else
2106 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
2107 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
2110 SPY_ExcludeDWP = 0;
2111 if(!RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Spy", &hkey))
2113 DWORD type, count = sizeof(buffer);
2114 if(!RegQueryValueExA(hkey, "ExcludeDWP", 0, &type, buffer, &count))
2115 SPY_ExcludeDWP = atoi(buffer);
2116 RegCloseKey(hkey);
2119 /* find last good entry in spy notify array and save addr for b-search */
2120 p = &spnfy_array[0];
2121 j = 0xffffffff;
2122 while (p->name) {
2123 if ((UINT)p->value > (UINT)j) {
2124 ERR("Notify message array out of order\n");
2125 ERR(" between values [%08x] %s and [%08x] %s\n",
2126 j, (p-1)->name, p->value, p->name);
2127 break;
2129 j = p->value;
2130 p++;
2132 p--;
2133 end_spnfy_array = p;
2135 /* find last good entry in each common control message array
2136 * and save addr for b-search.
2138 i = 0;
2139 while (cc_array[i].classname) {
2141 j = 0x0400; /* minimum entry in array */
2142 q = cc_array[i].classmsg;
2143 while(q->name) {
2144 if (q->value <= j) {
2145 ERR("Class message array out of order for class ""%s""\n",
2146 cc_array[i].classname);
2147 ERR(" between values [%04x] %s and [%04x] %s\n",
2148 j, (q-1)->name, q->value, q->name);
2149 break;
2151 j = q->value;
2152 q++;
2154 q--;
2155 cc_array[i].lastmsg = (USER_MSG *)q;
2157 i++;
2160 return 1;