Release 971130
[wine/hacks.git] / misc / spy.c
blob45f368b05b9ee4a8aee2eb6a6b5661e0a260bd36
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 "STM_SETICON32", /* 0x0170 */
303 "STM_GETICON32", /* 0x0171 */
304 "STM_SETIMAGE32", /* 0x0172 */
305 "STM_GETIMAGE32", /* 0x0173 */
306 NULL, NULL, NULL, NULL,
307 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
309 /* 0x0180 - Win32 Listboxes */
310 "LB_ADDSTRING32", /* 0x0180 */
311 "LB_INSERTSTRING32", /* 0x0181 */
312 "LB_DELETESTRING32", /* 0x0182 */
313 "LB_SELITEMRANGEEX32", /* 0x0183 */
314 "LB_RESETCONTENT32", /* 0x0184 */
315 "LB_SETSEL32", /* 0x0185 */
316 "LB_SETCURSEL32", /* 0x0186 */
317 "LB_GETSEL32", /* 0x0187 */
318 "LB_GETCURSEL32", /* 0x0188 */
319 "LB_GETTEXT32", /* 0x0189 */
320 "LB_GETTEXTLEN32", /* 0x018a */
321 "LB_GETCOUNT32", /* 0x018b */
322 "LB_SELECTSTRING32", /* 0x018c */
323 "LB_DIR32", /* 0x018d */
324 "LB_GETTOPINDEX32", /* 0x018e */
325 "LB_FINDSTRING32", /* 0x018f */
327 "LB_GETSELCOUNT32", /* 0x0190 */
328 "LB_GETSELITEMS32", /* 0x0191 */
329 "LB_SETTABSTOPS32", /* 0x0192 */
330 "LB_GETHORIZONTALEXTENT32", /* 0x0193 */
331 "LB_SETHORIZONTALEXTENT32", /* 0x0194 */
332 "LB_SETCOLUMNWIDTH32", /* 0x0195 */
333 "LB_ADDFILE32", /* 0x0196 */
334 "LB_SETTOPINDEX32", /* 0x0197 */
335 "LB_GETITEMRECT32", /* 0x0198 */
336 "LB_GETITEMDATA32", /* 0x0199 */
337 "LB_SETITEMDATA32", /* 0x019a */
338 "LB_SELITEMRANGE32", /* 0x019b */
339 "LB_SETANCHORINDEX32", /* 0x019c */
340 "LB_GETANCHORINDEX32", /* 0x019d */
341 "LB_SETCARETINDEX32", /* 0x019e */
342 "LB_GETCARETINDEX32", /* 0x019f */
344 "LB_SETITEMHEIGHT32", /* 0x01a0 */
345 "LB_GETITEMHEIGHT32", /* 0x01a1 */
346 "LB_FINDSTRINGEXACT32", /* 0x01a2 */
347 "LB_CARETON32", /* 0x01a3 */
348 "LB_CARETOFF32", /* 0x01a4 */
349 "LB_SETLOCALE32", /* 0x01a5 */
350 "LB_GETLOCALE32", /* 0x01a6 */
351 "LB_SETCOUNT32", /* 0x01a7 */
352 "LB_INITSTORAGE32", /* 0x01a8 */
353 "LB_ITEMFROMPOINT32", /* 0x01a9 */
354 NULL, NULL, NULL, NULL, NULL, NULL,
356 /* 0x01B0 */
357 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
358 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
360 /* 0x01C0 */
361 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
362 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
364 /* 0x01D0 */
365 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
366 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
368 /* 0x01E0 */
369 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
370 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
372 /* 0x01F0 */
373 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
374 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
376 "WM_MOUSEMOVE", /* 0x0200 */
377 "WM_LBUTTONDOWN", /* 0x0201 */
378 "WM_LBUTTONUP", /* 0x0202 */
379 "WM_LBUTTONDBLCLK", /* 0x0203 */
380 "WM_RBUTTONDOWN", /* 0x0204 */
381 "WM_RBUTTONUP", /* 0x0205 */
382 "WM_RBUTTONDBLCLK", /* 0x0206 */
383 "WM_MBUTTONDOWN", /* 0x0207 */
384 "WM_MBUTTONUP", /* 0x0208 */
385 "WM_MBUTTONDBLCLK", /* 0x0209 */
386 NULL, NULL, NULL, NULL, NULL, NULL,
388 "WM_PARENTNOTIFY", /* 0x0210 */
389 "WM_ENTERMENULOOP", /* 0x0211 */
390 "WM_EXITMENULOOP", /* 0x0212 */
391 "wm_nextmenu", /* 0x0213 */
392 "WM_SIZING",
393 "WM_CAPTURECHANGED",
394 "WM_MOVING", NULL,
395 "WM_POWERBROADCAST",
396 "WM_DEVICECHANGE", NULL, NULL, NULL, NULL, NULL, NULL,
398 "WM_MDICREATE", /* 0x0220 */
399 "WM_MDIDESTROY", /* 0x0221 */
400 "WM_MDIACTIVATE", /* 0x0222 */
401 "WM_MDIRESTORE", /* 0x0223 */
402 "WM_MDINEXT", /* 0x0224 */
403 "WM_MDIMAXIMIZE", /* 0x0225 */
404 "WM_MDITILE", /* 0x0226 */
405 "WM_MDICASCADE", /* 0x0227 */
406 "WM_MDIICONARRANGE", /* 0x0228 */
407 "WM_MDIGETACTIVE", /* 0x0229 */
409 "wm_dropobject",
410 "wm_querydropobject",
411 "wm_begindrag",
412 "wm_dragloop",
413 "wn_dragselect",
414 "wm_dragmove",
416 /* 0x0230*/
417 "WM_MDISETMENU", /* 0x0230 */
418 "WM_ENTERSIZEMOVE", /* 0x0231 */
419 "WM_EXITSIZEMOVE", /* 0x0232 */
420 "WM_DROPFILES", /* 0x0233 */
421 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
422 /* 0x0238*/
423 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
425 /* 0x0240 */
426 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
427 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
429 /* 0x0250 */
430 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
431 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
433 /* 0x0260 */
434 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
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,
439 /* 0x0280 */
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 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
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,
450 /* 0x02c0 */
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 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
457 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
458 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
459 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
461 "WM_CUT", /* 0x0300 */
462 "WM_COPY",
463 "WM_PASTE",
464 "WM_CLEAR",
465 "WM_UNDO",
466 "WM_RENDERFORMAT",
467 "WM_RENDERALLFORMATS",
468 "WM_DESTROYCLIPBOARD",
469 "WM_DRAWCLIPBOARD",
470 "WM_PAINTCLIPBOARD",
471 "WM_VSCROLLCLIPBOARD",
472 "WM_SIZECLIPBOARD",
473 "WM_ASKCBFORMATNAME",
474 "WM_CHANGECBCHAIN",
475 "WM_HSCROLLCLIPBOARD",
476 "WM_QUERYNEWPALETTE", /* 0x030f*/
478 "WM_PALETTEISCHANGING",
479 "WM_PALETTECHANGED",
480 "WM_HOTKEY", /* 0x0312 */
481 NULL, NULL, NULL, NULL,
482 "WM_PRINT",
483 "WM_PRINTCLIENT",
484 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
486 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
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,
491 /* 0x0340 */
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 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
498 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
499 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
500 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
502 /* 0x0380 */
503 "WM_PENWINFIRST",
504 "WM_RCRESULT",
505 "WM_HOOKRCRESULT",
506 "WM_GLOBALRCCHANGE",
507 "WM_SKB",
508 "WM_HEDITCTL",
509 NULL, NULL,
510 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
512 "WM_COALESCE_FIRST",
513 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
514 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
515 "WM_COALESCE_LAST",
517 /* 0x03a0 */
518 "MM_JOY1MOVE",
519 "MM_JOY2MOVE",
520 "MM_JOY1ZMOVE",
521 "MM_JOY2ZMOVE",
522 NULL, NULL, NULL, NULL,
523 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
525 /* 0x03b0 */
526 NULL, NULL, NULL, NULL, NULL,
527 "MM_JOY1BUTTONDOWN",
528 "MM_JOY2BUTTONDOWN",
529 "MM_JOY1BUTTONUP",
530 "MM_JOY2BUTTONUP",
531 "MM_MCINOTIFY",
532 NULL,
533 "MM_WOM_OPEN",
534 "MM_WOM_CLOSE",
535 "MM_WOM_DONE",
536 "MM_WIM_OPEN",
537 "MM_WIM_CLOSE",
539 /* 0x03c0 */
540 "MM_WIM_DATA",
541 "MM_MIM_OPEN",
542 "MM_MIM_CLOSE",
543 "MM_MIM_DATA",
544 "MM_MIM_LONGDATA",
545 "MM_MIM_ERROR",
546 "MM_MIM_LONGERROR",
547 "MM_MOM_OPEN",
548 "MM_MOM_CLOSE",
549 "MM_MOM_DONE",
550 NULL, NULL, NULL, NULL, NULL, NULL,
551 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
552 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
554 /* 0x03e0 */
555 "WM_DDE_INITIATE", /* 0x3E0 */
556 "WM_DDE_TERMINATE", /* 0x3E1 */
557 "WM_DDE_ADVISE", /* 0x3E2 */
558 "WM_DDE_UNADVISE", /* 0x3E3 */
559 "WM_DDE_ACK", /* 0x3E4 */
560 "WM_DDE_DATA", /* 0x3E5 */
561 "WM_DDE_REQUEST", /* 0x3E6 */
562 "WM_DDE_POKE", /* 0x3E7 */
563 "WM_DDE_EXECUTE", /* 0x3E8 */
564 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
567 /* 0x03f0 */
568 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
569 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
571 "WM_USER"
575 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
576 static BOOL16 SPY_ExcludeDWP = 0;
577 static int SPY_IndentLevel = 0;
579 #define SPY_EXCLUDE(msg) \
580 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
582 /***********************************************************************
583 * SPY_GetMsgName
585 const char *SPY_GetMsgName( UINT32 msg )
587 static char msg_buffer[20];
589 if (msg <= SPY_MAX_MSGNUM)
591 if (!MessageTypeNames[msg]) return "???";
592 return MessageTypeNames[msg];
594 sprintf( msg_buffer, "WM_USER+%04x", msg - WM_USER );
595 return msg_buffer;
598 /***********************************************************************
599 * SPY_GetWndName
601 const char *SPY_GetWndName( HWND32 hwnd )
603 static char wnd_buffer[16];
605 WND* pWnd = WIN_FindWndPtr( hwnd );
606 if( pWnd )
608 INT32 n = sizeof(wnd_buffer) - 6;
609 LPSTR p = wnd_buffer;
610 LPSTR src;
612 char postfix;
614 if( pWnd->text && pWnd->text[0] != '\0' )
616 src = pWnd->text;
617 *(p++) = postfix = '\"';
618 while ((n-- > 1) && *src) *p++ = *src++;
620 else /* get class name */
622 INT32 len;
624 *(p++)='{';
625 GlobalGetAtomName32A( pWnd->class->atomName, p, n + 1);
626 src = p += (len = lstrlen32A(p));
627 if( len >= n ) src = wnd_buffer; /* something nonzero */
628 postfix = '}';
630 if( *src ) for( n = 0; n < 3; n++ ) *(p++)='.';
631 *(p++) = postfix;
632 *(p++) = '\0';
634 else lstrcpy32A( wnd_buffer, "\"NULL\"" );
635 return wnd_buffer;
638 /***********************************************************************
639 * SPY_EnterMessage
641 void SPY_EnterMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg,
642 WPARAM32 wParam, LPARAM lParam )
644 LPCSTR pname;
646 if (!debugging_message || SPY_EXCLUDE(msg)) return;
648 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
649 switch(iFlag)
651 case SPY_DISPATCHMESSAGE16:
652 pname = SPY_GetWndName(hWnd);
653 dprintf_message(stddeb,"%*s(%04x) %-16s message [%04x] %s dispatched wp=%04x lp=%08lx\n",
654 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
655 wParam, lParam);
656 break;
658 case SPY_DISPATCHMESSAGE32:
659 pname = SPY_GetWndName(hWnd);
660 dprintf_message(stddeb,"%*s(%08x) %-16s message [%04x] %s dispatched wp=%08x lp=%08lx\n",
661 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
662 wParam, lParam);
663 break;
665 case SPY_SENDMESSAGE16:
666 case SPY_SENDMESSAGE32:
668 char taskName[30];
669 HTASK16 hTask = GetWindowTask16(hWnd);
671 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
672 else if (!hTask) strcpy( taskName, "Wine" );
673 else sprintf( taskName, "task %04x %s",
674 hTask, MODULE_GetModuleName(hTask) );
675 pname = SPY_GetWndName(hWnd);
677 if (iFlag == SPY_SENDMESSAGE16)
678 dprintf_message(stddeb,
679 "%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
680 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
681 taskName, wParam, lParam );
682 else
683 dprintf_message(stddeb,
684 "%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
685 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
686 taskName, wParam, lParam );
688 break;
690 case SPY_DEFWNDPROC16:
691 if( SPY_ExcludeDWP ) return;
692 dprintf_message(stddeb, "%*s(%04x) DefWindowProc16: %s [%04x] wp=%04x lp=%08lx\n",
693 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
694 msg, wParam, lParam );
695 break;
697 case SPY_DEFWNDPROC32:
698 if( SPY_ExcludeDWP ) return;
699 dprintf_message(stddeb, "%*s(%08x) DefWindowProc32: %s [%04x] wp=%08x lp=%08lx\n",
700 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
701 msg, wParam, lParam );
702 break;
704 SPY_IndentLevel += SPY_INDENT_UNIT;
708 /***********************************************************************
709 * SPY_ExitMessage
711 void SPY_ExitMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg, LRESULT lReturn )
713 LPCSTR pname;
715 if (!debugging_message || SPY_EXCLUDE(msg) ||
716 (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND32)) )
717 return;
719 if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
721 switch(iFlag)
723 case SPY_RESULT_DEFWND16:
724 dprintf_message(stddeb,"%*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
725 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
726 break;
728 case SPY_RESULT_DEFWND32:
729 dprintf_message(stddeb,"%*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n",
730 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
731 break;
733 case SPY_RESULT_OK16:
734 pname = SPY_GetWndName(hWnd);
735 dprintf_message(stddeb,"%*s(%04x) %-16s message [%04x] %s returned %08lx\n",
736 SPY_IndentLevel, "", hWnd, pname, msg,
737 SPY_GetMsgName( msg ), lReturn );
738 break;
740 case SPY_RESULT_OK32:
741 pname = SPY_GetWndName(hWnd);
742 dprintf_message(stddeb,"%*s(%08x) %-16s message [%04x] %s returned %08lx\n",
743 SPY_IndentLevel, "", hWnd, pname, msg,
744 SPY_GetMsgName( msg ), lReturn );
745 break;
747 case SPY_RESULT_INVALIDHWND16:
748 pname = SPY_GetWndName(hWnd);
749 dprintf_message(stddeb,"%*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
750 SPY_IndentLevel, "", hWnd, pname, msg,
751 SPY_GetMsgName( msg ) );
752 break;
754 case SPY_RESULT_INVALIDHWND32:
755 pname = SPY_GetWndName(hWnd);
756 dprintf_message(stddeb,"%*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
757 SPY_IndentLevel, "", hWnd, pname, msg,
758 SPY_GetMsgName( msg ) );
759 break;
764 /***********************************************************************
765 * SPY_Init
767 int SPY_Init(void)
769 int i;
770 char buffer[1024];
772 if (!debugging_message) return TRUE;
774 PROFILE_GetWineIniString( "Spy", "Include", "", buffer, sizeof(buffer) );
775 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
777 dprintf_message( stddeb, "SpyInit: Include=%s\n", buffer );
778 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
779 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
782 PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer, sizeof(buffer) );
783 if (buffer[0])
785 dprintf_message( stddeb, "SpyInit: Exclude=%s\n", buffer );
786 if (!strcmp( buffer, "EXCLUDEALL" ))
787 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
788 else
789 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
790 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
793 SPY_ExcludeDWP = PROFILE_GetWineIniInt( "Spy", "ExcludeDWP", 0 );
795 return 1;