Release 971012
[wine/multimedia.git] / misc / spy.c
blob4524f3e738a7ddf2e2831ebec2dce7fc8d2c0d90
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 "win.h"
13 #include "module.h"
14 #include "options.h"
15 #include "stddebug.h"
16 #include "debug.h"
17 #include "spy.h"
19 #define SPY_MAX_MSGNUM WM_USER
20 #define SPY_INDENT_UNIT 4 /* 4 spaces */
22 static const char * const MessageTypeNames[SPY_MAX_MSGNUM + 1] =
24 "wm_null", /* 0x00 */
25 "WM_CREATE",
26 "WM_DESTROY",
27 "WM_MOVE",
28 "wm_sizewait",
29 "WM_SIZE",
30 "WM_ACTIVATE",
31 "WM_SETFOCUS",
32 "WM_KILLFOCUS",
33 "WM_SETVISIBLE",
34 "WM_ENABLE",
35 "WM_SETREDRAW",
36 "WM_SETTEXT",
37 "WM_GETTEXT",
38 "WM_GETTEXTLENGTH",
39 "WM_PAINT",
40 "WM_CLOSE", /* 0x10 */
41 "WM_QUERYENDSESSION",
42 "WM_QUIT",
43 "WM_QUERYOPEN",
44 "WM_ERASEBKGND",
45 "WM_SYSCOLORCHANGE",
46 "WM_ENDSESSION",
47 "wm_systemerror",
48 "WM_SHOWWINDOW",
49 "WM_CTLCOLOR",
50 "WM_WININICHANGE",
51 "WM_DEVMODECHANGE",
52 "WM_ACTIVATEAPP",
53 "WM_FONTCHANGE",
54 "WM_TIMECHANGE",
55 "WM_CANCELMODE",
56 "WM_SETCURSOR", /* 0x20 */
57 "WM_MOUSEACTIVATE",
58 "WM_CHILDACTIVATE",
59 "WM_QUEUESYNC",
60 "WM_GETMINMAXINFO",
61 "wm_unused3",
62 "wm_painticon",
63 "WM_ICONERASEBKGND",
64 "WM_NEXTDLGCTL",
65 "wm_alttabactive",
66 "WM_SPOOLERSTATUS",
67 "WM_DRAWITEM",
68 "WM_MEASUREITEM",
69 "WM_DELETEITEM",
70 "WM_VKEYTOITEM",
71 "WM_CHARTOITEM",
72 "WM_SETFONT", /* 0x30 */
73 "WM_GETFONT",
74 "WM_SETHOTKEY",
75 "WM_GETHOTKEY",
76 "wm_filesyschange",
77 "wm_isactiveicon",
78 "wm_queryparkicon",
79 "WM_QUERYDRAGICON",
80 "wm_querysavestate",
81 "WM_COMPAREITEM",
82 "wm_testing",
83 NULL,
84 "wm_otherwindowcreated",
85 "wm_otherwindowdestroyed",
86 "wm_activateshellwindow",
87 NULL,
89 NULL, /* 0x40 */
90 "wm_compacting", NULL, NULL,
91 "WM_COMMNOTIFY", NULL,
92 "WM_WINDOWPOSCHANGING", /* 0x0046 */
93 "WM_WINDOWPOSCHANGED", /* 0x0047 */
94 "WM_POWER", NULL,
95 "WM_COPYDATA",
96 "WM_CANCELJOURNAL", NULL, NULL,
97 "WM_NOTIFY", NULL,
99 /* 0x0050 */
100 "WM_INPUTLANGCHANGEREQUEST",
101 "WM_INPUTLANGCHANGE",
102 "WM_TCARD",
103 "WM_HELP",
104 "WM_USERCHANGED",
105 "WM_NOTIFYFORMAT", NULL, NULL,
106 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
108 /* 0x0060 */
109 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
110 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
112 /* 0x0070 */
113 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
114 NULL, NULL, NULL,
115 "WM_CONTEXTMENU",
116 "WM_STYLECHANGING",
117 "WM_STYLECHANGED",
118 "WM_DISPLAYCHANGE",
119 "WM_GETICON",
121 "WM_SETICON", /* 0x0080 */
122 "WM_NCCREATE", /* 0x0081 */
123 "WM_NCDESTROY", /* 0x0082 */
124 "WM_NCCALCSIZE", /* 0x0083 */
125 "WM_NCHITTEST", /* 0x0084 */
126 "WM_NCPAINT", /* 0x0085 */
127 "WM_NCACTIVATE", /* 0x0086 */
128 "WM_GETDLGCODE", /* 0x0087 */
129 "wm_syncpaint",
130 "wm_synctask", NULL, NULL, NULL, NULL, NULL, NULL,
132 /* 0x0090 */
133 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
134 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
136 /* 0x00A0 */
137 "WM_NCMOUSEMOVE", /* 0x00A0 */
138 "WM_NCLBUTTONDOWN", /* 0x00A1 */
139 "WM_NCLBUTTONUP", /* 0x00A2 */
140 "WM_NCLBUTTONDBLCLK", /* 0x00A3 */
141 "WM_NCRBUTTONDOWN", /* 0x00A4 */
142 "WM_NCRBUTTONUP", /* 0x00A5 */
143 "WM_NCRBUTTONDBLCLK", /* 0x00A6 */
144 "WM_NCMBUTTONDOWN", /* 0x00A7 */
145 "WM_NCMBUTTONUP", /* 0x00A8 */
146 "WM_NCMBUTTONDBLCLK", /* 0x00A9 */
147 NULL, NULL, NULL, NULL, NULL, NULL,
149 /* 0x00B0 - Win32 Edit controls */
150 "EM_GETSEL32", /* 0x00b0 */
151 "EM_SETSEL32", /* 0x00b1 */
152 "EM_GETRECT32", /* 0x00b2 */
153 "EM_SETRECT32", /* 0x00b3 */
154 "EM_SETRECTNP32", /* 0x00b4 */
155 "EM_SCROLL32", /* 0x00b5 */
156 "EM_LINESCROLL32", /* 0x00b6 */
157 "EM_SCROLLCARET32", /* 0x00b7 */
158 "EM_GETMODIFY32", /* 0x00b8 */
159 "EM_SETMODIFY32", /* 0x00b9 */
160 "EM_GETLINECOUNT32", /* 0x00ba */
161 "EM_LINEINDEX32", /* 0x00bb */
162 "EM_SETHANDLE32", /* 0x00bc */
163 "EM_GETHANDLE32", /* 0x00bd */
164 "EM_GETTHUMB32", /* 0x00be */
165 NULL, /* 0x00bf */
167 NULL, /* 0x00c0 */
168 "EM_LINELENGTH32", /* 0x00c1 */
169 "EM_REPLACESEL32", /* 0x00c2 */
170 NULL, /* 0x00c3 */
171 "EM_GETLINE32", /* 0x00c4 */
172 "EM_LIMITTEXT32", /* 0x00c5 */
173 "EM_CANUNDO32", /* 0x00c6 */
174 "EM_UNDO32", /* 0x00c7 */
175 "EM_FMTLINES32", /* 0x00c8 */
176 "EM_LINEFROMCHAR32", /* 0x00c9 */
177 NULL, /* 0x00ca */
178 "EM_SETTABSTOPS32", /* 0x00cb */
179 "EM_SETPASSWORDCHAR32", /* 0x00cc */
180 "EM_EMPTYUNDOBUFFER32", /* 0x00cd */
181 "EM_GETFIRSTVISIBLELINE32", /* 0x00ce */
182 "EM_SETREADONLY32", /* 0x00cf */
184 "EM_SETWORDBREAKPROC32", /* 0x00d0 */
185 "EM_GETWORDBREAKPROC32", /* 0x00d1 */
186 "EM_GETPASSWORDCHAR32", /* 0x00d2 */
187 "EM_SETMARGINS32", /* 0x00d3 */
188 "EM_GETMARGINS32", /* 0x00d4 */
189 "EM_GETLIMITTEXT32", /* 0x00d5 */
190 "EM_POSFROMCHAR32", /* 0x00d6 */
191 "EM_CHARFROMPOS32", /* 0x00d7 */
192 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
194 /* 0x00E0 - Win32 Scrollbars */
195 "SBM_SETPOS32", /* 0x00e0 */
196 "SBM_GETPOS32", /* 0x00e1 */
197 "SBM_SETRANGE32", /* 0x00e2 */
198 "SBM_GETRANGE32", /* 0x00e3 */
199 "SBM_ENABLE_ARROWS32", /* 0x00e4 */
200 NULL,
201 "SBM_SETRANGEREDRAW32", /* 0x00e6 */
202 NULL, NULL,
203 "SBM_SETSCROLLINFO32", /* 0x00e9 */
204 "SBM_GETSCROLLINFO32", /* 0x00ea */
205 NULL, NULL, NULL, NULL, NULL,
207 /* 0x00F0 - Win32 Buttons */
208 "BM_GETCHECK32", /* 0x00f0 */
209 "BM_SETCHECK32", /* 0x00f1 */
210 "BM_GETSTATE32", /* 0x00f2 */
211 "BM_SETSTATE32", /* 0x00f3 */
212 "BM_SETSTYLE32", /* 0x00f4 */
213 "BM_CLICK32", /* 0x00f5 */
214 "BM_GETIMAGE32", /* 0x00f6 */
215 "BM_SETIMAGE32", /* 0x00f7 */
216 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
218 "WM_KEYDOWN", /* 0x0100 */
219 "WM_KEYUP", /* 0x0101 */
220 "WM_CHAR", /* 0x0102 */
221 "WM_DEADCHAR", /* 0x0103 */
222 "WM_SYSKEYDOWN", /* 0x0104 */
223 "WM_SYSKEYUP", /* 0x0105 */
224 "WM_SYSCHAR", /* 0x0106 */
225 "WM_SYSDEADCHAR", /* 0x0107 */
226 "WM_KEYLAST", /* 0x0108 */
227 NULL,
228 "WM_CONVERTREQUEST",
229 "WM_CONVERTRESULT",
230 "WM_INTERIM", NULL, NULL, NULL,
232 "WM_INITDIALOG", /* 0x0110 */
233 "WM_COMMAND", /* 0x0111 */
234 "WM_SYSCOMMAND", /* 0x0112 */
235 "WM_TIMER", /* 0x0113 */
236 "WM_HSCROLL", /* 0x0114 */
237 "WM_VSCROLL", /* 0x0115 */
238 "WM_INITMENU", /* 0x0116 */
239 "WM_INITMENUPOPUP", /* 0x0117 */
240 "WM_SYSTIMER", /* 0x0118 */
241 NULL, NULL, NULL, NULL, NULL, NULL,
242 "WM_MENUSELECT", /* 0x011f */
244 "WM_MENUCHAR", /* 0x0120 */
245 "WM_ENTERIDLE", /* 0x0121 */
246 NULL, NULL, NULL, NULL, NULL, NULL,
247 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
249 /* 0x0130 */
250 NULL,
251 "wm_lbtrackpoint", /* 0x0131 */
252 "WM_CTLCOLORMSGBOX", /* 0x0132 */
253 "WM_CTLCOLOREDIT", /* 0x0133 */
254 "WM_CTLCOLORLISTBOX", /* 0x0134 */
255 "WM_CTLCOLORBTN", /* 0x0135 */
256 "WM_CTLCOLORDLG", /* 0x0136 */
257 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
258 "WM_CTLCOLORSTATIC", /* 0x0138 */
259 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
261 /* 0x0140 - Win32 Comboboxes */
262 "CB_GETEDITSEL32", /* 0x0140 */
263 "CB_LIMITTEXT32", /* 0x0141 */
264 "CB_SETEDITSEL32", /* 0x0142 */
265 "CB_ADDSTRING32", /* 0x0143 */
266 "CB_DELETESTRING32", /* 0x0144 */
267 "CB_DIR32", /* 0x0145 */
268 "CB_GETCOUNT32", /* 0x0146 */
269 "CB_GETCURSEL32", /* 0x0147 */
270 "CB_GETLBTEXT32", /* 0x0148 */
271 "CB_GETLBTEXTLEN32", /* 0x0149 */
272 "CB_INSERTSTRING32", /* 0x014a */
273 "CB_RESETCONTENT32", /* 0x014b */
274 "CB_FINDSTRING32", /* 0x014c */
275 "CB_SELECTSTRING32", /* 0x014d */
276 "CB_SETCURSEL32", /* 0x014e */
277 "CB_SHOWDROPDOWN32", /* 0x014f */
279 "CB_GETITEMDATA32", /* 0x0150 */
280 "CB_SETITEMDATA32", /* 0x0151 */
281 "CB_GETDROPPEDCONTROLRECT32",/* 0x0152 */
282 "CB_SETITEMHEIGHT32", /* 0x0153 */
283 "CB_GETITEMHEIGHT32", /* 0x0154 */
284 "CB_SETEXTENDEDUI32", /* 0x0155 */
285 "CB_GETEXTENDEDUI32", /* 0x0156 */
286 "CB_GETDROPPEDSTATE32", /* 0x0157 */
287 "CB_FINDSTRINGEXACT32", /* 0x0158 */
288 "CB_SETLOCALE32", /* 0x0159 */
289 "CB_GETLOCALE32", /* 0x015a */
290 "CB_GETTOPINDEX32", /* 0x015b */
291 "CB_SETTOPINDEX32", /* 0x015c */
292 "CB_GETHORIZONTALEXTENT32", /* 0x015d */
293 "CB_SETHORIZONTALEXTENT32", /* 0x015e */
294 "CB_GETDROPPEDWIDTH32", /* 0x015f */
296 "CB_SETDROPPEDWIDTH32", /* 0x0160 */
297 "CB_INITSTORAGE32", /* 0x0161 */
298 NULL, NULL, NULL, NULL, NULL, NULL,
299 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
301 /* 0x0170 - Win32 Static controls */
302 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
303 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
305 /* 0x0180 - Win32 Listboxes */
306 "LB_ADDSTRING32", /* 0x0180 */
307 "LB_INSERTSTRING32", /* 0x0181 */
308 "LB_DELETESTRING32", /* 0x0182 */
309 "LB_SELITEMRANGEEX32", /* 0x0183 */
310 "LB_RESETCONTENT32", /* 0x0184 */
311 "LB_SETSEL32", /* 0x0185 */
312 "LB_SETCURSEL32", /* 0x0186 */
313 "LB_GETSEL32", /* 0x0187 */
314 "LB_GETCURSEL32", /* 0x0188 */
315 "LB_GETTEXT32", /* 0x0189 */
316 "LB_GETTEXTLEN32", /* 0x018a */
317 "LB_GETCOUNT32", /* 0x018b */
318 "LB_SELECTSTRING32", /* 0x018c */
319 "LB_DIR32", /* 0x018d */
320 "LB_GETTOPINDEX32", /* 0x018e */
321 "LB_FINDSTRING32", /* 0x018f */
323 "LB_GETSELCOUNT32", /* 0x0190 */
324 "LB_GETSELITEMS32", /* 0x0191 */
325 "LB_SETTABSTOPS32", /* 0x0192 */
326 "LB_GETHORIZONTALEXTENT32", /* 0x0193 */
327 "LB_SETHORIZONTALEXTENT32", /* 0x0194 */
328 "LB_SETCOLUMNWIDTH32", /* 0x0195 */
329 "LB_ADDFILE32", /* 0x0196 */
330 "LB_SETTOPINDEX32", /* 0x0197 */
331 "LB_GETITEMRECT32", /* 0x0198 */
332 "LB_GETITEMDATA32", /* 0x0199 */
333 "LB_SETITEMDATA32", /* 0x019a */
334 "LB_SELITEMRANGE32", /* 0x019b */
335 "LB_SETANCHORINDEX32", /* 0x019c */
336 "LB_GETANCHORINDEX32", /* 0x019d */
337 "LB_SETCARETINDEX32", /* 0x019e */
338 "LB_GETCARETINDEX32", /* 0x019f */
340 "LB_SETITEMHEIGHT32", /* 0x01a0 */
341 "LB_GETITEMHEIGHT32", /* 0x01a1 */
342 "LB_FINDSTRINGEXACT32", /* 0x01a2 */
343 "LB_CARETON32", /* 0x01a3 */
344 "LB_CARETOFF32", /* 0x01a4 */
345 "LB_SETLOCALE32", /* 0x01a5 */
346 "LB_GETLOCALE32", /* 0x01a6 */
347 "LB_SETCOUNT32", /* 0x01a7 */
348 "LB_INITSTORAGE32", /* 0x01a8 */
349 "LB_ITEMFROMPOINT32", /* 0x01a9 */
350 NULL, NULL, NULL, NULL, NULL, NULL,
352 /* 0x01B0 */
353 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
354 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
356 /* 0x01C0 */
357 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
358 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
360 /* 0x01D0 */
361 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
362 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
364 /* 0x01E0 */
365 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
366 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
368 /* 0x01F0 */
369 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
370 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
372 "WM_MOUSEMOVE", /* 0x0200 */
373 "WM_LBUTTONDOWN", /* 0x0201 */
374 "WM_LBUTTONUP", /* 0x0202 */
375 "WM_LBUTTONDBLCLK", /* 0x0203 */
376 "WM_RBUTTONDOWN", /* 0x0204 */
377 "WM_RBUTTONUP", /* 0x0205 */
378 "WM_RBUTTONDBLCLK", /* 0x0206 */
379 "WM_MBUTTONDOWN", /* 0x0207 */
380 "WM_MBUTTONUP", /* 0x0208 */
381 "WM_MBUTTONDBLCLK", /* 0x0209 */
382 NULL, NULL, NULL, NULL, NULL, NULL,
384 "WM_PARENTNOTIFY", /* 0x0210 */
385 "WM_ENTERMENULOOP", /* 0x0211 */
386 "WM_EXITMENULOOP", /* 0x0212 */
387 "wm_nextmenu", /* 0x0213 */
388 "WM_SIZING",
389 "WM_CAPTURECHANGED",
390 "WM_MOVING", NULL,
391 "WM_POWERBROADCAST",
392 "WM_DEVICECHANGE", NULL, NULL, NULL, NULL, NULL, NULL,
394 "WM_MDICREATE", /* 0x0220 */
395 "WM_MDIDESTROY", /* 0x0221 */
396 "WM_MDIACTIVATE", /* 0x0222 */
397 "WM_MDIRESTORE", /* 0x0223 */
398 "WM_MDINEXT", /* 0x0224 */
399 "WM_MDIMAXIMIZE", /* 0x0225 */
400 "WM_MDITILE", /* 0x0226 */
401 "WM_MDICASCADE", /* 0x0227 */
402 "WM_MDIICONARRANGE", /* 0x0228 */
403 "WM_MDIGETACTIVE", /* 0x0229 */
405 "wm_dropobject",
406 "wm_querydropobject",
407 "wm_begindrag",
408 "wm_dragloop",
409 "wn_dragselect",
410 "wm_dragmove",
412 /* 0x0230*/
413 "WM_MDISETMENU", /* 0x0230 */
414 "WM_ENTERSIZEMOVE", /* 0x0231 */
415 "WM_EXITSIZEMOVE", /* 0x0232 */
416 "WM_DROPFILES", /* 0x0233 */
417 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
418 /* 0x0238*/
419 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
421 /* 0x0240 */
422 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
423 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
425 /* 0x0250 */
426 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
427 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
429 /* 0x0260 */
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,
433 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
435 /* 0x0280 */
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,
439 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,
444 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
446 /* 0x02c0 */
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,
450 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
452 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
453 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
454 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
455 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
457 "WM_CUT", /* 0x0300 */
458 "WM_COPY",
459 "WM_PASTE",
460 "WM_CLEAR",
461 "WM_UNDO",
462 "WM_RENDERFORMAT",
463 "WM_RENDERALLFORMATS",
464 "WM_DESTROYCLIPBOARD",
465 "WM_DRAWCLIPBOARD",
466 "WM_PAINTCLIPBOARD",
467 "WM_VSCROLLCLIPBOARD",
468 "WM_SIZECLIPBOARD",
469 "WM_ASKCBFORMATNAME",
470 "WM_CHANGECBCHAIN",
471 "WM_HSCROLLCLIPBOARD",
472 "WM_QUERYNEWPALETTE", /* 0x030f*/
474 "WM_PALETTEISCHANGING",
475 "WM_PALETTECHANGED",
476 "WM_HOTKEY", /* 0x0312 */
477 NULL, NULL, NULL, NULL,
478 "WM_PRINT",
479 "WM_PRINTCLIENT",
480 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,
485 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
487 /* 0x0340 */
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,
491 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,
496 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
498 /* 0x0380 */
499 "WM_PENWINFIRST",
500 "WM_RCRESULT",
501 "WM_HOOKRCRESULT",
502 "WM_GLOBALRCCHANGE",
503 "WM_SKB",
504 "WM_HEDITCTL",
505 NULL, NULL,
506 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
508 "WM_COALESCE_FIRST",
509 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
510 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
511 "WM_COALESCE_LAST",
513 /* 0x03a0 */
514 "MM_JOY1MOVE",
515 "MM_JOY2MOVE",
516 "MM_JOY1ZMOVE",
517 "MM_JOY2ZMOVE",
518 NULL, NULL, NULL, NULL,
519 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
521 /* 0x03b0 */
522 NULL, NULL, NULL, NULL, NULL,
523 "MM_JOY1BUTTONDOWN",
524 "MM_JOY2BUTTONDOWN",
525 "MM_JOY1BUTTONUP",
526 "MM_JOY2BUTTONUP",
527 "MM_MCINOTIFY",
528 NULL,
529 "MM_WOM_OPEN",
530 "MM_WOM_CLOSE",
531 "MM_WOM_DONE",
532 "MM_WIM_OPEN",
533 "MM_WIM_CLOSE",
535 /* 0x03c0 */
536 "MM_WIM_DATA",
537 "MM_MIM_OPEN",
538 "MM_MIM_CLOSE",
539 "MM_MIM_DATA",
540 "MM_MIM_LONGDATA",
541 "MM_MIM_ERROR",
542 "MM_MIM_LONGERROR",
543 "MM_MOM_OPEN",
544 "MM_MOM_CLOSE",
545 "MM_MOM_DONE",
546 NULL, NULL, NULL, NULL, NULL, NULL,
547 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
548 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
550 /* 0x03e0 */
551 "WM_DDE_INITIATE", /* 0x3E0 */
552 "WM_DDE_TERMINATE", /* 0x3E1 */
553 "WM_DDE_ADVISE", /* 0x3E2 */
554 "WM_DDE_UNADVISE", /* 0x3E3 */
555 "WM_DDE_ACK", /* 0x3E4 */
556 "WM_DDE_DATA", /* 0x3E5 */
557 "WM_DDE_REQUEST", /* 0x3E6 */
558 "WM_DDE_POKE", /* 0x3E7 */
559 "WM_DDE_EXECUTE", /* 0x3E8 */
560 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
563 /* 0x03f0 */
564 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
565 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
567 "WM_USER"
571 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
572 static BOOL16 SPY_ExcludeDWP = 0;
573 static int SPY_IndentLevel = 0;
575 #define SPY_EXCLUDE(msg) \
576 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
578 /***********************************************************************
579 * SPY_GetMsgName
581 const char *SPY_GetMsgName( UINT32 msg )
583 static char msg_buffer[20];
585 if (msg <= SPY_MAX_MSGNUM)
587 if (!MessageTypeNames[msg]) return "???";
588 return MessageTypeNames[msg];
590 sprintf( msg_buffer, "WM_USER+%04x", msg - WM_USER );
591 return msg_buffer;
594 /***********************************************************************
595 * SPY_GetWndName
597 const char *SPY_GetWndName( HWND32 hwnd )
599 static char wnd_buffer[16];
601 WND* pWnd = WIN_FindWndPtr( hwnd );
602 if( pWnd )
604 INT32 n = sizeof(wnd_buffer) - 6;
605 LPSTR p = wnd_buffer;
606 LPSTR src;
608 char postfix;
610 if( pWnd->text && pWnd->text[0] != '\0' )
612 src = pWnd->text;
613 *(p++) = postfix = '\"';
614 while ((n-- > 1) && *src) *p++ = *src++;
616 else /* get class name */
618 INT32 len;
620 *(p++)='{';
621 GlobalGetAtomName32A( pWnd->class->atomName, p, n + 1);
622 src = p += (len = lstrlen32A(p));
623 if( len >= n ) src = wnd_buffer; /* something nonzero */
624 postfix = '}';
626 if( *src ) for( n = 0; n < 3; n++ ) *(p++)='.';
627 *(p++) = postfix;
628 *(p++) = '\0';
630 else lstrcpy32A( wnd_buffer, "\"NULL\"" );
631 return wnd_buffer;
634 /***********************************************************************
635 * SPY_EnterMessage
637 void SPY_EnterMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg,
638 WPARAM32 wParam, LPARAM lParam )
640 LPCSTR pname;
642 if (!debugging_message || SPY_EXCLUDE(msg)) return;
644 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
645 switch(iFlag)
647 case SPY_DISPATCHMESSAGE16:
648 pname = SPY_GetWndName(hWnd);
649 dprintf_message(stddeb,"%*s(%04x) %-16s message [%04x] %s dispatched wp=%04x lp=%08lx\n",
650 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
651 wParam, lParam);
652 break;
654 case SPY_DISPATCHMESSAGE32:
655 pname = SPY_GetWndName(hWnd);
656 dprintf_message(stddeb,"%*s(%08x) %-16s message [%04x] %s dispatched wp=%08x lp=%08lx\n",
657 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
658 wParam, lParam);
659 break;
661 case SPY_SENDMESSAGE16:
662 case SPY_SENDMESSAGE32:
664 char taskName[30];
665 HTASK16 hTask = GetWindowTask16(hWnd);
667 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
668 else if (!hTask) strcpy( taskName, "Wine" );
669 else sprintf( taskName, "task %04x %s",
670 hTask, MODULE_GetModuleName(hTask) );
671 pname = SPY_GetWndName(hWnd);
673 if (iFlag == SPY_SENDMESSAGE16)
674 dprintf_message(stddeb,
675 "%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
676 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
677 taskName, wParam, lParam );
678 else
679 dprintf_message(stddeb,
680 "%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
681 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
682 taskName, wParam, lParam );
684 break;
686 case SPY_DEFWNDPROC16:
687 if( SPY_ExcludeDWP ) return;
688 dprintf_message(stddeb, "%*s(%04x) DefWindowProc16: %s [%04x] wp=%04x lp=%08lx\n",
689 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
690 msg, wParam, lParam );
691 break;
693 case SPY_DEFWNDPROC32:
694 if( SPY_ExcludeDWP ) return;
695 dprintf_message(stddeb, "%*s(%08x) DefWindowProc32: %s [%04x] wp=%08x lp=%08lx\n",
696 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
697 msg, wParam, lParam );
698 break;
700 SPY_IndentLevel += SPY_INDENT_UNIT;
704 /***********************************************************************
705 * SPY_ExitMessage
707 void SPY_ExitMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg, LRESULT lReturn )
709 LPCSTR pname;
711 if (!debugging_message || SPY_EXCLUDE(msg) ||
712 (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND32)) )
713 return;
715 if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
717 switch(iFlag)
719 case SPY_RESULT_DEFWND16:
720 dprintf_message(stddeb,"%*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
721 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
722 break;
724 case SPY_RESULT_DEFWND32:
725 dprintf_message(stddeb,"%*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n",
726 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
727 break;
729 case SPY_RESULT_OK16:
730 pname = SPY_GetWndName(hWnd);
731 dprintf_message(stddeb,"%*s(%04x) %-16s message [%04x] %s returned %08lx\n",
732 SPY_IndentLevel, "", hWnd, pname, msg,
733 SPY_GetMsgName( msg ), lReturn );
734 break;
736 case SPY_RESULT_OK32:
737 pname = SPY_GetWndName(hWnd);
738 dprintf_message(stddeb,"%*s(%08x) %-16s message [%04x] %s returned %08lx\n",
739 SPY_IndentLevel, "", hWnd, pname, msg,
740 SPY_GetMsgName( msg ), lReturn );
741 break;
743 case SPY_RESULT_INVALIDHWND16:
744 pname = SPY_GetWndName(hWnd);
745 dprintf_message(stddeb,"%*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
746 SPY_IndentLevel, "", hWnd, pname, msg,
747 SPY_GetMsgName( msg ) );
748 break;
750 case SPY_RESULT_INVALIDHWND32:
751 pname = SPY_GetWndName(hWnd);
752 dprintf_message(stddeb,"%*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
753 SPY_IndentLevel, "", hWnd, pname, msg,
754 SPY_GetMsgName( msg ) );
755 break;
760 /***********************************************************************
761 * SPY_Init
763 int SPY_Init(void)
765 int i;
766 char buffer[1024];
768 if (!debugging_message) return TRUE;
770 PROFILE_GetWineIniString( "Spy", "Include", "", buffer, sizeof(buffer) );
771 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
773 dprintf_message( stddeb, "SpyInit: Include=%s\n", buffer );
774 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
775 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
778 PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer, sizeof(buffer) );
779 if (buffer[0])
781 dprintf_message( stddeb, "SpyInit: Exclude=%s\n", buffer );
782 if (!strcmp( buffer, "EXCLUDEALL" ))
783 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
784 else
785 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
786 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
789 SPY_ExcludeDWP = PROFILE_GetWineIniInt( "Spy", "ExcludeDWP", 0 );
791 return 1;