Use libwine and libwine_unicode directly from their build directory
[wine/multimedia.git] / windows / spy.c
blob7056a2cb4b55d4bdd7c7b7b0f7ceefb2dfe50c1b
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 */
1027 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
1028 static BOOL16 SPY_ExcludeDWP = 0;
1029 static int SPY_IndentLevel = 0;
1031 #define SPY_EXCLUDE(msg) \
1032 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
1034 /***********************************************************************
1035 * SPY_GetMsgName
1037 const char *SPY_GetMsgName( UINT msg )
1039 static char msg_buffer[20];
1041 if (msg <= SPY_MAX_MSGNUM)
1043 if (!MessageTypeNames[msg]) return "???";
1044 return MessageTypeNames[msg];
1047 if (msg >= LVM_FIRST && msg <= LVM_FIRST + SPY_MAX_LVMMSGNUM)
1049 if (!LVMMessageTypeNames[msg-LVM_FIRST]) return "LVM_?";
1050 return LVMMessageTypeNames[msg-LVM_FIRST];
1053 if (msg >= CCM_FIRST && msg <= CCM_FIRST + SPY_MAX_CCMMSGNUM)
1055 if (!CCMMessageTypeNames[msg-CCM_FIRST]) return "???";
1056 return CCMMessageTypeNames[msg-CCM_FIRST];
1059 sprintf( msg_buffer, "WM_USER+%04x", msg - WM_USER );
1060 return msg_buffer;
1063 /***********************************************************************
1064 * SPY_GetWndName
1066 const char *SPY_GetWndName( HWND hwnd )
1068 static char wnd_buffer[16];
1070 WND* pWnd = WIN_FindWndPtr( hwnd );
1071 if( pWnd )
1073 INT n = sizeof(wnd_buffer) - 6;
1074 LPSTR p = wnd_buffer;
1075 char postfix;
1077 if( pWnd->text && pWnd->text[0] != '\0' )
1079 LPWSTR src = pWnd->text;
1080 *(p++) = postfix = '\"';
1081 while ((n-- > 1) && *src) *p++ = *src++;
1082 if( *src ) for( n = 0; n < 3; n++ ) *(p++)='.';
1084 else /* get class name */
1086 *(p++)='{';
1087 GlobalGetAtomNameA((ATOM) GetClassWord(pWnd->hwndSelf, GCW_ATOM), p, n + 1);
1088 p += strlen(p);
1089 postfix = '}';
1091 *(p++) = postfix;
1092 *(p++) = '\0';
1093 WIN_ReleaseWndPtr(pWnd);
1096 else strcpy( wnd_buffer, "\"NULL\"" );
1097 return wnd_buffer;
1100 /***********************************************************************
1101 * SPY_GetVKeyName
1103 const char *SPY_GetVKeyName(WPARAM wParam)
1105 const char *vk_key_name;
1107 if(wParam <= SPY_MAX_VKKEYSNUM && VK_KeyNames[wParam])
1108 vk_key_name = VK_KeyNames[wParam];
1109 else
1110 vk_key_name = "VK_???";
1112 return vk_key_name;
1115 /***********************************************************************
1116 * SPY_DumpStructure
1118 void SPY_DumpStructure (UINT msg, BOOL enter, LPARAM structure)
1120 switch (msg)
1122 case WM_DRAWITEM:
1123 if (!enter) break;
1124 { DRAWITEMSTRUCT *lpdis = (DRAWITEMSTRUCT*) structure;
1125 TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n", lpdis->CtlType, lpdis->CtlID);
1126 TRACE("itemID=0x%08x itemAction=0x%08x itemState=0x%08x\n", lpdis->itemID, lpdis->itemAction, lpdis->itemState);
1127 TRACE("hWnd=0x%04x hDC=0x%04x (%d,%d)-(%d,%d) itemData=0x%08lx\n",
1128 lpdis->hwndItem, lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, lpdis->rcItem.right, lpdis->rcItem.bottom, lpdis->itemData);
1130 break;
1131 case WM_MEASUREITEM:
1132 { MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) structure;
1133 TRACE("MEASUREITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n", lpmis->CtlType, lpmis->CtlID);
1134 TRACE("itemID=0x%08x itemWidth=0x%08x itemHeight=0x%08x\n", lpmis->itemID, lpmis->itemWidth, lpmis->itemHeight);
1135 TRACE("itemData=0x%08lx\n", lpmis->itemData);
1137 break;
1138 case WM_STYLECHANGED:
1139 if (!enter) break;
1140 case WM_STYLECHANGING:
1141 { LPSTYLESTRUCT ss = (LPSTYLESTRUCT) structure;
1142 TRACE("STYLESTRUCT: StyleOld=0x%08lx, StyleNew=0x%08lx\n",
1143 ss->styleOld, ss->styleNew);
1145 break;
1146 case WM_NOTIFY:
1147 if (!enter) break;
1148 { NMHDR * pnmh = (NMHDR*) structure;
1149 TRACE("NMHDR hwndFrom=0x%08x idFrom=0x%08x code=0x%08x\n", pnmh->hwndFrom, pnmh->idFrom, pnmh->code);
1151 default:
1152 break;
1156 /***********************************************************************
1157 * SPY_EnterMessage
1159 void SPY_EnterMessage( INT iFlag, HWND hWnd, UINT msg,
1160 WPARAM wParam, LPARAM lParam )
1162 LPCSTR pname;
1164 if (!TRACE_ON(message) || SPY_EXCLUDE(msg)) return;
1166 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
1167 switch(iFlag)
1169 case SPY_DISPATCHMESSAGE16:
1170 pname = SPY_GetWndName(hWnd);
1171 TRACE("%*s(%04x) %-16s message [%04x] %s dispatched wp=%04x lp=%08lx\n",
1172 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
1173 wParam, lParam);
1174 break;
1176 case SPY_DISPATCHMESSAGE:
1177 pname = SPY_GetWndName(hWnd);
1178 TRACE("%*s(%08x) %-16s message [%04x] %s dispatched wp=%08x lp=%08lx\n",
1179 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
1180 wParam, lParam);
1181 break;
1183 case SPY_SENDMESSAGE16:
1184 case SPY_SENDMESSAGE:
1186 char taskName[30];
1187 HTASK16 hTask = GetWindowTask16(hWnd);
1189 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
1190 else if (!hTask) strcpy( taskName, "Wine" );
1191 else
1193 sprintf( taskName, "task %04x ???", hTask );
1194 GetModuleName16( hTask, taskName + 10, sizeof(taskName) - 10 );
1196 pname = SPY_GetWndName(hWnd);
1198 if (iFlag == SPY_SENDMESSAGE16)
1199 TRACE("%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
1200 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
1201 taskName, wParam, lParam );
1202 else
1203 { TRACE("%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
1204 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
1205 taskName, wParam, lParam );
1206 SPY_DumpStructure(msg, TRUE, lParam);
1209 break;
1211 case SPY_DEFWNDPROC16:
1212 if( SPY_ExcludeDWP ) return;
1213 TRACE("%*s(%04x) DefWindowProc16: %s [%04x] wp=%04x lp=%08lx\n",
1214 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
1215 msg, wParam, lParam );
1216 break;
1218 case SPY_DEFWNDPROC:
1219 if( SPY_ExcludeDWP ) return;
1220 TRACE("%*s(%08x) DefWindowProc32: %s [%04x] wp=%08x lp=%08lx\n",
1221 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
1222 msg, wParam, lParam );
1223 break;
1225 SPY_IndentLevel += SPY_INDENT_UNIT;
1229 /***********************************************************************
1230 * SPY_ExitMessage
1232 void SPY_ExitMessage( INT iFlag, HWND hWnd, UINT msg, LRESULT lReturn,
1233 WPARAM wParam, LPARAM lParam )
1235 LPCSTR pname;
1237 if (!TRACE_ON(message) || SPY_EXCLUDE(msg) ||
1238 (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND)) )
1239 return;
1241 if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
1243 switch(iFlag)
1245 case SPY_RESULT_DEFWND16:
1246 TRACE(" %*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
1247 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
1248 break;
1250 case SPY_RESULT_DEFWND:
1251 TRACE(" %*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n",
1252 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
1253 break;
1255 case SPY_RESULT_OK16:
1256 pname = SPY_GetWndName(hWnd);
1257 TRACE(" %*s(%04x) %-16s message [%04x] %s returned %08lx\n",
1258 SPY_IndentLevel, "", hWnd, pname, msg,
1259 SPY_GetMsgName( msg ), lReturn );
1260 break;
1262 case SPY_RESULT_OK:
1263 pname = SPY_GetWndName(hWnd);
1264 TRACE(" %*s(%08x) %-16s message [%04x] %s returned %08lx\n",
1265 SPY_IndentLevel, "", hWnd, pname, msg,
1266 SPY_GetMsgName( msg ), lReturn );
1267 SPY_DumpStructure(msg, FALSE, lParam);
1268 break;
1270 case SPY_RESULT_INVALIDHWND16:
1271 pname = SPY_GetWndName(hWnd);
1272 WARN(" %*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
1273 SPY_IndentLevel, "", hWnd, pname, msg,
1274 SPY_GetMsgName( msg ) );
1275 break;
1277 case SPY_RESULT_INVALIDHWND:
1278 pname = SPY_GetWndName(hWnd);
1279 WARN(" %*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
1280 SPY_IndentLevel, "", hWnd, pname, msg,
1281 SPY_GetMsgName( msg ) );
1282 break;
1287 /***********************************************************************
1288 * SPY_Init
1290 int SPY_Init(void)
1292 int i;
1293 char buffer[1024];
1295 if (!TRACE_ON(message)) return TRUE;
1297 PROFILE_GetWineIniString( "Spy", "Include", "", buffer, sizeof(buffer) );
1298 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
1300 TRACE("Include=%s\n", buffer );
1301 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
1302 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
1305 PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer, sizeof(buffer) );
1306 if (buffer[0])
1308 TRACE("Exclude=%s\n", buffer );
1309 if (!strcmp( buffer, "EXCLUDEALL" ))
1310 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
1311 else
1312 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
1313 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
1316 SPY_ExcludeDWP = PROFILE_GetWineIniInt( "Spy", "ExcludeDWP", 0 );
1318 return 1;