Release 960913
[wine/multimedia.git] / misc / spy.c
blob1a1b325a7d07609a22005e332d2a4f7b5779128d
1 /*
2 * Message spying routines
4 * Copyright 1994, Bob Amstadt
5 * 1995, Alex Korobka
6 */
8 #define NO_TRANSITION_TYPES /* This file is Win32-clean */
9 #include <stdlib.h>
10 #include <stdio.h>
11 #include <string.h>
12 #include "windows.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, NULL, NULL,
98 NULL, /* 0x0050 */
99 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
100 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
102 /* 0x0060 */
103 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
104 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
106 /* 0x0070 */
107 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
108 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
110 NULL, /* 0x0080 */
111 "WM_NCCREATE", /* 0x0081 */
112 "WM_NCDESTROY", /* 0x0082 */
113 "WM_NCCALCSIZE", /* 0x0083 */
114 "WM_NCHITTEST", /* 0x0084 */
115 "WM_NCPAINT", /* 0x0085 */
116 "WM_NCACTIVATE", /* 0x0086 */
117 "WM_GETDLGCODE", /* 0x0087 */
118 "wm_syncpaint",
119 "wm_synctask", NULL, NULL, NULL, NULL, NULL, NULL,
121 /* 0x0090 */
122 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
123 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
125 /* 0x00A0 */
126 "WM_NCMOUSEMOVE", /* 0x00A0 */
127 "WM_NCLBUTTONDOWN", /* 0x00A1 */
128 "WM_NCLBUTTONUP", /* 0x00A2 */
129 "WM_NCLBUTTONDBLCLK", /* 0x00A3 */
130 "WM_NCRBUTTONDOWN", /* 0x00A4 */
131 "WM_NCRBUTTONUP", /* 0x00A5 */
132 "WM_NCRBUTTONDBLCLK", /* 0x00A6 */
133 "WM_NCMBUTTONDOWN", /* 0x00A7 */
134 "WM_NCMBUTTONUP", /* 0x00A8 */
135 "WM_NCMBUTTONDBLCLK", /* 0x00A9 */
136 NULL, NULL, NULL, NULL, NULL, NULL,
138 /* 0x00B0 - Win32 Edit controls */
139 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
140 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
142 /* 0x00C0 */
143 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
144 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
146 /* 0x00D0 */
147 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
148 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
150 /* 0x00E0 - Win32 Scrollbars */
151 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
152 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
154 /* 0x00F0 - Win32 Buttons */
155 "BM_GETCHECK32", /* 0x00f0 */
156 "BM_SETCHECK32", /* 0x00f1 */
157 "BM_GETSTATE32", /* 0x00f2 */
158 "BM_SETSTATE32", /* 0x00f3 */
159 "BM_SETSTYLE32", /* 0x00f4 */
160 "BM_CLICK32", /* 0x00f5 */
161 "BM_GETIMAGE32", /* 0x00f6 */
162 "BM_SETIMAGE32", /* 0x00f7 */
163 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
165 "WM_KEYDOWN", /* 0x0100 */
166 "WM_KEYUP", /* 0x0101 */
167 "WM_CHAR", /* 0x0102 */
168 "WM_DEADCHAR", /* 0x0103 */
169 "WM_SYSKEYDOWN", /* 0x0104 */
170 "WM_SYSKEYUP", /* 0x0105 */
171 "WM_SYSCHAR", /* 0x0106 */
172 "WM_SYSDEADCHAR", /* 0x0107 */
173 "WM_KEYLAST", /* 0x0108 */
174 NULL,
175 "WM_CONVERTREQUEST",
176 "WM_CONVERTRESULT",
177 "WM_INTERIM", NULL, NULL, NULL,
179 "WM_INITDIALOG", /* 0x0110 */
180 "WM_COMMAND", /* 0x0111 */
181 "WM_SYSCOMMAND", /* 0x0112 */
182 "WM_TIMER", /* 0x0113 */
183 "WM_HSCROLL", /* 0x0114 */
184 "WM_VSCROLL", /* 0x0115 */
185 "WM_INITMENU", /* 0x0116 */
186 "WM_INITMENUPOPUP", /* 0x0117 */
187 "WM_SYSTIMER", /* 0x0118 */
188 NULL, NULL, NULL, NULL, NULL, NULL,
189 "WM_MENUSELECT", /* 0x011f */
191 "WM_MENUCHAR", /* 0x0120 */
192 "WM_ENTERIDLE", /* 0x0121 */
193 NULL, NULL, NULL, NULL, NULL, NULL,
194 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
196 /* 0x0130 */
197 NULL,
198 "wm_lbtrackpoint", /* 0x0131 */
199 "WM_CTLCOLORMSGBOX", /* 0x0132 */
200 "WM_CTLCOLOREDIT", /* 0x0133 */
201 "WM_CTLCOLORLISTBOX", /* 0x0134 */
202 "WM_CTLCOLORBTN", /* 0x0135 */
203 "WM_CTLCOLORDLG", /* 0x0136 */
204 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
205 "WM_CTLCOLORSTATIC", /* 0x0138 */
206 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
208 /* 0x0140 - Win32 Comboboxes */
209 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
210 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
212 /* 0x0150 */
213 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
214 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
216 /* 0x0160 */
217 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
218 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
220 /* 0x0170 - Win32 Static controls */
221 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
222 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
224 /* 0x0180 - Win32 Listboxes */
225 "LB_ADDSTRING32", /* 0x0180 */
226 "LB_INSERTSTRING32", /* 0x0181 */
227 "LB_DELETESTRING32", /* 0x0182 */
228 "LB_SELITEMRANGEEX32", /* 0x0183 */
229 "LB_RESETCONTENT32", /* 0x0184 */
230 "LB_SETSEL32", /* 0x0185 */
231 "LB_SETCURSEL32", /* 0x0186 */
232 "LB_GETSEL32", /* 0x0187 */
233 "LB_GETCURSEL32", /* 0x0188 */
234 "LB_GETTEXT32", /* 0x0189 */
235 "LB_GETTEXTLEN32", /* 0x018a */
236 "LB_GETCOUNT32", /* 0x018b */
237 "LB_SELECTSTRING32", /* 0x018c */
238 "LB_DIR32", /* 0x018d */
239 "LB_GETTOPINDEX32", /* 0x018e */
240 "LB_FINDSTRING32", /* 0x018f */
242 "LB_GETSELCOUNT32", /* 0x0190 */
243 "LB_GETSELITEMS32", /* 0x0191 */
244 "LB_SETTABSTOPS32", /* 0x0192 */
245 "LB_GETHORIZONTALEXTENT32", /* 0x0193 */
246 "LB_SETHORIZONTALEXTENT32", /* 0x0194 */
247 "LB_SETCOLUMNWIDTH32", /* 0x0195 */
248 "LB_ADDFILE32", /* 0x0196 */
249 "LB_SETTOPINDEX32", /* 0x0197 */
250 "LB_GETITEMRECT32", /* 0x0198 */
251 "LB_GETITEMDATA32", /* 0x0199 */
252 "LB_SETITEMDATA32", /* 0x019a */
253 "LB_SELITEMRANGE32", /* 0x019b */
254 "LB_SETANCHORINDEX32", /* 0x019c */
255 "LB_GETANCHORINDEX32", /* 0x019d */
256 "LB_SETCARETINDEX32", /* 0x019e */
257 "LB_GETCARETINDEX32", /* 0x019f */
259 "LB_SETITEMHEIGHT32", /* 0x01a0 */
260 "LB_GETITEMHEIGHT32", /* 0x01a1 */
261 "LB_FINDSTRINGEXACT32", /* 0x01a2 */
262 NULL, NULL,
263 "LB_SETLOCALE32", /* 0x01a5 */
264 "LB_GETLOCALE32", /* 0x01a6 */
265 "LB_SETCOUNT32", /* 0x01a7 */
266 "LB_INITSTORAGE32", /* 0x01a8 */
267 "LB_ITEMFROMPOINT32", /* 0x01a9 */
268 NULL, NULL, NULL, NULL, NULL, NULL,
270 /* 0x01B0 */
271 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
272 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
274 /* 0x01C0 */
275 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
276 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
278 /* 0x01D0 */
279 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
280 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
282 /* 0x01E0 */
283 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
284 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
286 /* 0x01F0 */
287 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
288 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
290 "WM_MOUSEMOVE", /* 0x0200 */
291 "WM_LBUTTONDOWN", /* 0x0201 */
292 "WM_LBUTTONUP", /* 0x0202 */
293 "WM_LBUTTONDBLCLK", /* 0x0203 */
294 "WM_RBUTTONDOWN", /* 0x0204 */
295 "WM_RBUTTONUP", /* 0x0205 */
296 "WM_RBUTTONDBLCLK", /* 0x0206 */
297 "WM_MBUTTONDOWN", /* 0x0207 */
298 "WM_MBUTTONUP", /* 0x0208 */
299 "WM_MBUTTONDBLCLK", /* 0x0209 */
300 NULL, NULL, NULL, NULL, NULL, NULL,
302 "WM_PARENTNOTIFY", /* 0x0210 */
303 "WM_ENTERMENULOOP", /* 0x0211 */
304 "WM_EXITMENULOOP", /* 0x0212 */
305 "wm_nextmenu", /* 0x0213 */
306 NULL, NULL, NULL, NULL,
307 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
309 "WM_MDICREATE", /* 0x0220 */
310 "WM_MDIDESTROY", /* 0x0221 */
311 "WM_MDIACTIVATE", /* 0x0222 */
312 "WM_MDIRESTORE", /* 0x0223 */
313 "WM_MDINEXT", /* 0x0224 */
314 "WM_MDIMAXIMIZE", /* 0x0225 */
315 "WM_MDITILE", /* 0x0226 */
316 "WM_MDICASCADE", /* 0x0227 */
317 "WM_MDIICONARRANGE", /* 0x0228 */
318 "WM_MDIGETACTIVE", /* 0x0229 */
320 "wm_dropobject",
321 "wm_querydropobject",
322 "wm_begindrag",
323 "wm_dragloop",
324 "wn_dragselect",
325 "wm_dragmove",
327 /* 0x0230*/
328 "WM_MDISETMENU", /* 0x0230 */
329 "WM_ENTERSIZEMOVE", /* 0x0231 */
330 "WM_EXITSIZEMOVE", /* 0x0232 */
331 "WM_DROPFILES", /* 0x0233 */
332 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
333 /* 0x0238*/
334 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
336 /* 0x0240 */
337 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
338 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
340 /* 0x0250 */
341 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
342 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
344 /* 0x0260 */
345 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
346 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
347 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
348 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
350 /* 0x0280 */
351 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
352 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
353 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
354 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
356 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
357 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
358 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
359 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
361 /* 0x02c0 */
362 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
363 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
364 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
365 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
367 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
368 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
369 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
370 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
372 "WM_CUT", /* 0x0300 */
373 "WM_COPY",
374 "WM_PASTE",
375 "WM_CLEAR",
376 "WM_UNDO",
377 "WM_RENDERFORMAT",
378 "WM_RENDERALLFORMATS",
379 "WM_DESTROYCLIPBOARD",
380 "WM_DRAWCLIPBOARD",
381 "WM_PAINTCLIPBOARD",
382 "WM_VSCROLLCLIPBOARD",
383 "WM_SIZECLIPBOARD",
384 "WM_ASKCBFORMATNAME",
385 "WM_CHANGECBCHAIN",
386 "WM_HSCROLLCLIPBOARD",
387 "WM_QUERYNEWPALETTE", /* 0x030f*/
389 "WM_PALETTEISCHANGING",
390 "WM_PALETTECHANGED",
391 "WM_HOTKEY", /* 0x0312 */
392 NULL, NULL, NULL, NULL, NULL, NULL,
393 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
395 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
396 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
397 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
398 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
400 /* 0x0340 */
401 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
402 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
403 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
404 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
406 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
407 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
408 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
409 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
411 /* 0x0380 */
412 "WM_PENWINFIRST",
413 "WM_RCRESULT",
414 "WM_HOOKRCRESULT",
415 "WM_GLOBALRCCHANGE",
416 "WM_SKB",
417 "WM_HEDITCTL",
418 NULL, NULL,
419 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
421 "WM_COALESCE_FIRST",
422 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
423 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
424 "WM_COALESCE_LAST",
426 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
427 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
428 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
429 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
431 /* 0x03c0 */
432 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
433 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
434 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
435 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
437 /* 0x03e0 */
438 "WM_DDE_INITIATE", /* 0x3E0 */
439 "WM_DDE_TERMINATE", /* 0x3E1 */
440 "WM_DDE_ADVISE", /* 0x3E2 */
441 "WM_DDE_UNADVISE", /* 0x3E3 */
442 "WM_DDE_ACK", /* 0x3E4 */
443 "WM_DDE_DATA", /* 0x3E5 */
444 "WM_DDE_REQUEST", /* 0x3E6 */
445 "WM_DDE_POKE", /* 0x3E7 */
446 "WM_DDE_EXECUTE", /* 0x3E8 */
447 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
450 /* 0x03f0 */
451 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
452 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
454 "WM_USER"
458 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
459 static int SPY_IndentLevel = 0;
461 #define SPY_EXCLUDE(msg) \
462 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
464 /***********************************************************************
465 * SPY_GetMsgName
467 const char *SPY_GetMsgName( UINT32 msg )
469 static char buffer[20];
471 if (msg <= SPY_MAX_MSGNUM)
473 if (!MessageTypeNames[msg]) return "???";
474 return MessageTypeNames[msg];
476 sprintf( buffer, "WM_USER+%04x", msg - WM_USER );
477 return buffer;
481 /***********************************************************************
482 * SPY_EnterMessage
484 void SPY_EnterMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg,
485 WPARAM32 wParam, LPARAM lParam )
487 if (!debugging_message || SPY_EXCLUDE(msg)) return;
489 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
490 switch(iFlag)
492 case SPY_DISPATCHMESSAGE16:
493 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s dispatched wp=%04x lp=%08lx\n",
494 SPY_IndentLevel, "", hWnd, msg, SPY_GetMsgName( msg ),
495 wParam, lParam);
496 break;
498 case SPY_DISPATCHMESSAGE32:
499 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s dispatched wp=%08x lp=%08lx\n",
500 SPY_IndentLevel, "", hWnd, msg, SPY_GetMsgName( msg ),
501 wParam, lParam);
502 break;
504 case SPY_SENDMESSAGE16:
505 case SPY_SENDMESSAGE32:
507 char taskName[30];
508 HTASK16 hTask = GetWindowTask16(hWnd);
509 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
510 else if (!hTask) strcpy( taskName, "Wine" );
511 else sprintf( taskName, "task %04x %s",
512 hTask, MODULE_GetModuleName( GetExePtr(hTask) ) );
514 if (iFlag == SPY_SENDMESSAGE16)
515 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
516 SPY_IndentLevel, "", hWnd, msg,
517 SPY_GetMsgName( msg ), taskName, wParam,
518 lParam );
519 else
520 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
521 SPY_IndentLevel, "", hWnd, msg,
522 SPY_GetMsgName( msg ), taskName, wParam,
523 lParam );
525 break;
527 case SPY_DEFWNDPROC16:
528 dprintf_message(stddeb, "%*s(%04x) DefWindowProc: %s [%04x] wp=%04x lp=%08lx\n",
529 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
530 msg, wParam, lParam );
531 break;
533 case SPY_DEFWNDPROC32:
534 dprintf_message(stddeb, "%*s(%08x) DefWindowProc: %s [%04x] wp=%08x lp=%08lx\n",
535 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
536 msg, wParam, lParam );
537 break;
539 SPY_IndentLevel += SPY_INDENT_UNIT;
543 /***********************************************************************
544 * SPY_ExitMessage
546 void SPY_ExitMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg, LRESULT lReturn )
548 if (!debugging_message || SPY_EXCLUDE(msg)) return;
549 if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
551 switch(iFlag)
553 case SPY_RESULT_OK16:
554 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s returned %08lx\n",
555 SPY_IndentLevel, "", hWnd, msg,
556 SPY_GetMsgName( msg ), lReturn );
557 break;
558 case SPY_RESULT_OK32:
559 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s returned %08lx\n",
560 SPY_IndentLevel, "", hWnd, msg,
561 SPY_GetMsgName( msg ), lReturn );
562 break;
563 case SPY_RESULT_INVALIDHWND16:
564 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s HAS INVALID HWND\n",
565 SPY_IndentLevel, "", hWnd, msg,
566 SPY_GetMsgName( msg ) );
567 break;
568 case SPY_RESULT_INVALIDHWND32:
569 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s HAS INVALID HWND\n",
570 SPY_IndentLevel, "", hWnd, msg,
571 SPY_GetMsgName( msg ) );
572 break;
577 /***********************************************************************
578 * SPY_Init
580 int SPY_Init(void)
582 int i;
583 char buffer[512];
585 PROFILE_GetWineIniString( "Spy", "Include", "", buffer, sizeof(buffer) );
586 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
588 dprintf_message( stddeb, "SpyInit: Include=%s\n", buffer );
589 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
590 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
593 PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer, sizeof(buffer) );
594 if (buffer[0])
596 dprintf_message( stddeb, "SpyInit: Exclude=%s\n", buffer );
597 if (!strcmp( buffer, "EXCLUDEALL" ))
598 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
599 else
600 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
601 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
603 return 1;