Release 970305
[wine/multimedia.git] / misc / spy.c
blob3216f4a855bdb4658008f377aa77fe0382e795d9
1 /*
2 * Message spying routines
4 * Copyright 1994, Bob Amstadt
5 * 1995, Alex Korobka
6 */
8 #include <stdlib.h>
9 #include <stdio.h>
10 #include <string.h>
11 #include "windows.h"
12 #include "module.h"
13 #include "options.h"
14 #include "stddebug.h"
15 #include "debug.h"
16 #include "spy.h"
18 #define SPY_MAX_MSGNUM WM_USER
19 #define SPY_INDENT_UNIT 4 /* 4 spaces */
21 static const char * const MessageTypeNames[SPY_MAX_MSGNUM + 1] =
23 "wm_null", /* 0x00 */
24 "WM_CREATE",
25 "WM_DESTROY",
26 "WM_MOVE",
27 "wm_sizewait",
28 "WM_SIZE",
29 "WM_ACTIVATE",
30 "WM_SETFOCUS",
31 "WM_KILLFOCUS",
32 "WM_SETVISIBLE",
33 "WM_ENABLE",
34 "WM_SETREDRAW",
35 "WM_SETTEXT",
36 "WM_GETTEXT",
37 "WM_GETTEXTLENGTH",
38 "WM_PAINT",
39 "WM_CLOSE", /* 0x10 */
40 "WM_QUERYENDSESSION",
41 "WM_QUIT",
42 "WM_QUERYOPEN",
43 "WM_ERASEBKGND",
44 "WM_SYSCOLORCHANGE",
45 "WM_ENDSESSION",
46 "wm_systemerror",
47 "WM_SHOWWINDOW",
48 "WM_CTLCOLOR",
49 "WM_WININICHANGE",
50 "WM_DEVMODECHANGE",
51 "WM_ACTIVATEAPP",
52 "WM_FONTCHANGE",
53 "WM_TIMECHANGE",
54 "WM_CANCELMODE",
55 "WM_SETCURSOR", /* 0x20 */
56 "WM_MOUSEACTIVATE",
57 "WM_CHILDACTIVATE",
58 "WM_QUEUESYNC",
59 "WM_GETMINMAXINFO",
60 "wm_unused3",
61 "wm_painticon",
62 "WM_ICONERASEBKGND",
63 "WM_NEXTDLGCTL",
64 "wm_alttabactive",
65 "WM_SPOOLERSTATUS",
66 "WM_DRAWITEM",
67 "WM_MEASUREITEM",
68 "WM_DELETEITEM",
69 "WM_VKEYTOITEM",
70 "WM_CHARTOITEM",
71 "WM_SETFONT", /* 0x30 */
72 "WM_GETFONT",
73 "WM_SETHOTKEY",
74 "WM_GETHOTKEY",
75 "wm_filesyschange",
76 "wm_isactiveicon",
77 "wm_queryparkicon",
78 "WM_QUERYDRAGICON",
79 "wm_querysavestate",
80 "WM_COMPAREITEM",
81 "wm_testing",
82 NULL,
83 "wm_otherwindowcreated",
84 "wm_otherwindowdestroyed",
85 "wm_activateshellwindow",
86 NULL,
88 NULL, /* 0x40 */
89 "wm_compacting", NULL, NULL,
90 "WM_COMMNOTIFY", NULL,
91 "WM_WINDOWPOSCHANGING", /* 0x0046 */
92 "WM_WINDOWPOSCHANGED", /* 0x0047 */
93 "WM_POWER", NULL,
94 "WM_COPYDATA",
95 "WM_CANCELJOURNAL", NULL, NULL,
96 "WM_NOTIFY", NULL,
98 /* 0x0050 */
99 "WM_INPUTLANGCHANGEREQUEST",
100 "WM_INPUTLANGCHANGE",
101 "WM_TCARD",
102 "WM_HELP",
103 "WM_USERCHANGED",
104 "WM_NOTIFYFORMAT", NULL, NULL,
105 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
107 /* 0x0060 */
108 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
109 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
111 /* 0x0070 */
112 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
113 NULL, NULL, NULL,
114 "WM_CONTEXTMENU",
115 "WM_STYLECHANGING",
116 "WM_STYLECHANGED",
117 "WM_DISPLAYCHANGE",
118 "WM_GETICON",
120 "WM_SETICON", /* 0x0080 */
121 "WM_NCCREATE", /* 0x0081 */
122 "WM_NCDESTROY", /* 0x0082 */
123 "WM_NCCALCSIZE", /* 0x0083 */
124 "WM_NCHITTEST", /* 0x0084 */
125 "WM_NCPAINT", /* 0x0085 */
126 "WM_NCACTIVATE", /* 0x0086 */
127 "WM_GETDLGCODE", /* 0x0087 */
128 "wm_syncpaint",
129 "wm_synctask", NULL, NULL, NULL, NULL, NULL, NULL,
131 /* 0x0090 */
132 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
133 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
135 /* 0x00A0 */
136 "WM_NCMOUSEMOVE", /* 0x00A0 */
137 "WM_NCLBUTTONDOWN", /* 0x00A1 */
138 "WM_NCLBUTTONUP", /* 0x00A2 */
139 "WM_NCLBUTTONDBLCLK", /* 0x00A3 */
140 "WM_NCRBUTTONDOWN", /* 0x00A4 */
141 "WM_NCRBUTTONUP", /* 0x00A5 */
142 "WM_NCRBUTTONDBLCLK", /* 0x00A6 */
143 "WM_NCMBUTTONDOWN", /* 0x00A7 */
144 "WM_NCMBUTTONUP", /* 0x00A8 */
145 "WM_NCMBUTTONDBLCLK", /* 0x00A9 */
146 NULL, NULL, NULL, NULL, NULL, NULL,
148 /* 0x00B0 - Win32 Edit controls */
149 "EM_GETSEL32", /* 0x00b0 */
150 "EM_SETSEL32", /* 0x00b1 */
151 "EM_GETRECT32", /* 0x00b2 */
152 "EM_SETRECT32", /* 0x00b3 */
153 "EM_SETRECTNP32", /* 0x00b4 */
154 "EM_SCROLL32", /* 0x00b5 */
155 "EM_LINESCROLL32", /* 0x00b6 */
156 "EM_SCROLLCARET32", /* 0x00b7 */
157 "EM_GETMODIFY32", /* 0x00b8 */
158 "EM_SETMODIFY32", /* 0x00b9 */
159 "EM_GETLINECOUNT32", /* 0x00ba */
160 "EM_LINEINDEX32", /* 0x00bb */
161 "EM_SETHANDLE32", /* 0x00bc */
162 "EM_GETHANDLE32", /* 0x00bd */
163 "EM_GETTHUMB32", /* 0x00be */
164 NULL, /* 0x00bf */
166 NULL, /* 0x00c0 */
167 "EM_LINELENGTH32", /* 0x00c1 */
168 "EM_REPLACESEL32", /* 0x00c2 */
169 NULL, /* 0x00c3 */
170 "EM_GETLINE32", /* 0x00c4 */
171 "EM_LIMITTEXT32", /* 0x00c5 */
172 "EM_CANUNDO32", /* 0x00c6 */
173 "EM_UNDO32", /* 0x00c7 */
174 "EM_FMTLINES32", /* 0x00c8 */
175 "EM_LINEFROMCHAR32", /* 0x00c9 */
176 NULL, /* 0x00ca */
177 "EM_SETTABSTOPS32", /* 0x00cb */
178 "EM_SETPASSWORDCHAR32", /* 0x00cc */
179 "EM_EMPTYUNDOBUFFER32", /* 0x00cd */
180 "EM_GETFIRSTVISIBLELINE32", /* 0x00ce */
181 "EM_SETREADONLY32", /* 0x00cf */
183 "EM_SETWORDBREAKPROC32", /* 0x00d0 */
184 "EM_GETWORDBREAKPROC32", /* 0x00d1 */
185 "EM_GETPASSWORDCHAR32", /* 0x00d2 */
186 "EM_SETMARGINS32", /* 0x00d3 */
187 "EM_GETMARGINS32", /* 0x00d4 */
188 "EM_GETLIMITTEXT32", /* 0x00d5 */
189 "EM_POSFROMCHAR32", /* 0x00d6 */
190 "EM_CHARFROMPOS32", /* 0x00d7 */
191 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
193 /* 0x00E0 - Win32 Scrollbars */
194 "SBM_SETPOS32", /* 0x00e0 */
195 "SBM_GETPOS32", /* 0x00e1 */
196 "SBM_SETRANGE32", /* 0x00e2 */
197 "SBM_GETRANGE32", /* 0x00e3 */
198 "SBM_ENABLE_ARROWS32", /* 0x00e4 */
199 NULL,
200 "SBM_SETRANGEREDRAW32", /* 0x00e6 */
201 NULL, NULL,
202 "SBM_SETSCROLLINFO32", /* 0x00e9 */
203 "SBM_GETSCROLLINFO32", /* 0x00ea */
204 NULL, NULL, NULL, NULL, NULL,
206 /* 0x00F0 - Win32 Buttons */
207 "BM_GETCHECK32", /* 0x00f0 */
208 "BM_SETCHECK32", /* 0x00f1 */
209 "BM_GETSTATE32", /* 0x00f2 */
210 "BM_SETSTATE32", /* 0x00f3 */
211 "BM_SETSTYLE32", /* 0x00f4 */
212 "BM_CLICK32", /* 0x00f5 */
213 "BM_GETIMAGE32", /* 0x00f6 */
214 "BM_SETIMAGE32", /* 0x00f7 */
215 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
217 "WM_KEYDOWN", /* 0x0100 */
218 "WM_KEYUP", /* 0x0101 */
219 "WM_CHAR", /* 0x0102 */
220 "WM_DEADCHAR", /* 0x0103 */
221 "WM_SYSKEYDOWN", /* 0x0104 */
222 "WM_SYSKEYUP", /* 0x0105 */
223 "WM_SYSCHAR", /* 0x0106 */
224 "WM_SYSDEADCHAR", /* 0x0107 */
225 "WM_KEYLAST", /* 0x0108 */
226 NULL,
227 "WM_CONVERTREQUEST",
228 "WM_CONVERTRESULT",
229 "WM_INTERIM", NULL, NULL, NULL,
231 "WM_INITDIALOG", /* 0x0110 */
232 "WM_COMMAND", /* 0x0111 */
233 "WM_SYSCOMMAND", /* 0x0112 */
234 "WM_TIMER", /* 0x0113 */
235 "WM_HSCROLL", /* 0x0114 */
236 "WM_VSCROLL", /* 0x0115 */
237 "WM_INITMENU", /* 0x0116 */
238 "WM_INITMENUPOPUP", /* 0x0117 */
239 "WM_SYSTIMER", /* 0x0118 */
240 NULL, NULL, NULL, NULL, NULL, NULL,
241 "WM_MENUSELECT", /* 0x011f */
243 "WM_MENUCHAR", /* 0x0120 */
244 "WM_ENTERIDLE", /* 0x0121 */
245 NULL, NULL, NULL, NULL, NULL, NULL,
246 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
248 /* 0x0130 */
249 NULL,
250 "wm_lbtrackpoint", /* 0x0131 */
251 "WM_CTLCOLORMSGBOX", /* 0x0132 */
252 "WM_CTLCOLOREDIT", /* 0x0133 */
253 "WM_CTLCOLORLISTBOX", /* 0x0134 */
254 "WM_CTLCOLORBTN", /* 0x0135 */
255 "WM_CTLCOLORDLG", /* 0x0136 */
256 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
257 "WM_CTLCOLORSTATIC", /* 0x0138 */
258 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
260 /* 0x0140 - Win32 Comboboxes */
261 "CB_GETEDITSEL32", /* 0x0140 */
262 "CB_LIMITTEXT32", /* 0x0141 */
263 "CB_SETEDITSEL32", /* 0x0142 */
264 "CB_ADDSTRING32", /* 0x0143 */
265 "CB_DELETESTRING32", /* 0x0144 */
266 "CB_DIR32", /* 0x0145 */
267 "CB_GETCOUNT32", /* 0x0146 */
268 "CB_GETCURSEL32", /* 0x0147 */
269 "CB_GETLBTEXT32", /* 0x0148 */
270 "CB_GETLBTEXTLEN32", /* 0x0149 */
271 "CB_INSERTSTRING32", /* 0x014a */
272 "CB_RESETCONTENT32", /* 0x014b */
273 "CB_FINDSTRING32", /* 0x014c */
274 "CB_SELECTSTRING32", /* 0x014d */
275 "CB_SETCURSEL32", /* 0x014e */
276 "CB_SHOWDROPDOWN32", /* 0x014f */
278 "CB_GETITEMDATA32", /* 0x0150 */
279 "CB_SETITEMDATA32", /* 0x0151 */
280 "CB_GETDROPPEDCONTROLRECT32",/* 0x0152 */
281 "CB_SETITEMHEIGHT32", /* 0x0153 */
282 "CB_GETITEMHEIGHT32", /* 0x0154 */
283 "CB_SETEXTENDEDUI32", /* 0x0155 */
284 "CB_GETEXTENDEDUI32", /* 0x0156 */
285 "CB_GETDROPPEDSTATE32", /* 0x0157 */
286 "CB_FINDSTRINGEXACT32", /* 0x0158 */
287 "CB_SETLOCALE32", /* 0x0159 */
288 "CB_GETLOCALE32", /* 0x015a */
289 "CB_GETTOPINDEX32", /* 0x015b */
290 "CB_SETTOPINDEX32", /* 0x015c */
291 "CB_GETHORIZONTALEXTENT32", /* 0x015d */
292 "CB_SETHORIZONTALEXTENT32", /* 0x015e */
293 "CB_GETDROPPEDWIDTH32", /* 0x015f */
295 "CB_SETDROPPEDWIDTH32", /* 0x0160 */
296 "CB_INITSTORAGE32", /* 0x0161 */
297 NULL, NULL, NULL, NULL, NULL, NULL,
298 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
300 /* 0x0170 - Win32 Static controls */
301 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
302 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
304 /* 0x0180 - Win32 Listboxes */
305 "LB_ADDSTRING32", /* 0x0180 */
306 "LB_INSERTSTRING32", /* 0x0181 */
307 "LB_DELETESTRING32", /* 0x0182 */
308 "LB_SELITEMRANGEEX32", /* 0x0183 */
309 "LB_RESETCONTENT32", /* 0x0184 */
310 "LB_SETSEL32", /* 0x0185 */
311 "LB_SETCURSEL32", /* 0x0186 */
312 "LB_GETSEL32", /* 0x0187 */
313 "LB_GETCURSEL32", /* 0x0188 */
314 "LB_GETTEXT32", /* 0x0189 */
315 "LB_GETTEXTLEN32", /* 0x018a */
316 "LB_GETCOUNT32", /* 0x018b */
317 "LB_SELECTSTRING32", /* 0x018c */
318 "LB_DIR32", /* 0x018d */
319 "LB_GETTOPINDEX32", /* 0x018e */
320 "LB_FINDSTRING32", /* 0x018f */
322 "LB_GETSELCOUNT32", /* 0x0190 */
323 "LB_GETSELITEMS32", /* 0x0191 */
324 "LB_SETTABSTOPS32", /* 0x0192 */
325 "LB_GETHORIZONTALEXTENT32", /* 0x0193 */
326 "LB_SETHORIZONTALEXTENT32", /* 0x0194 */
327 "LB_SETCOLUMNWIDTH32", /* 0x0195 */
328 "LB_ADDFILE32", /* 0x0196 */
329 "LB_SETTOPINDEX32", /* 0x0197 */
330 "LB_GETITEMRECT32", /* 0x0198 */
331 "LB_GETITEMDATA32", /* 0x0199 */
332 "LB_SETITEMDATA32", /* 0x019a */
333 "LB_SELITEMRANGE32", /* 0x019b */
334 "LB_SETANCHORINDEX32", /* 0x019c */
335 "LB_GETANCHORINDEX32", /* 0x019d */
336 "LB_SETCARETINDEX32", /* 0x019e */
337 "LB_GETCARETINDEX32", /* 0x019f */
339 "LB_SETITEMHEIGHT32", /* 0x01a0 */
340 "LB_GETITEMHEIGHT32", /* 0x01a1 */
341 "LB_FINDSTRINGEXACT32", /* 0x01a2 */
342 "LB_CARETON32", /* 0x01a3 */
343 "LB_CARETOFF32", /* 0x01a4 */
344 "LB_SETLOCALE32", /* 0x01a5 */
345 "LB_GETLOCALE32", /* 0x01a6 */
346 "LB_SETCOUNT32", /* 0x01a7 */
347 "LB_INITSTORAGE32", /* 0x01a8 */
348 "LB_ITEMFROMPOINT32", /* 0x01a9 */
349 NULL, NULL, NULL, NULL, NULL, NULL,
351 /* 0x01B0 */
352 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
353 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
355 /* 0x01C0 */
356 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
357 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
359 /* 0x01D0 */
360 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
361 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
363 /* 0x01E0 */
364 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
365 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
367 /* 0x01F0 */
368 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
369 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
371 "WM_MOUSEMOVE", /* 0x0200 */
372 "WM_LBUTTONDOWN", /* 0x0201 */
373 "WM_LBUTTONUP", /* 0x0202 */
374 "WM_LBUTTONDBLCLK", /* 0x0203 */
375 "WM_RBUTTONDOWN", /* 0x0204 */
376 "WM_RBUTTONUP", /* 0x0205 */
377 "WM_RBUTTONDBLCLK", /* 0x0206 */
378 "WM_MBUTTONDOWN", /* 0x0207 */
379 "WM_MBUTTONUP", /* 0x0208 */
380 "WM_MBUTTONDBLCLK", /* 0x0209 */
381 NULL, NULL, NULL, NULL, NULL, NULL,
383 "WM_PARENTNOTIFY", /* 0x0210 */
384 "WM_ENTERMENULOOP", /* 0x0211 */
385 "WM_EXITMENULOOP", /* 0x0212 */
386 "wm_nextmenu", /* 0x0213 */
387 "WM_SIZING",
388 "WM_CAPTURECHANGED",
389 "WM_MOVING", NULL,
390 "WM_POWERBROADCAST",
391 "WM_DEVICECHANGE", NULL, NULL, NULL, NULL, NULL, NULL,
393 "WM_MDICREATE", /* 0x0220 */
394 "WM_MDIDESTROY", /* 0x0221 */
395 "WM_MDIACTIVATE", /* 0x0222 */
396 "WM_MDIRESTORE", /* 0x0223 */
397 "WM_MDINEXT", /* 0x0224 */
398 "WM_MDIMAXIMIZE", /* 0x0225 */
399 "WM_MDITILE", /* 0x0226 */
400 "WM_MDICASCADE", /* 0x0227 */
401 "WM_MDIICONARRANGE", /* 0x0228 */
402 "WM_MDIGETACTIVE", /* 0x0229 */
404 "wm_dropobject",
405 "wm_querydropobject",
406 "wm_begindrag",
407 "wm_dragloop",
408 "wn_dragselect",
409 "wm_dragmove",
411 /* 0x0230*/
412 "WM_MDISETMENU", /* 0x0230 */
413 "WM_ENTERSIZEMOVE", /* 0x0231 */
414 "WM_EXITSIZEMOVE", /* 0x0232 */
415 "WM_DROPFILES", /* 0x0233 */
416 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
417 /* 0x0238*/
418 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
420 /* 0x0240 */
421 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
422 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
424 /* 0x0250 */
425 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
426 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
428 /* 0x0260 */
429 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
430 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
431 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
432 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
434 /* 0x0280 */
435 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
436 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
437 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
438 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
440 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
441 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
442 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
443 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
445 /* 0x02c0 */
446 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
447 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
448 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
449 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
451 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
452 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
453 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
454 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
456 "WM_CUT", /* 0x0300 */
457 "WM_COPY",
458 "WM_PASTE",
459 "WM_CLEAR",
460 "WM_UNDO",
461 "WM_RENDERFORMAT",
462 "WM_RENDERALLFORMATS",
463 "WM_DESTROYCLIPBOARD",
464 "WM_DRAWCLIPBOARD",
465 "WM_PAINTCLIPBOARD",
466 "WM_VSCROLLCLIPBOARD",
467 "WM_SIZECLIPBOARD",
468 "WM_ASKCBFORMATNAME",
469 "WM_CHANGECBCHAIN",
470 "WM_HSCROLLCLIPBOARD",
471 "WM_QUERYNEWPALETTE", /* 0x030f*/
473 "WM_PALETTEISCHANGING",
474 "WM_PALETTECHANGED",
475 "WM_HOTKEY", /* 0x0312 */
476 NULL, NULL, NULL, NULL,
477 "WM_PRINT",
478 "WM_PRINTCLIENT",
479 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
481 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
482 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
483 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
484 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
486 /* 0x0340 */
487 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
488 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
489 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
490 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
492 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
493 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
494 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
495 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
497 /* 0x0380 */
498 "WM_PENWINFIRST",
499 "WM_RCRESULT",
500 "WM_HOOKRCRESULT",
501 "WM_GLOBALRCCHANGE",
502 "WM_SKB",
503 "WM_HEDITCTL",
504 NULL, NULL,
505 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
507 "WM_COALESCE_FIRST",
508 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
509 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
510 "WM_COALESCE_LAST",
512 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
513 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
514 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
515 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
517 /* 0x03c0 */
518 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
519 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
520 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
521 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
523 /* 0x03e0 */
524 "WM_DDE_INITIATE", /* 0x3E0 */
525 "WM_DDE_TERMINATE", /* 0x3E1 */
526 "WM_DDE_ADVISE", /* 0x3E2 */
527 "WM_DDE_UNADVISE", /* 0x3E3 */
528 "WM_DDE_ACK", /* 0x3E4 */
529 "WM_DDE_DATA", /* 0x3E5 */
530 "WM_DDE_REQUEST", /* 0x3E6 */
531 "WM_DDE_POKE", /* 0x3E7 */
532 "WM_DDE_EXECUTE", /* 0x3E8 */
533 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
536 /* 0x03f0 */
537 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
538 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
540 "WM_USER"
544 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
545 static int SPY_IndentLevel = 0;
547 #define SPY_EXCLUDE(msg) \
548 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
550 /***********************************************************************
551 * SPY_GetMsgName
553 const char *SPY_GetMsgName( UINT32 msg )
555 static char buffer[20];
557 if (msg <= SPY_MAX_MSGNUM)
559 if (!MessageTypeNames[msg]) return "???";
560 return MessageTypeNames[msg];
562 sprintf( buffer, "WM_USER+%04x", msg - WM_USER );
563 return buffer;
567 /***********************************************************************
568 * SPY_EnterMessage
570 void SPY_EnterMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg,
571 WPARAM32 wParam, LPARAM lParam )
573 if (!debugging_message || SPY_EXCLUDE(msg)) return;
575 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
576 switch(iFlag)
578 case SPY_DISPATCHMESSAGE16:
579 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s dispatched wp=%04x lp=%08lx\n",
580 SPY_IndentLevel, "", hWnd, msg, SPY_GetMsgName( msg ),
581 wParam, lParam);
582 break;
584 case SPY_DISPATCHMESSAGE32:
585 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s dispatched wp=%08x lp=%08lx\n",
586 SPY_IndentLevel, "", hWnd, msg, SPY_GetMsgName( msg ),
587 wParam, lParam);
588 break;
590 case SPY_SENDMESSAGE16:
591 case SPY_SENDMESSAGE32:
593 char taskName[30];
594 HTASK16 hTask = GetWindowTask16(hWnd);
595 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
596 else if (!hTask) strcpy( taskName, "Wine" );
597 else sprintf( taskName, "task %04x %s",
598 hTask, MODULE_GetModuleName( GetExePtr(hTask) ) );
600 if (iFlag == SPY_SENDMESSAGE16)
601 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
602 SPY_IndentLevel, "", hWnd, msg,
603 SPY_GetMsgName( msg ), taskName, wParam,
604 lParam );
605 else
606 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
607 SPY_IndentLevel, "", hWnd, msg,
608 SPY_GetMsgName( msg ), taskName, wParam,
609 lParam );
611 break;
613 case SPY_DEFWNDPROC16:
614 dprintf_message(stddeb, "%*s(%04x) DefWindowProc: %s [%04x] wp=%04x lp=%08lx\n",
615 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
616 msg, wParam, lParam );
617 break;
619 case SPY_DEFWNDPROC32:
620 dprintf_message(stddeb, "%*s(%08x) DefWindowProc: %s [%04x] wp=%08x lp=%08lx\n",
621 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
622 msg, wParam, lParam );
623 break;
625 SPY_IndentLevel += SPY_INDENT_UNIT;
629 /***********************************************************************
630 * SPY_ExitMessage
632 void SPY_ExitMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg, LRESULT lReturn )
634 if (!debugging_message || SPY_EXCLUDE(msg)) return;
635 if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
637 switch(iFlag)
639 case SPY_RESULT_OK16:
640 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s returned %08lx\n",
641 SPY_IndentLevel, "", hWnd, msg,
642 SPY_GetMsgName( msg ), lReturn );
643 break;
644 case SPY_RESULT_OK32:
645 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s returned %08lx\n",
646 SPY_IndentLevel, "", hWnd, msg,
647 SPY_GetMsgName( msg ), lReturn );
648 break;
649 case SPY_RESULT_INVALIDHWND16:
650 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s HAS INVALID HWND\n",
651 SPY_IndentLevel, "", hWnd, msg,
652 SPY_GetMsgName( msg ) );
653 break;
654 case SPY_RESULT_INVALIDHWND32:
655 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s HAS INVALID HWND\n",
656 SPY_IndentLevel, "", hWnd, msg,
657 SPY_GetMsgName( msg ) );
658 break;
663 /***********************************************************************
664 * SPY_Init
666 int SPY_Init(void)
668 int i;
669 char buffer[512];
671 PROFILE_GetWineIniString( "Spy", "Include", "", buffer, sizeof(buffer) );
672 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
674 dprintf_message( stddeb, "SpyInit: Include=%s\n", buffer );
675 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
676 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
679 PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer, sizeof(buffer) );
680 if (buffer[0])
682 dprintf_message( stddeb, "SpyInit: Exclude=%s\n", buffer );
683 if (!strcmp( buffer, "EXCLUDEALL" ))
684 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
685 else
686 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
687 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
689 return 1;