Added support for composite Unicode characters in MultiByteToWideChar
[wine/hacks.git] / windows / spy.c
blobfc55f3f826cfa57121bfd095043668c6ec1cadcd
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 "wine/winuser16.h"
14 #include "wine/winbase16.h"
15 #include "win.h"
16 #include "options.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_GETSEL32", /* 0x00b0 */
155 "EM_SETSEL32", /* 0x00b1 */
156 "EM_GETRECT32", /* 0x00b2 */
157 "EM_SETRECT32", /* 0x00b3 */
158 "EM_SETRECTNP32", /* 0x00b4 */
159 "EM_SCROLL32", /* 0x00b5 */
160 "EM_LINESCROLL32", /* 0x00b6 */
161 "EM_SCROLLCARET32", /* 0x00b7 */
162 "EM_GETMODIFY32", /* 0x00b8 */
163 "EM_SETMODIFY32", /* 0x00b9 */
164 "EM_GETLINECOUNT32", /* 0x00ba */
165 "EM_LINEINDEX32", /* 0x00bb */
166 "EM_SETHANDLE32", /* 0x00bc */
167 "EM_GETHANDLE32", /* 0x00bd */
168 "EM_GETTHUMB32", /* 0x00be */
169 NULL, /* 0x00bf */
171 NULL, /* 0x00c0 */
172 "EM_LINELENGTH32", /* 0x00c1 */
173 "EM_REPLACESEL32", /* 0x00c2 */
174 NULL, /* 0x00c3 */
175 "EM_GETLINE32", /* 0x00c4 */
176 "EM_LIMITTEXT32", /* 0x00c5 */
177 "EM_CANUNDO32", /* 0x00c6 */
178 "EM_UNDO32", /* 0x00c7 */
179 "EM_FMTLINES32", /* 0x00c8 */
180 "EM_LINEFROMCHAR32", /* 0x00c9 */
181 NULL, /* 0x00ca */
182 "EM_SETTABSTOPS32", /* 0x00cb */
183 "EM_SETPASSWORDCHAR32", /* 0x00cc */
184 "EM_EMPTYUNDOBUFFER32", /* 0x00cd */
185 "EM_GETFIRSTVISIBLELINE32", /* 0x00ce */
186 "EM_SETREADONLY32", /* 0x00cf */
188 "EM_SETWORDBREAKPROC32", /* 0x00d0 */
189 "EM_GETWORDBREAKPROC32", /* 0x00d1 */
190 "EM_GETPASSWORDCHAR32", /* 0x00d2 */
191 "EM_SETMARGINS32", /* 0x00d3 */
192 "EM_GETMARGINS32", /* 0x00d4 */
193 "EM_GETLIMITTEXT32", /* 0x00d5 */
194 "EM_POSFROMCHAR32", /* 0x00d6 */
195 "EM_CHARFROMPOS32", /* 0x00d7 */
196 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
198 /* 0x00E0 - Win32 Scrollbars */
199 "SBM_SETPOS32", /* 0x00e0 */
200 "SBM_GETPOS32", /* 0x00e1 */
201 "SBM_SETRANGE32", /* 0x00e2 */
202 "SBM_GETRANGE32", /* 0x00e3 */
203 "SBM_ENABLE_ARROWS32", /* 0x00e4 */
204 NULL,
205 "SBM_SETRANGEREDRAW32", /* 0x00e6 */
206 NULL, NULL,
207 "SBM_SETSCROLLINFO32", /* 0x00e9 */
208 "SBM_GETSCROLLINFO32", /* 0x00ea */
209 NULL, NULL, NULL, NULL, NULL,
211 /* 0x00F0 - Win32 Buttons */
212 "BM_GETCHECK32", /* 0x00f0 */
213 "BM_SETCHECK32", /* 0x00f1 */
214 "BM_GETSTATE32", /* 0x00f2 */
215 "BM_SETSTATE32", /* 0x00f3 */
216 "BM_SETSTYLE32", /* 0x00f4 */
217 "BM_CLICK32", /* 0x00f5 */
218 "BM_GETIMAGE32", /* 0x00f6 */
219 "BM_SETIMAGE32", /* 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_GETEDITSEL32", /* 0x0140 */
270 "CB_LIMITTEXT32", /* 0x0141 */
271 "CB_SETEDITSEL32", /* 0x0142 */
272 "CB_ADDSTRING32", /* 0x0143 */
273 "CB_DELETESTRING32", /* 0x0144 */
274 "CB_DIR32", /* 0x0145 */
275 "CB_GETCOUNT32", /* 0x0146 */
276 "CB_GETCURSEL32", /* 0x0147 */
277 "CB_GETLBTEXT32", /* 0x0148 */
278 "CB_GETLBTEXTLEN32", /* 0x0149 */
279 "CB_INSERTSTRING32", /* 0x014a */
280 "CB_RESETCONTENT32", /* 0x014b */
281 "CB_FINDSTRING32", /* 0x014c */
282 "CB_SELECTSTRING32", /* 0x014d */
283 "CB_SETCURSEL32", /* 0x014e */
284 "CB_SHOWDROPDOWN32", /* 0x014f */
286 "CB_GETITEMDATA32", /* 0x0150 */
287 "CB_SETITEMDATA32", /* 0x0151 */
288 "CB_GETDROPPEDCONTROLRECT32",/* 0x0152 */
289 "CB_SETITEMHEIGHT32", /* 0x0153 */
290 "CB_GETITEMHEIGHT32", /* 0x0154 */
291 "CB_SETEXTENDEDUI32", /* 0x0155 */
292 "CB_GETEXTENDEDUI32", /* 0x0156 */
293 "CB_GETDROPPEDSTATE32", /* 0x0157 */
294 "CB_FINDSTRINGEXACT32", /* 0x0158 */
295 "CB_SETLOCALE32", /* 0x0159 */
296 "CB_GETLOCALE32", /* 0x015a */
297 "CB_GETTOPINDEX32", /* 0x015b */
298 "CB_SETTOPINDEX32", /* 0x015c */
299 "CB_GETHORIZONTALEXTENT32", /* 0x015d */
300 "CB_SETHORIZONTALEXTENT32", /* 0x015e */
301 "CB_GETDROPPEDWIDTH32", /* 0x015f */
303 "CB_SETDROPPEDWIDTH32", /* 0x0160 */
304 "CB_INITSTORAGE32", /* 0x0161 */
305 NULL, NULL, NULL, NULL, NULL, NULL,
306 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
308 /* 0x0170 - Win32 Static controls */
309 "STM_SETICON32", /* 0x0170 */
310 "STM_GETICON32", /* 0x0171 */
311 "STM_SETIMAGE32", /* 0x0172 */
312 "STM_GETIMAGE32", /* 0x0173 */
313 NULL, NULL, NULL, NULL,
314 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
316 /* 0x0180 - Win32 Listboxes */
317 "LB_ADDSTRING32", /* 0x0180 */
318 "LB_INSERTSTRING32", /* 0x0181 */
319 "LB_DELETESTRING32", /* 0x0182 */
320 "LB_SELITEMRANGEEX32", /* 0x0183 */
321 "LB_RESETCONTENT32", /* 0x0184 */
322 "LB_SETSEL32", /* 0x0185 */
323 "LB_SETCURSEL32", /* 0x0186 */
324 "LB_GETSEL32", /* 0x0187 */
325 "LB_GETCURSEL32", /* 0x0188 */
326 "LB_GETTEXT32", /* 0x0189 */
327 "LB_GETTEXTLEN32", /* 0x018a */
328 "LB_GETCOUNT32", /* 0x018b */
329 "LB_SELECTSTRING32", /* 0x018c */
330 "LB_DIR32", /* 0x018d */
331 "LB_GETTOPINDEX32", /* 0x018e */
332 "LB_FINDSTRING32", /* 0x018f */
334 "LB_GETSELCOUNT32", /* 0x0190 */
335 "LB_GETSELITEMS32", /* 0x0191 */
336 "LB_SETTABSTOPS32", /* 0x0192 */
337 "LB_GETHORIZONTALEXTENT32", /* 0x0193 */
338 "LB_SETHORIZONTALEXTENT32", /* 0x0194 */
339 "LB_SETCOLUMNWIDTH32", /* 0x0195 */
340 "LB_ADDFILE32", /* 0x0196 */
341 "LB_SETTOPINDEX32", /* 0x0197 */
342 "LB_GETITEMRECT32", /* 0x0198 */
343 "LB_GETITEMDATA32", /* 0x0199 */
344 "LB_SETITEMDATA32", /* 0x019a */
345 "LB_SELITEMRANGE32", /* 0x019b */
346 "LB_SETANCHORINDEX32", /* 0x019c */
347 "LB_GETANCHORINDEX32", /* 0x019d */
348 "LB_SETCARETINDEX32", /* 0x019e */
349 "LB_GETCARETINDEX32", /* 0x019f */
351 "LB_SETITEMHEIGHT32", /* 0x01a0 */
352 "LB_GETITEMHEIGHT32", /* 0x01a1 */
353 "LB_FINDSTRINGEXACT32", /* 0x01a2 */
354 "LB_CARETON32", /* 0x01a3 */
355 "LB_CARETOFF32", /* 0x01a4 */
356 "LB_SETLOCALE32", /* 0x01a5 */
357 "LB_GETLOCALE32", /* 0x01a6 */
358 "LB_SETCOUNT32", /* 0x01a7 */
359 "LB_INITSTORAGE32", /* 0x01a8 */
360 "LB_ITEMFROMPOINT32", /* 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 139
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 "LVM_CREATEDRAGIMAGE",
644 "LVM_GETVIEWRECT",
645 "LVM_GETTEXTCOLOR",
646 "LVM_SETTEXTCOLOR",
647 "LVM_GETTEXTBKCOLOR",
648 "LVM_SETTEXTBKCOLOR",
649 "LVM_GETTOPINDEX",
650 "LVM_GETCOUNTPERPAGE",
651 "LVM_GETORIGIN",
652 "LVM_UPDATE",
653 "LVM_SETITEMSTATE",
654 "LVM_GETITEMSTATE",
655 "LVM_GETITEMTEXTA",
656 "LVM_SETITEMTEXTA",
657 "LVM_SETITEMCOUNT",
658 "LVM_SORTITEMS",
659 "LVM_SETITEMPOSITION32",
660 "LVM_GETSELECTEDCOUNT",
661 "LVM_GETITEMSPACING",
662 "LVM_GETISEARCHSTRINGA",
663 "LVM_SETICONSPACING",
664 "LVM_SETEXTENDEDLISTVIEWSTYLE",
665 "LVM_GETEXTENDEDLISTVIEWSTYLE",
666 "LVM_GETSUBITEMRECT",
667 "LVM_SUBITEMHITTEST",
668 "LVM_SETCOLUMNORDERARRAY",
669 "LVM_GETCOLUMNORDERARRAY",
670 "LVM_SETHOTITEM",
671 "LVM_GETHOTITEM",
672 "LVM_SETHOTCURSOR",
673 "LVM_GETHOTCURSOR",
674 "LVM_APPROXIMATEVIEWRECT",
675 "LVM_SETWORKAREAS",
676 "LVM_GETSELECTIONMARK",
677 "LVM_SETSELECTIONMARK",
678 "LVM_SETBKIMAGEA",
679 "LVM_GETBKIMAGEA",
680 "LVM_GETWORKAREAS",
681 "LVM_SETHOVERTIME",
682 "LVM_GETHOVERTIME",
683 "LVM_GETNUMBEROFWORKAREAS",
684 "LVM_SETTOOLTIPS",
685 "LVM_GETITEMW",
686 "LVM_SETITEMW",
687 "LVM_INSERTITEMW",
688 "LVM_GETTOOLTIPS",
689 NULL,
690 NULL,
691 NULL,
692 NULL,
693 "LVM_FINDITEMW",
694 NULL,
695 NULL,
696 NULL,
697 "LVM_GETSTRINGWIDTHW",
698 NULL,
699 NULL,
700 NULL,
701 NULL,
702 NULL,
703 NULL,
704 NULL,
705 "LVM_GETCOLUMNW",
706 "LVM_SETCOLUMNW",
707 "LVM_INSERTCOLUMNW",
708 NULL,
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 "LVM_GETITEMTEXTW",
726 "LVM_SETITEMTEXTW",
727 "LVM_GETISEARCHSTRINGW",
728 "LVM_EDITLABELW",
729 NULL,
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 "LVM_SETBKIMAGEW",
750 "LVM_GETBKIMAGEW" /* 0x108B */
753 #define SPY_MAX_CCMMSGNUM 6
754 static const char * const CCMMessageTypeNames[SPY_MAX_CCMMSGNUM + 1] =
756 NULL, /* 0x2000 */
757 "CCM_SETBKCOLOR",
758 "CCM_SETCOLORSCHEME",
759 "CCM_GETCOLORSCHEME",
760 "CCM_GETDROPTARGET",
761 "CCM_SETUNICODEFORMAT",
762 "CCM_GETUNICODEFORMAT"
765 /* Virtual key names */
766 #define SPY_MAX_VKKEYSNUM 255
767 static const char * const VK_KeyNames[SPY_MAX_VKKEYSNUM + 1] =
769 NULL, /* 0x00 */
770 "VK_LBUTTON", /* 0x01 */
771 "VK_RBUTTON", /* 0x02 */
772 "VK_CANCEL", /* 0x03 */
773 "VK_MBUTTON", /* 0x04 */
774 NULL, /* 0x05 */
775 NULL, /* 0x06 */
776 NULL, /* 0x07 */
777 "VK_BACK", /* 0x08 */
778 "VK_TAB", /* 0x09 */
779 NULL, /* 0x0A */
780 NULL, /* 0x0B */
781 "VK_CLEAR", /* 0x0C */
782 "VK_RETURN", /* 0x0D */
783 NULL, /* 0x0E */
784 NULL, /* 0x0F */
785 "VK_SHIFT", /* 0x10 */
786 "VK_CONTROL", /* 0x11 */
787 "VK_MENU", /* 0x12 */
788 "VK_PAUSE", /* 0x13 */
789 "VK_CAPITAL", /* 0x14 */
790 NULL, /* 0x15 */
791 NULL, /* 0x16 */
792 NULL, /* 0x17 */
793 NULL, /* 0x18 */
794 NULL, /* 0x19 */
795 NULL, /* 0x1A */
796 "VK_ESCAPE", /* 0x1B */
797 NULL, /* 0x1C */
798 NULL, /* 0x1D */
799 NULL, /* 0x1E */
800 NULL, /* 0x1F */
801 "VK_SPACE", /* 0x20 */
802 "VK_PRIOR", /* 0x21 */
803 "VK_NEXT", /* 0x22 */
804 "VK_END", /* 0x23 */
805 "VK_HOME", /* 0x24 */
806 "VK_LEFT", /* 0x25 */
807 "VK_UP", /* 0x26 */
808 "VK_RIGHT", /* 0x27 */
809 "VK_DOWN", /* 0x28 */
810 "VK_SELECT", /* 0x29 */
811 "VK_PRINT", /* 0x2A */
812 "VK_EXECUTE", /* 0x2B */
813 "VK_SNAPSHOT", /* 0x2C */
814 "VK_INSERT", /* 0x2D */
815 "VK_DELETE", /* 0x2E */
816 "VK_HELP", /* 0x2F */
817 "VK_0", /* 0x30 */
818 "VK_1", /* 0x31 */
819 "VK_2", /* 0x32 */
820 "VK_3", /* 0x33 */
821 "VK_4", /* 0x34 */
822 "VK_5", /* 0x35 */
823 "VK_6", /* 0x36 */
824 "VK_7", /* 0x37 */
825 "VK_8", /* 0x38 */
826 "VK_9", /* 0x39 */
827 NULL, /* 0x3A */
828 NULL, /* 0x3B */
829 NULL, /* 0x3C */
830 NULL, /* 0x3D */
831 NULL, /* 0x3E */
832 NULL, /* 0x3F */
833 NULL, /* 0x40 */
834 "VK_A", /* 0x41 */
835 "VK_B", /* 0x42 */
836 "VK_C", /* 0x43 */
837 "VK_D", /* 0x44 */
838 "VK_E", /* 0x45 */
839 "VK_F", /* 0x46 */
840 "VK_G", /* 0x47 */
841 "VK_H", /* 0x48 */
842 "VK_I", /* 0x49 */
843 "VK_J", /* 0x4A */
844 "VK_K", /* 0x4B */
845 "VK_L", /* 0x4C */
846 "VK_M", /* 0x4D */
847 "VK_N", /* 0x4E */
848 "VK_O", /* 0x4F */
849 "VK_P", /* 0x50 */
850 "VK_Q", /* 0x51 */
851 "VK_R", /* 0x52 */
852 "VK_S", /* 0x53 */
853 "VK_T", /* 0x54 */
854 "VK_U", /* 0x55 */
855 "VK_V", /* 0x56 */
856 "VK_W", /* 0x57 */
857 "VK_X", /* 0x58 */
858 "VK_Y", /* 0x59 */
859 "VK_Z", /* 0x5A */
860 "VK_LWIN", /* 0x5B */
861 "VK_RWIN", /* 0x5C */
862 "VK_APPS", /* 0x5D */
863 NULL, /* 0x5E */
864 NULL, /* 0x5F */
865 "VK_NUMPAD0", /* 0x60 */
866 "VK_NUMPAD1", /* 0x61 */
867 "VK_NUMPAD2", /* 0x62 */
868 "VK_NUMPAD3", /* 0x63 */
869 "VK_NUMPAD4", /* 0x64 */
870 "VK_NUMPAD5", /* 0x65 */
871 "VK_NUMPAD6", /* 0x66 */
872 "VK_NUMPAD7", /* 0x67 */
873 "VK_NUMPAD8", /* 0x68 */
874 "VK_NUMPAD9", /* 0x69 */
875 "VK_MULTIPLY", /* 0x6A */
876 "VK_ADD", /* 0x6B */
877 "VK_SEPARATOR", /* 0x6C */
878 "VK_SUBTRACT", /* 0x6D */
879 "VK_DECIMAL", /* 0x6E */
880 "VK_DIVIDE", /* 0x6F */
881 "VK_F1", /* 0x70 */
882 "VK_F2", /* 0x71 */
883 "VK_F3", /* 0x72 */
884 "VK_F4", /* 0x73 */
885 "VK_F5", /* 0x74 */
886 "VK_F6", /* 0x75 */
887 "VK_F7", /* 0x76 */
888 "VK_F8", /* 0x77 */
889 "VK_F9", /* 0x78 */
890 "VK_F10", /* 0x79 */
891 "VK_F11", /* 0x7A */
892 "VK_F12", /* 0x7B */
893 "VK_F13", /* 0x7C */
894 "VK_F14", /* 0x7D */
895 "VK_F15", /* 0x7E */
896 "VK_F16", /* 0x7F */
897 "VK_F17", /* 0x80 */
898 "VK_F18", /* 0x81 */
899 "VK_F19", /* 0x82 */
900 "VK_F20", /* 0x83 */
901 "VK_F21", /* 0x84 */
902 "VK_F22", /* 0x85 */
903 "VK_F23", /* 0x86 */
904 "VK_F24", /* 0x87 */
905 NULL, /* 0x88 */
906 NULL, /* 0x89 */
907 NULL, /* 0x8A */
908 NULL, /* 0x8B */
909 NULL, /* 0x8C */
910 NULL, /* 0x8D */
911 NULL, /* 0x8E */
912 NULL, /* 0x8F */
913 "VK_NUMLOCK", /* 0x90 */
914 "VK_SCROLL", /* 0x91 */
915 NULL, /* 0x92 */
916 NULL, /* 0x93 */
917 NULL, /* 0x94 */
918 NULL, /* 0x95 */
919 NULL, /* 0x96 */
920 NULL, /* 0x97 */
921 NULL, /* 0x98 */
922 NULL, /* 0x99 */
923 NULL, /* 0x9A */
924 NULL, /* 0x9B */
925 NULL, /* 0x9C */
926 NULL, /* 0x9D */
927 NULL, /* 0x9E */
928 NULL, /* 0x9F */
929 "VK_LSHIFT", /* 0xA0 */
930 "VK_RSHIFT", /* 0xA1 */
931 "VK_LCONTROL", /* 0xA2 */
932 "VK_RCONTROL", /* 0xA3 */
933 "VK_LMENU", /* 0xA4 */
934 "VK_RMENU", /* 0xA5 */
935 NULL, /* 0xA6 */
936 NULL, /* 0xA7 */
937 NULL, /* 0xA8 */
938 NULL, /* 0xA9 */
939 NULL, /* 0xAA */
940 NULL, /* 0xAB */
941 NULL, /* 0xAC */
942 NULL, /* 0xAD */
943 NULL, /* 0xAE */
944 NULL, /* 0xAF */
945 NULL, /* 0xB0 */
946 NULL, /* 0xB1 */
947 NULL, /* 0xB2 */
948 NULL, /* 0xB3 */
949 NULL, /* 0xB4 */
950 NULL, /* 0xB5 */
951 NULL, /* 0xB6 */
952 NULL, /* 0xB7 */
953 NULL, /* 0xB8 */
954 NULL, /* 0xB9 */
955 "VK_OEM_1", /* 0xBA */
956 "VK_OEM_PLUS", /* 0xBB */
957 "VK_OEM_COMMA", /* 0xBC */
958 "VK_OEM_MINUS", /* 0xBD */
959 "VK_OEM_PERIOD", /* 0xBE */
960 "VK_OEM_2", /* 0xBF */
961 "VK_OEM_3", /* 0xC0 */
962 NULL, /* 0xC1 */
963 NULL, /* 0xC2 */
964 NULL, /* 0xC3 */
965 NULL, /* 0xC4 */
966 NULL, /* 0xC5 */
967 NULL, /* 0xC6 */
968 NULL, /* 0xC7 */
969 NULL, /* 0xC8 */
970 NULL, /* 0xC9 */
971 NULL, /* 0xCA */
972 NULL, /* 0xCB */
973 NULL, /* 0xCC */
974 NULL, /* 0xCD */
975 NULL, /* 0xCE */
976 NULL, /* 0xCF */
977 NULL, /* 0xD0 */
978 NULL, /* 0xD1 */
979 NULL, /* 0xD2 */
980 NULL, /* 0xD3 */
981 NULL, /* 0xD4 */
982 NULL, /* 0xD5 */
983 NULL, /* 0xD6 */
984 NULL, /* 0xD7 */
985 NULL, /* 0xD8 */
986 NULL, /* 0xD9 */
987 NULL, /* 0xDA */
988 "VK_OEM_4", /* 0xDB */
989 "VK_OEM_5", /* 0xDC */
990 "VK_OEM_6", /* 0xDD */
991 "VK_OEM_7", /* 0xDE */
992 "VK_OEM_8", /* 0xDF */
993 NULL, /* 0xE0 */
994 "VK_OEM_AX", /* 0xE1 */
995 "VK_OEM_102", /* 0xE2 */
996 "VK_ICO_HELP", /* 0xE3 */
997 "VK_ICO_00", /* 0xE4 */
998 "VK_PROCESSKEY", /* 0xE5 */
999 NULL, /* 0xE6 */
1000 NULL, /* 0xE7 */
1001 NULL, /* 0xE8 */
1002 NULL, /* 0xE9 */
1003 NULL, /* 0xEA */
1004 NULL, /* 0xEB */
1005 NULL, /* 0xEC */
1006 NULL, /* 0xED */
1007 NULL, /* 0xEE */
1008 NULL, /* 0xEF */
1009 NULL, /* 0xF0 */
1010 NULL, /* 0xF1 */
1011 NULL, /* 0xF2 */
1012 NULL, /* 0xF3 */
1013 NULL, /* 0xF4 */
1014 NULL, /* 0xF5 */
1015 "VK_ATTN", /* 0xF6 */
1016 "VK_CRSEL", /* 0xF7 */
1017 "VK_EXSEL", /* 0xF8 */
1018 "VK_EREOF", /* 0xF9 */
1019 "VK_PLAY", /* 0xFA */
1020 "VK_ZOOM", /* 0xFB */
1021 "VK_NONAME", /* 0xFC */
1022 "VK_PA1", /* 0xFD */
1023 "VK_OEM_CLEAR", /* 0xFE */
1024 NULL /* 0xFF */
1028 /* WM_NOTIFY function codes display */
1030 typedef struct
1032 const char *name; /* name of notify message */
1033 UINT value; /* notify code value */
1034 UINT len; /* length of extra space to dump */
1035 } SPY_NOTIFY;
1037 #define SPNFY(a,b) { #a ,a,sizeof(b)-sizeof(NMHDR)}
1039 /* Array MUST be in descending order by the 'value' field */
1040 /* (since value is UNSIGNED, 0xffffffff is largest and */
1041 /* 0xfffffffe is smaller). A binary search is used to */
1042 /* locate the correct 'value'. */
1043 static const SPY_NOTIFY spnfy_array[] = {
1044 /* common 0U to 0U-99U */
1045 SPNFY(NM_OUTOFMEMORY, NMHDR),
1046 SPNFY(NM_CLICK, NMHDR),
1047 SPNFY(NM_DBLCLK, NMHDR),
1048 SPNFY(NM_RETURN, NMHDR),
1049 SPNFY(NM_RCLICK, NMHDR),
1050 SPNFY(NM_RDBLCLK, NMHDR),
1051 SPNFY(NM_SETFOCUS, NMHDR),
1052 SPNFY(NM_KILLFOCUS, NMHDR),
1053 SPNFY(NM_CUSTOMDRAW, NMCUSTOMDRAW),
1054 SPNFY(NM_HOVER, NMHDR),
1055 SPNFY(NM_NCHITTEST, NMHDR),
1056 SPNFY(NM_KEYDOWN, NMKEY),
1057 SPNFY(NM_RELEASEDCAPTURE, NMHDR),
1058 SPNFY(NM_SETCURSOR, NMMOUSE),
1059 SPNFY(NM_CHAR, NMCHAR),
1060 SPNFY(NM_TOOLTIPSCREATED, NMTOOLTIPSCREATED),
1061 /* Listview 0U-100U to 0U-199U */
1062 /* Header 0U-300U to 0U-399U */
1063 /* Treeview 0U-400U to 0U-499U */
1064 /* Tooltips 0U-520U to 0U-549U */
1065 /* Tab 0U-550U to 0U-580U */
1066 /* Common Dialog 0U-601U to 0U-699U */
1067 /* Toolbar 0U-700U to 0U-720U */
1068 SPNFY(TBN_GETBUTTONINFOA, NMTOOLBARA),
1069 SPNFY(TBN_BEGINDRAG, NMTOOLBARA),
1070 SPNFY(TBN_ENDDRAG, NMTOOLBARA),
1071 SPNFY(TBN_BEGINADJUST, NMHDR),
1072 SPNFY(TBN_ENDADJUST, NMHDR),
1073 SPNFY(TBN_RESET, NMHDR),
1074 SPNFY(TBN_QUERYINSERT, NMTOOLBARA),
1075 SPNFY(TBN_QUERYDELETE, NMTOOLBARA),
1076 SPNFY(TBN_TOOLBARCHANGE, NMHDR),
1077 SPNFY(TBN_CUSTHELP, NMHDR),
1078 SPNFY(TBN_DROPDOWN, NMTOOLBARA),
1079 SPNFY(TBN_GETOBJECT, NMOBJECTNOTIFY),
1080 SPNFY(TBN_HOTITEMCHANGE, NMHDR), /* NMTBHOTITEM), */
1081 SPNFY(TBN_DRAGOUT, NMTOOLBARA),
1082 SPNFY(TBN_DELETINGBUTTON, NMTOOLBARA),
1083 SPNFY(TBN_GETDISPINFOA, NMHDR), /* NMTBDISPINFO), */
1084 SPNFY(TBN_GETDISPINFOW, NMHDR), /* NMTBDISPINFO), */
1085 SPNFY(TBN_GETINFOTIPA, NMTBGETINFOTIPA),
1086 SPNFY(TBN_GETINFOTIPW, NMTBGETINFOTIPW),
1087 SPNFY(TBN_GETBUTTONINFOW, NMTOOLBARW),
1088 /* Up/Down 0U-721U to 0U-740U */
1089 /* Month Calendar 0U-750U to 0U-759U */
1090 /* Date/Time 0U-760U to 0U-799U */
1091 /* ComboBoxEx 0U-800U to 0U-830U */
1092 SPNFY(CBEN_GETDISPINFOA, NMHDR), /* NMCOMBOBOXEX), */
1093 SPNFY(CBEN_INSERTITEM, NMHDR), /* NMCOMBOBOXEX), */
1094 SPNFY(CBEN_DELETEITEM, NMHDR), /* NMCOMBOBOXEX), */
1095 SPNFY(CBEN_BEGINEDIT, NMHDR),
1096 SPNFY(CBEN_ENDEDITA, NMHDR), /* NMCBEENDEDITA), */
1097 SPNFY(CBEN_ENDEDITW, NMHDR), /* NMCBEENDEDITW), */
1098 SPNFY(CBEN_GETDISPINFOW, NMHDR), /* NMCOMBOBOXEXW), */
1099 SPNFY(CBEN_DRAGBEGINA, NMHDR), /* NMCBEDRAGBEGINA), */
1100 SPNFY(CBEN_DRAGBEGINW, NMHDR), /* NMCBEDRAGBEGINW), */
1101 /* Rebar 0U-831U to 0U-859U */
1102 SPNFY(RBN_HEIGHTCHANGE, NMHDR),
1103 SPNFY(RBN_GETOBJECT, NMOBJECTNOTIFY),
1104 SPNFY(RBN_LAYOUTCHANGED, NMHDR),
1105 SPNFY(RBN_AUTOSIZE, NMRBAUTOSIZE),
1106 SPNFY(RBN_BEGINDRAG, NMREBAR),
1107 SPNFY(RBN_ENDDRAG, NMREBAR),
1108 SPNFY(RBN_DELETINGBAND, NMREBAR),
1109 SPNFY(RBN_DELETEDBAND, NMREBAR),
1110 SPNFY(RBN_CHILDSIZE, NMREBARCHILDSIZE),
1111 /* IP Adderss 0U-860U to 0U-879U */
1112 /* Status bar 0U-880U to 0U-899U */
1113 /* Pager 0U-900U to 0U-950U */
1114 {0,0,0}};
1115 static const SPY_NOTIFY *end_spnfy_array; /* ptr to last good entry in array */
1116 #undef SPNFY
1119 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
1120 static BOOL16 SPY_ExcludeDWP = 0;
1121 static int SPY_IndentLevel = 0;
1123 #define SPY_EXCLUDE(msg) \
1124 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
1126 /***********************************************************************
1127 * SPY_GetMsgName
1129 const char *SPY_GetMsgName( UINT msg )
1131 static char msg_buffer[20];
1133 if (msg <= SPY_MAX_MSGNUM)
1135 if (!MessageTypeNames[msg]) return "???";
1136 return MessageTypeNames[msg];
1139 if (msg >= LVM_FIRST && msg <= LVM_FIRST + SPY_MAX_LVMMSGNUM)
1141 if (!LVMMessageTypeNames[msg-LVM_FIRST]) return "LVM_?";
1142 return LVMMessageTypeNames[msg-LVM_FIRST];
1145 if (msg >= CCM_FIRST && msg <= CCM_FIRST + SPY_MAX_CCMMSGNUM)
1147 if (!CCMMessageTypeNames[msg-CCM_FIRST]) return "???";
1148 return CCMMessageTypeNames[msg-CCM_FIRST];
1151 sprintf( msg_buffer, "WM_USER+%04x", msg - WM_USER );
1152 return msg_buffer;
1155 /***********************************************************************
1156 * SPY_GetWndName
1158 const char *SPY_GetWndName( HWND hwnd )
1160 static char wnd_buffer[16];
1162 WND* pWnd = WIN_FindWndPtr( hwnd );
1163 if( pWnd )
1165 INT n = sizeof(wnd_buffer) - 6;
1166 LPSTR p = wnd_buffer;
1167 char postfix;
1169 if( pWnd->text && pWnd->text[0] != '\0' )
1171 LPWSTR src = pWnd->text;
1172 *(p++) = postfix = '\"';
1173 while ((n-- > 1) && *src) *p++ = *src++;
1174 if( *src ) for( n = 0; n < 3; n++ ) *(p++)='.';
1176 else /* get class name */
1178 *(p++)='{';
1179 GlobalGetAtomNameA((ATOM) GetClassWord(pWnd->hwndSelf, GCW_ATOM), p, n + 1);
1180 p += strlen(p);
1181 postfix = '}';
1183 *(p++) = postfix;
1184 *(p++) = '\0';
1185 WIN_ReleaseWndPtr(pWnd);
1188 else strcpy( wnd_buffer, "\"NULL\"" );
1189 return wnd_buffer;
1192 /***********************************************************************
1193 * SPY_GetVKeyName
1195 const char *SPY_GetVKeyName(WPARAM wParam)
1197 const char *vk_key_name;
1199 if(wParam <= SPY_MAX_VKKEYSNUM && VK_KeyNames[wParam])
1200 vk_key_name = VK_KeyNames[wParam];
1201 else
1202 vk_key_name = "VK_???";
1204 return vk_key_name;
1207 /***********************************************************************
1208 * SPY_Bsearch_Notify
1210 const SPY_NOTIFY *SPY_Bsearch_Notify( const SPY_NOTIFY *first, const SPY_NOTIFY *last, UINT code)
1212 INT count;
1213 const SPY_NOTIFY *test;
1215 while (last >= first) {
1216 count = 1 + last - first;
1217 if (count < 3) {
1218 /* TRACE("code=%d, f-value=%d, f-name=%s, l-value=%d, l-name=%s, l-len=%d,\n",
1219 code, first->value, first->name, last->value, last->name, last->len); */
1220 if (first->value == code) return first;
1221 if (last->value == code) return last;
1222 return NULL;
1224 count = count / 2;
1225 test = first + count;
1226 /* TRACE("first=%p, last=%p, test=%p, t-value=%d, code=%d, count=%d\n",
1227 first, last, test, test->value, code, count); */
1228 if (test->value == code) return test;
1229 if (test->value < code)
1230 last = test - 1;
1231 else
1232 first = test + 1;
1234 return NULL;
1237 /***********************************************************************
1238 * SPY_DumpStructure
1240 void SPY_DumpStructure (UINT msg, BOOL enter, LPARAM structure)
1242 switch (msg)
1244 case WM_DRAWITEM:
1245 if (!enter) break;
1247 DRAWITEMSTRUCT *lpdis = (DRAWITEMSTRUCT*) structure;
1248 TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
1249 lpdis->CtlType, lpdis->CtlID);
1250 TRACE("itemID=0x%08x itemAction=0x%08x itemState=0x%08x\n",
1251 lpdis->itemID, lpdis->itemAction, lpdis->itemState);
1252 TRACE("hWnd=0x%04x hDC=0x%04x (%d,%d)-(%d,%d) itemData=0x%08lx\n",
1253 lpdis->hwndItem, lpdis->hDC, lpdis->rcItem.left,
1254 lpdis->rcItem.top, lpdis->rcItem.right,
1255 lpdis->rcItem.bottom, lpdis->itemData);
1257 break;
1258 case WM_MEASUREITEM:
1260 MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) structure;
1261 TRACE("MEASUREITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
1262 lpmis->CtlType, lpmis->CtlID);
1263 TRACE("itemID=0x%08x itemWidth=0x%08x itemHeight=0x%08x\n",
1264 lpmis->itemID, lpmis->itemWidth, lpmis->itemHeight);
1265 TRACE("itemData=0x%08lx\n", lpmis->itemData);
1267 break;
1268 case WM_STYLECHANGED:
1269 if (!enter) break;
1270 case WM_STYLECHANGING:
1272 LPSTYLESTRUCT ss = (LPSTYLESTRUCT) structure;
1273 TRACE("STYLESTRUCT: StyleOld=0x%08lx, StyleNew=0x%08lx\n",
1274 ss->styleOld, ss->styleNew);
1276 break;
1277 case WM_NOTIFY:
1278 if (!enter) break;
1280 NMHDR * pnmh = (NMHDR*) structure;
1281 UINT *q;
1282 const SPY_NOTIFY *p;
1284 p = SPY_Bsearch_Notify (&spnfy_array[0], end_spnfy_array,
1285 pnmh->code);
1286 if (p) {
1287 TRACE("NMHDR hwndFrom=0x%08x idFrom=0x%08x code=%s<0x%08x>, extra=0x%x\n",
1288 pnmh->hwndFrom, pnmh->idFrom, p->name, pnmh->code, p->len);
1289 if (p->len > 0) {
1290 int i;
1291 q = (UINT *)(pnmh + 1);
1292 for(i=0; i<((INT)p->len)-12; i+=16) {
1293 TRACE("NM extra [%04x] %08x %08x %08x %08x\n",
1294 i, *q, *(q+1), *(q+2), *(q+3));
1295 q += 4;
1297 switch (p->len - i) {
1298 case 12:
1299 TRACE("NM extra [%04x] %08x %08x %08x\n",
1300 i, *q, *(q+1), *(q+2));
1301 break;
1302 case 8:
1303 TRACE("NM extra [%04x] %08x %08x\n",
1304 i, *q, *(q+1));
1305 break;
1306 case 4:
1307 TRACE("NM extra [%04x] %08x\n",
1308 i, *q);
1309 break;
1310 default:
1311 break;
1315 else
1316 TRACE("NMHDR hwndFrom=0x%08x idFrom=0x%08x code=0x%08x\n",
1317 pnmh->hwndFrom, pnmh->idFrom, pnmh->code);
1319 default:
1320 break;
1324 /***********************************************************************
1325 * SPY_EnterMessage
1327 void SPY_EnterMessage( INT iFlag, HWND hWnd, UINT msg,
1328 WPARAM wParam, LPARAM lParam )
1330 LPCSTR pname;
1332 if (!TRACE_ON(message) || SPY_EXCLUDE(msg)) return;
1334 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
1335 switch(iFlag)
1337 case SPY_DISPATCHMESSAGE16:
1338 pname = SPY_GetWndName(hWnd);
1339 TRACE("%*s(%04x) %-16s message [%04x] %s dispatched wp=%04x lp=%08lx\n",
1340 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
1341 wParam, lParam);
1342 break;
1344 case SPY_DISPATCHMESSAGE:
1345 pname = SPY_GetWndName(hWnd);
1346 TRACE("%*s(%08x) %-16s message [%04x] %s dispatched wp=%08x lp=%08lx\n",
1347 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
1348 wParam, lParam);
1349 break;
1351 case SPY_SENDMESSAGE16:
1352 case SPY_SENDMESSAGE:
1354 char taskName[30];
1355 HTASK16 hTask = GetWindowTask16(hWnd);
1357 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
1358 else if (!hTask) strcpy( taskName, "Wine" );
1359 else
1361 sprintf( taskName, "task %04x ???", hTask );
1362 GetModuleName16( hTask, taskName + 10, sizeof(taskName) - 10 );
1364 pname = SPY_GetWndName(hWnd);
1366 if (iFlag == SPY_SENDMESSAGE16)
1367 TRACE("%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
1368 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
1369 taskName, wParam, lParam );
1370 else
1371 { TRACE("%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
1372 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
1373 taskName, wParam, lParam );
1374 SPY_DumpStructure(msg, TRUE, lParam);
1377 break;
1379 case SPY_DEFWNDPROC16:
1380 if( SPY_ExcludeDWP ) return;
1381 TRACE("%*s(%04x) DefWindowProc16: %s [%04x] wp=%04x lp=%08lx\n",
1382 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
1383 msg, wParam, lParam );
1384 break;
1386 case SPY_DEFWNDPROC:
1387 if( SPY_ExcludeDWP ) return;
1388 TRACE("%*s(%08x) DefWindowProc32: %s [%04x] wp=%08x lp=%08lx\n",
1389 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
1390 msg, wParam, lParam );
1391 break;
1393 SPY_IndentLevel += SPY_INDENT_UNIT;
1397 /***********************************************************************
1398 * SPY_ExitMessage
1400 void SPY_ExitMessage( INT iFlag, HWND hWnd, UINT msg, LRESULT lReturn,
1401 WPARAM wParam, LPARAM lParam )
1403 LPCSTR pname;
1405 if (!TRACE_ON(message) || SPY_EXCLUDE(msg) ||
1406 (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND)) )
1407 return;
1409 if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
1411 switch(iFlag)
1413 case SPY_RESULT_DEFWND16:
1414 TRACE(" %*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
1415 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
1416 break;
1418 case SPY_RESULT_DEFWND:
1419 TRACE(" %*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n",
1420 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
1421 break;
1423 case SPY_RESULT_OK16:
1424 pname = SPY_GetWndName(hWnd);
1425 TRACE(" %*s(%04x) %-16s message [%04x] %s returned %08lx\n",
1426 SPY_IndentLevel, "", hWnd, pname, msg,
1427 SPY_GetMsgName( msg ), lReturn );
1428 break;
1430 case SPY_RESULT_OK:
1431 pname = SPY_GetWndName(hWnd);
1432 TRACE(" %*s(%08x) %-16s message [%04x] %s returned %08lx\n",
1433 SPY_IndentLevel, "", hWnd, pname, msg,
1434 SPY_GetMsgName( msg ), lReturn );
1435 SPY_DumpStructure(msg, FALSE, lParam);
1436 break;
1438 case SPY_RESULT_INVALIDHWND16:
1439 pname = SPY_GetWndName(hWnd);
1440 WARN(" %*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
1441 SPY_IndentLevel, "", hWnd, pname, msg,
1442 SPY_GetMsgName( msg ) );
1443 break;
1445 case SPY_RESULT_INVALIDHWND:
1446 pname = SPY_GetWndName(hWnd);
1447 WARN(" %*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
1448 SPY_IndentLevel, "", hWnd, pname, msg,
1449 SPY_GetMsgName( msg ) );
1450 break;
1455 /***********************************************************************
1456 * SPY_Init
1458 int SPY_Init(void)
1460 int i;
1461 char buffer[1024];
1462 const SPY_NOTIFY *p;
1464 if (!TRACE_ON(message)) return TRUE;
1466 PROFILE_GetWineIniString( "Spy", "Include", "", buffer, sizeof(buffer) );
1467 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
1469 TRACE("Include=%s\n", buffer );
1470 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
1471 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
1474 PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer, sizeof(buffer) );
1475 if (buffer[0])
1477 TRACE("Exclude=%s\n", buffer );
1478 if (!strcmp( buffer, "EXCLUDEALL" ))
1479 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
1480 else
1481 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
1482 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
1485 SPY_ExcludeDWP = PROFILE_GetWineIniInt( "Spy", "ExcludeDWP", 0 );
1487 /* find last good entry in spy notify array and save addr for b-search */
1488 p = &spnfy_array[0];
1489 while (p->name) p++;
1490 p--;
1491 end_spnfy_array = p;
1493 return 1;