Release 960818
[wine/hacks.git] / misc / spy.c
blob1a58dd4c48c09fcf0a27bc01d627296c5cf51c61
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, NULL, NULL,
97 NULL, /* 0x0050 */
98 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
99 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
101 /* 0x0060 */
102 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
103 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
105 /* 0x0070 */
106 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
107 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
109 NULL, /* 0x0080 */
110 "WM_NCCREATE", /* 0x0081 */
111 "WM_NCDESTROY", /* 0x0082 */
112 "WM_NCCALCSIZE", /* 0x0083 */
113 "WM_NCHITTEST", /* 0x0084 */
114 "WM_NCPAINT", /* 0x0085 */
115 "WM_NCACTIVATE", /* 0x0086 */
116 "WM_GETDLGCODE", /* 0x0087 */
117 "wm_syncpaint",
118 "wm_synctask", NULL, NULL, NULL, NULL, NULL, NULL,
120 /* 0x0090 */
121 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
122 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
124 /* 0x00A0 */
125 "WM_NCMOUSEMOVE", /* 0x00A0 */
126 "WM_NCLBUTTONDOWN", /* 0x00A1 */
127 "WM_NCLBUTTONUP", /* 0x00A2 */
128 "WM_NCLBUTTONDBLCLK", /* 0x00A3 */
129 "WM_NCRBUTTONDOWN", /* 0x00A4 */
130 "WM_NCRBUTTONUP", /* 0x00A5 */
131 "WM_NCRBUTTONDBLCLK", /* 0x00A6 */
132 "WM_NCMBUTTONDOWN", /* 0x00A7 */
133 "WM_NCMBUTTONUP", /* 0x00A8 */
134 "WM_NCMBUTTONDBLCLK", /* 0x00A9 */
135 NULL, NULL, NULL, NULL, NULL, NULL,
137 /* 0x00B0 - Win32 Edit controls */
138 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
139 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
141 /* 0x00C0 */
142 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
143 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
145 /* 0x00D0 */
146 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
147 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
149 /* 0x00E0 - Win32 Scrollbars */
150 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
151 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
153 /* 0x00F0 - Win32 Buttons */
154 "BM_GETCHECK32", /* 0x00f0 */
155 "BM_SETCHECK32", /* 0x00f1 */
156 "BM_GETSTATE32", /* 0x00f2 */
157 "BM_SETSTATE32", /* 0x00f3 */
158 "BM_SETSTYLE32", /* 0x00f4 */
159 "BM_CLICK32", /* 0x00f5 */
160 "BM_GETIMAGE32", /* 0x00f6 */
161 "BM_SETIMAGE32", /* 0x00f7 */
162 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
164 "WM_KEYDOWN", /* 0x0100 */
165 "WM_KEYUP", /* 0x0101 */
166 "WM_CHAR", /* 0x0102 */
167 "WM_DEADCHAR", /* 0x0103 */
168 "WM_SYSKEYDOWN", /* 0x0104 */
169 "WM_SYSKEYUP", /* 0x0105 */
170 "WM_SYSCHAR", /* 0x0106 */
171 "WM_SYSDEADCHAR", /* 0x0107 */
172 "WM_KEYLAST", /* 0x0108 */
173 NULL,
174 "WM_CONVERTREQUEST",
175 "WM_CONVERTRESULT",
176 "WM_INTERIM", NULL, NULL, NULL,
178 "WM_INITDIALOG", /* 0x0110 */
179 "WM_COMMAND", /* 0x0111 */
180 "WM_SYSCOMMAND", /* 0x0112 */
181 "WM_TIMER", /* 0x0113 */
182 "WM_HSCROLL", /* 0x0114 */
183 "WM_VSCROLL", /* 0x0115 */
184 "WM_INITMENU", /* 0x0116 */
185 "WM_INITMENUPOPUP", /* 0x0117 */
186 "WM_SYSTIMER", /* 0x0118 */
187 NULL, NULL, NULL, NULL, NULL, NULL,
188 "WM_MENUSELECT", /* 0x011f */
190 "WM_MENUCHAR", /* 0x0120 */
191 "WM_ENTERIDLE", /* 0x0121 */
192 NULL, NULL, NULL, NULL, NULL, NULL,
193 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
195 /* 0x0130 */
196 NULL,
197 "wm_lbtrackpoint", /* 0x0131 */
198 "WM_CTLCOLORMSGBOX", /* 0x0132 */
199 "WM_CTLCOLOREDIT", /* 0x0133 */
200 "WM_CTLCOLORLISTBOX", /* 0x0134 */
201 "WM_CTLCOLORBTN", /* 0x0135 */
202 "WM_CTLCOLORDLG", /* 0x0136 */
203 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
204 "WM_CTLCOLORSTATIC", /* 0x0138 */
205 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
207 /* 0x0140 - Win32 Comboboxes */
208 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
209 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
211 /* 0x0150 */
212 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
213 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
215 /* 0x0160 */
216 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
217 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
219 /* 0x0170 - Win32 Static controls */
220 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
221 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
223 /* 0x0180 - Win32 Listboxes */
224 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
225 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
227 /* 0x0190 */
228 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
229 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
231 /* 0x01A0 */
232 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
233 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
235 /* 0x01B0 */
236 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
237 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
239 /* 0x01C0 */
240 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
241 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
243 /* 0x01D0 */
244 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
245 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
247 /* 0x01E0 */
248 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
249 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
251 /* 0x01F0 */
252 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
253 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
255 "WM_MOUSEMOVE", /* 0x0200 */
256 "WM_LBUTTONDOWN", /* 0x0201 */
257 "WM_LBUTTONUP", /* 0x0202 */
258 "WM_LBUTTONDBLCLK", /* 0x0203 */
259 "WM_RBUTTONDOWN", /* 0x0204 */
260 "WM_RBUTTONUP", /* 0x0205 */
261 "WM_RBUTTONDBLCLK", /* 0x0206 */
262 "WM_MBUTTONDOWN", /* 0x0207 */
263 "WM_MBUTTONUP", /* 0x0208 */
264 "WM_MBUTTONDBLCLK", /* 0x0209 */
265 NULL, NULL, NULL, NULL, NULL, NULL,
267 "WM_PARENTNOTIFY", /* 0x0210 */
268 "WM_ENTERMENULOOP", /* 0x0211 */
269 "WM_EXITMENULOOP", /* 0x0212 */
270 "wm_nextmenu", /* 0x0213 */
271 NULL, NULL, NULL, NULL,
272 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
274 "WM_MDICREATE", /* 0x0220 */
275 "WM_MDIDESTROY", /* 0x0221 */
276 "WM_MDIACTIVATE", /* 0x0222 */
277 "WM_MDIRESTORE", /* 0x0223 */
278 "WM_MDINEXT", /* 0x0224 */
279 "WM_MDIMAXIMIZE", /* 0x0225 */
280 "WM_MDITILE", /* 0x0226 */
281 "WM_MDICASCADE", /* 0x0227 */
282 "WM_MDIICONARRANGE", /* 0x0228 */
283 "WM_MDIGETACTIVE", /* 0x0229 */
285 "wm_dropobject",
286 "wm_querydropobject",
287 "wm_begindrag",
288 "wm_dragloop",
289 "wn_dragselect",
290 "wm_dragmove",
292 /* 0x0230*/
293 "WM_MDISETMENU", /* 0x0230 */
294 "WM_ENTERSIZEMOVE", /* 0x0231 */
295 "WM_EXITSIZEMOVE", /* 0x0232 */
296 "WM_DROPFILES", /* 0x0233 */
297 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
298 /* 0x0238*/
299 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
301 /* 0x0240 */
302 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
303 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
305 /* 0x0250 */
306 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
307 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
309 /* 0x0260 */
310 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
311 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
312 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
313 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
315 /* 0x0280 */
316 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
317 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
318 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
319 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
321 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
322 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
323 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
324 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
326 /* 0x02c0 */
327 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
328 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
329 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
330 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
332 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
333 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
334 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
335 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
337 "WM_CUT", /* 0x0300 */
338 "WM_COPY",
339 "WM_PASTE",
340 "WM_CLEAR",
341 "WM_UNDO",
342 "WM_RENDERFORMAT",
343 "WM_RENDERALLFORMATS",
344 "WM_DESTROYCLIPBOARD",
345 "WM_DRAWCLIPBOARD",
346 "WM_PAINTCLIPBOARD",
347 "WM_VSCROLLCLIPBOARD",
348 "WM_SIZECLIPBOARD",
349 "WM_ASKCBFORMATNAME",
350 "WM_CHANGECBCHAIN",
351 "WM_HSCROLLCLIPBOARD",
352 "WM_QUERYNEWPALETTE", /* 0x030f*/
354 "WM_PALETTEISCHANGING",
355 "WM_PALETTECHANGED",
356 "WM_HOTKEY", /* 0x0312 */
357 NULL, NULL, NULL, NULL, NULL, NULL,
358 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
360 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
361 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
362 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
363 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
365 /* 0x0340 */
366 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,
371 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
372 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
373 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
374 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
376 /* 0x0380 */
377 "WM_PENWINFIRST",
378 "WM_RCRESULT",
379 "WM_HOOKRCRESULT",
380 "WM_GLOBALRCCHANGE",
381 "WM_SKB",
382 "WM_HEDITCTL",
383 NULL, NULL,
384 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
386 "WM_COALESCE_FIRST",
387 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
388 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
389 "WM_COALESCE_LAST",
391 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
392 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
393 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
394 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
396 /* 0x03c0 */
397 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
398 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
399 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
400 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
402 /* 0x03e0 */
403 "WM_DDE_INITIATE", /* 0x3E0 */
404 "WM_DDE_TERMINATE", /* 0x3E1 */
405 "WM_DDE_ADVISE", /* 0x3E2 */
406 "WM_DDE_UNADVISE", /* 0x3E3 */
407 "WM_DDE_ACK", /* 0x3E4 */
408 "WM_DDE_DATA", /* 0x3E5 */
409 "WM_DDE_REQUEST", /* 0x3E6 */
410 "WM_DDE_POKE", /* 0x3E7 */
411 "WM_DDE_EXECUTE", /* 0x3E8 */
412 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
415 /* 0x03f0 */
416 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
417 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
419 "WM_USER"
423 static BOOL SPY_Exclude[SPY_MAX_MSGNUM+1];
424 static int SPY_IndentLevel = 0;
426 #define SPY_EXCLUDE(msg) \
427 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
429 /***********************************************************************
430 * SPY_GetMsgName
432 static const char *SPY_GetMsgName( UINT msg )
434 static char buffer[20];
436 if (msg <= SPY_MAX_MSGNUM)
438 if (!MessageTypeNames[msg]) return "???";
439 return MessageTypeNames[msg];
441 sprintf( buffer, "WM_USER+%04x", msg - WM_USER );
442 return buffer;
446 /***********************************************************************
447 * SPY_EnterMessage
449 void SPY_EnterMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg,
450 WPARAM32 wParam, LPARAM lParam )
452 if (!debugging_message || SPY_EXCLUDE(msg)) return;
454 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
455 switch(iFlag)
457 case SPY_DISPATCHMESSAGE16:
458 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s dispatched wp=%04x lp=%08lx\n",
459 SPY_IndentLevel, "", hWnd, msg, SPY_GetMsgName( msg ),
460 wParam, lParam);
461 break;
463 case SPY_DISPATCHMESSAGE32:
464 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s dispatched wp=%08x lp=%08lx\n",
465 SPY_IndentLevel, "", hWnd, msg, SPY_GetMsgName( msg ),
466 wParam, lParam);
467 break;
469 case SPY_SENDMESSAGE16:
470 case SPY_SENDMESSAGE32:
472 char taskName[30];
473 HTASK hTask = GetWindowTask16(hWnd);
474 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
475 else if (!hTask) strcpy( taskName, "Wine" );
476 else sprintf( taskName, "task %04x %s",
477 hTask, MODULE_GetModuleName( GetExePtr(hTask) ) );
479 if (iFlag == SPY_SENDMESSAGE16)
480 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
481 SPY_IndentLevel, "", hWnd, msg,
482 SPY_GetMsgName( msg ), taskName, wParam,
483 lParam );
484 else
485 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
486 SPY_IndentLevel, "", hWnd, msg,
487 SPY_GetMsgName( msg ), taskName, wParam,
488 lParam );
490 break;
492 case SPY_DEFWNDPROC16:
493 dprintf_message(stddeb, "%*s(%04x) DefWindowProc: %s [%04x] wp=%04x lp=%08lx\n",
494 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
495 msg, wParam, lParam );
496 break;
498 case SPY_DEFWNDPROC32:
499 dprintf_message(stddeb, "%*s(%08x) DefWindowProc: %s [%04x] wp=%08x lp=%08lx\n",
500 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
501 msg, wParam, lParam );
502 break;
504 SPY_IndentLevel += SPY_INDENT_UNIT;
508 /***********************************************************************
509 * SPY_ExitMessage
511 void SPY_ExitMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg, LRESULT lReturn )
513 if (!debugging_message || SPY_EXCLUDE(msg)) return;
514 if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
516 switch(iFlag)
518 case SPY_RESULT_OK16:
519 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s returned %08lx\n",
520 SPY_IndentLevel, "", hWnd, msg,
521 SPY_GetMsgName( msg ), lReturn );
522 break;
523 case SPY_RESULT_OK32:
524 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s returned %08lx\n",
525 SPY_IndentLevel, "", hWnd, msg,
526 SPY_GetMsgName( msg ), lReturn );
527 break;
528 case SPY_RESULT_INVALIDHWND16:
529 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s HAS INVALID HWND\n",
530 SPY_IndentLevel, "", hWnd, msg,
531 SPY_GetMsgName( msg ) );
532 break;
533 case SPY_RESULT_INVALIDHWND32:
534 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s HAS INVALID HWND\n",
535 SPY_IndentLevel, "", hWnd, msg,
536 SPY_GetMsgName( msg ) );
537 break;
542 /***********************************************************************
543 * SPY_Init
545 int SPY_Init(void)
547 int i;
548 char buffer[512];
550 PROFILE_GetWineIniString( "Spy", "Include", "", buffer, sizeof(buffer) );
551 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
553 dprintf_message( stddeb, "SpyInit: Include=%s\n", buffer );
554 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
555 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
558 PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer, sizeof(buffer) );
559 if (buffer[0])
561 dprintf_message( stddeb, "SpyInit: Exclude=%s\n", buffer );
562 if (!strcmp( buffer, "EXCLUDEALL" ))
563 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
564 else
565 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
566 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
568 return 1;