Got rid of PROFILE_ functions, now accessing Wine config options
[wine.git] / misc / spy.c
blob6caaf7e0e75462fdf65aad4260967d90ecdc7555
1 /*
2 * Message spying routines
4 * Copyright 1994, Bob Amstadt
5 * 1995, Alex Korobka
6 */
8 #include <stdlib.h>
9 #include <string.h>
10 #include <stdio.h>
11 #include "windef.h"
12 #include "wingdi.h"
13 #include "wine/winuser16.h"
14 #include "wine/winbase16.h"
15 #include "win.h"
16 #include "module.h"
17 #include "options.h"
18 #include "debugtools.h"
19 #include "spy.h"
20 #include "commctrl.h"
22 DEFAULT_DEBUG_CHANNEL(message)
24 #define SPY_MAX_MSGNUM WM_USER
25 #define SPY_INDENT_UNIT 4 /* 4 spaces */
27 static const char * const MessageTypeNames[SPY_MAX_MSGNUM + 1] =
29 "wm_null", /* 0x00 */
30 "WM_CREATE",
31 "WM_DESTROY",
32 "WM_MOVE",
33 "wm_sizewait",
34 "WM_SIZE",
35 "WM_ACTIVATE",
36 "WM_SETFOCUS",
37 "WM_KILLFOCUS",
38 "WM_SETVISIBLE",
39 "WM_ENABLE",
40 "WM_SETREDRAW",
41 "WM_SETTEXT",
42 "WM_GETTEXT",
43 "WM_GETTEXTLENGTH",
44 "WM_PAINT",
45 "WM_CLOSE", /* 0x10 */
46 "WM_QUERYENDSESSION",
47 "WM_QUIT",
48 "WM_QUERYOPEN",
49 "WM_ERASEBKGND",
50 "WM_SYSCOLORCHANGE",
51 "WM_ENDSESSION",
52 "wm_systemerror",
53 "WM_SHOWWINDOW",
54 "WM_CTLCOLOR",
55 "WM_WININICHANGE",
56 "WM_DEVMODECHANGE",
57 "WM_ACTIVATEAPP",
58 "WM_FONTCHANGE",
59 "WM_TIMECHANGE",
60 "WM_CANCELMODE",
61 "WM_SETCURSOR", /* 0x20 */
62 "WM_MOUSEACTIVATE",
63 "WM_CHILDACTIVATE",
64 "WM_QUEUESYNC",
65 "WM_GETMINMAXINFO",
66 "wm_unused3",
67 "wm_painticon",
68 "WM_ICONERASEBKGND",
69 "WM_NEXTDLGCTL",
70 "wm_alttabactive",
71 "WM_SPOOLERSTATUS",
72 "WM_DRAWITEM",
73 "WM_MEASUREITEM",
74 "WM_DELETEITEM",
75 "WM_VKEYTOITEM",
76 "WM_CHARTOITEM",
77 "WM_SETFONT", /* 0x30 */
78 "WM_GETFONT",
79 "WM_SETHOTKEY",
80 "WM_GETHOTKEY",
81 "wm_filesyschange",
82 "wm_isactiveicon",
83 "wm_queryparkicon",
84 "WM_QUERYDRAGICON",
85 "wm_querysavestate",
86 "WM_COMPAREITEM",
87 "wm_testing",
88 NULL,
89 "wm_otherwindowcreated",
90 "wm_otherwindowdestroyed",
91 "wm_activateshellwindow",
92 NULL,
94 NULL, /* 0x40 */
95 "wm_compacting", NULL, NULL,
96 "WM_COMMNOTIFY", NULL,
97 "WM_WINDOWPOSCHANGING", /* 0x0046 */
98 "WM_WINDOWPOSCHANGED", /* 0x0047 */
99 "WM_POWER", NULL,
100 "WM_COPYDATA",
101 "WM_CANCELJOURNAL", NULL, NULL,
102 "WM_NOTIFY", NULL,
104 /* 0x0050 */
105 "WM_INPUTLANGCHANGEREQUEST",
106 "WM_INPUTLANGCHANGE",
107 "WM_TCARD",
108 "WM_HELP",
109 "WM_USERCHANGED",
110 "WM_NOTIFYFORMAT", NULL, NULL,
111 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
113 /* 0x0060 */
114 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
115 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
117 /* 0x0070 */
118 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
119 NULL, NULL, NULL,
120 "WM_CONTEXTMENU",
121 "WM_STYLECHANGING",
122 "WM_STYLECHANGED",
123 "WM_DISPLAYCHANGE",
124 "WM_GETICON",
126 "WM_SETICON", /* 0x0080 */
127 "WM_NCCREATE", /* 0x0081 */
128 "WM_NCDESTROY", /* 0x0082 */
129 "WM_NCCALCSIZE", /* 0x0083 */
130 "WM_NCHITTEST", /* 0x0084 */
131 "WM_NCPAINT", /* 0x0085 */
132 "WM_NCACTIVATE", /* 0x0086 */
133 "WM_GETDLGCODE", /* 0x0087 */
134 "WM_SYNCPAINT",
135 "WM_SYNCTASK", NULL, NULL, NULL, NULL, NULL, NULL,
137 /* 0x0090 */
138 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
139 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
141 /* 0x00A0 */
142 "WM_NCMOUSEMOVE", /* 0x00A0 */
143 "WM_NCLBUTTONDOWN", /* 0x00A1 */
144 "WM_NCLBUTTONUP", /* 0x00A2 */
145 "WM_NCLBUTTONDBLCLK", /* 0x00A3 */
146 "WM_NCRBUTTONDOWN", /* 0x00A4 */
147 "WM_NCRBUTTONUP", /* 0x00A5 */
148 "WM_NCRBUTTONDBLCLK", /* 0x00A6 */
149 "WM_NCMBUTTONDOWN", /* 0x00A7 */
150 "WM_NCMBUTTONUP", /* 0x00A8 */
151 "WM_NCMBUTTONDBLCLK", /* 0x00A9 */
152 NULL, NULL, NULL, NULL, NULL, NULL,
154 /* 0x00B0 - Win32 Edit controls */
155 "EM_GETSEL32", /* 0x00b0 */
156 "EM_SETSEL32", /* 0x00b1 */
157 "EM_GETRECT32", /* 0x00b2 */
158 "EM_SETRECT32", /* 0x00b3 */
159 "EM_SETRECTNP32", /* 0x00b4 */
160 "EM_SCROLL32", /* 0x00b5 */
161 "EM_LINESCROLL32", /* 0x00b6 */
162 "EM_SCROLLCARET32", /* 0x00b7 */
163 "EM_GETMODIFY32", /* 0x00b8 */
164 "EM_SETMODIFY32", /* 0x00b9 */
165 "EM_GETLINECOUNT32", /* 0x00ba */
166 "EM_LINEINDEX32", /* 0x00bb */
167 "EM_SETHANDLE32", /* 0x00bc */
168 "EM_GETHANDLE32", /* 0x00bd */
169 "EM_GETTHUMB32", /* 0x00be */
170 NULL, /* 0x00bf */
172 NULL, /* 0x00c0 */
173 "EM_LINELENGTH32", /* 0x00c1 */
174 "EM_REPLACESEL32", /* 0x00c2 */
175 NULL, /* 0x00c3 */
176 "EM_GETLINE32", /* 0x00c4 */
177 "EM_LIMITTEXT32", /* 0x00c5 */
178 "EM_CANUNDO32", /* 0x00c6 */
179 "EM_UNDO32", /* 0x00c7 */
180 "EM_FMTLINES32", /* 0x00c8 */
181 "EM_LINEFROMCHAR32", /* 0x00c9 */
182 NULL, /* 0x00ca */
183 "EM_SETTABSTOPS32", /* 0x00cb */
184 "EM_SETPASSWORDCHAR32", /* 0x00cc */
185 "EM_EMPTYUNDOBUFFER32", /* 0x00cd */
186 "EM_GETFIRSTVISIBLELINE32", /* 0x00ce */
187 "EM_SETREADONLY32", /* 0x00cf */
189 "EM_SETWORDBREAKPROC32", /* 0x00d0 */
190 "EM_GETWORDBREAKPROC32", /* 0x00d1 */
191 "EM_GETPASSWORDCHAR32", /* 0x00d2 */
192 "EM_SETMARGINS32", /* 0x00d3 */
193 "EM_GETMARGINS32", /* 0x00d4 */
194 "EM_GETLIMITTEXT32", /* 0x00d5 */
195 "EM_POSFROMCHAR32", /* 0x00d6 */
196 "EM_CHARFROMPOS32", /* 0x00d7 */
197 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
199 /* 0x00E0 - Win32 Scrollbars */
200 "SBM_SETPOS32", /* 0x00e0 */
201 "SBM_GETPOS32", /* 0x00e1 */
202 "SBM_SETRANGE32", /* 0x00e2 */
203 "SBM_GETRANGE32", /* 0x00e3 */
204 "SBM_ENABLE_ARROWS32", /* 0x00e4 */
205 NULL,
206 "SBM_SETRANGEREDRAW32", /* 0x00e6 */
207 NULL, NULL,
208 "SBM_SETSCROLLINFO32", /* 0x00e9 */
209 "SBM_GETSCROLLINFO32", /* 0x00ea */
210 NULL, NULL, NULL, NULL, NULL,
212 /* 0x00F0 - Win32 Buttons */
213 "BM_GETCHECK32", /* 0x00f0 */
214 "BM_SETCHECK32", /* 0x00f1 */
215 "BM_GETSTATE32", /* 0x00f2 */
216 "BM_SETSTATE32", /* 0x00f3 */
217 "BM_SETSTYLE32", /* 0x00f4 */
218 "BM_CLICK32", /* 0x00f5 */
219 "BM_GETIMAGE32", /* 0x00f6 */
220 "BM_SETIMAGE32", /* 0x00f7 */
221 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
223 "WM_KEYDOWN", /* 0x0100 */
224 "WM_KEYUP", /* 0x0101 */
225 "WM_CHAR", /* 0x0102 */
226 "WM_DEADCHAR", /* 0x0103 */
227 "WM_SYSKEYDOWN", /* 0x0104 */
228 "WM_SYSKEYUP", /* 0x0105 */
229 "WM_SYSCHAR", /* 0x0106 */
230 "WM_SYSDEADCHAR", /* 0x0107 */
231 "WM_KEYLAST", /* 0x0108 */
232 NULL,
233 "WM_CONVERTREQUEST",
234 "WM_CONVERTRESULT",
235 "WM_INTERIM", NULL, NULL, NULL,
237 "WM_INITDIALOG", /* 0x0110 */
238 "WM_COMMAND", /* 0x0111 */
239 "WM_SYSCOMMAND", /* 0x0112 */
240 "WM_TIMER", /* 0x0113 */
241 "WM_HSCROLL", /* 0x0114 */
242 "WM_VSCROLL", /* 0x0115 */
243 "WM_INITMENU", /* 0x0116 */
244 "WM_INITMENUPOPUP", /* 0x0117 */
245 "WM_SYSTIMER", /* 0x0118 */
246 NULL, NULL, NULL, NULL, NULL, NULL,
247 "WM_MENUSELECT", /* 0x011f */
249 "WM_MENUCHAR", /* 0x0120 */
250 "WM_ENTERIDLE", /* 0x0121 */
251 NULL, NULL, NULL, NULL, NULL, NULL,
252 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
254 /* 0x0130 */
255 NULL,
256 "WM_LBTRACKPOINT", /* 0x0131 */
257 "WM_CTLCOLORMSGBOX", /* 0x0132 */
258 "WM_CTLCOLOREDIT", /* 0x0133 */
259 "WM_CTLCOLORLISTBOX", /* 0x0134 */
260 "WM_CTLCOLORBTN", /* 0x0135 */
261 "WM_CTLCOLORDLG", /* 0x0136 */
262 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
263 "WM_CTLCOLORSTATIC", /* 0x0138 */
264 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
266 /* 0x0140 - Win32 Comboboxes */
267 "CB_GETEDITSEL32", /* 0x0140 */
268 "CB_LIMITTEXT32", /* 0x0141 */
269 "CB_SETEDITSEL32", /* 0x0142 */
270 "CB_ADDSTRING32", /* 0x0143 */
271 "CB_DELETESTRING32", /* 0x0144 */
272 "CB_DIR32", /* 0x0145 */
273 "CB_GETCOUNT32", /* 0x0146 */
274 "CB_GETCURSEL32", /* 0x0147 */
275 "CB_GETLBTEXT32", /* 0x0148 */
276 "CB_GETLBTEXTLEN32", /* 0x0149 */
277 "CB_INSERTSTRING32", /* 0x014a */
278 "CB_RESETCONTENT32", /* 0x014b */
279 "CB_FINDSTRING32", /* 0x014c */
280 "CB_SELECTSTRING32", /* 0x014d */
281 "CB_SETCURSEL32", /* 0x014e */
282 "CB_SHOWDROPDOWN32", /* 0x014f */
284 "CB_GETITEMDATA32", /* 0x0150 */
285 "CB_SETITEMDATA32", /* 0x0151 */
286 "CB_GETDROPPEDCONTROLRECT32",/* 0x0152 */
287 "CB_SETITEMHEIGHT32", /* 0x0153 */
288 "CB_GETITEMHEIGHT32", /* 0x0154 */
289 "CB_SETEXTENDEDUI32", /* 0x0155 */
290 "CB_GETEXTENDEDUI32", /* 0x0156 */
291 "CB_GETDROPPEDSTATE32", /* 0x0157 */
292 "CB_FINDSTRINGEXACT32", /* 0x0158 */
293 "CB_SETLOCALE32", /* 0x0159 */
294 "CB_GETLOCALE32", /* 0x015a */
295 "CB_GETTOPINDEX32", /* 0x015b */
296 "CB_SETTOPINDEX32", /* 0x015c */
297 "CB_GETHORIZONTALEXTENT32", /* 0x015d */
298 "CB_SETHORIZONTALEXTENT32", /* 0x015e */
299 "CB_GETDROPPEDWIDTH32", /* 0x015f */
301 "CB_SETDROPPEDWIDTH32", /* 0x0160 */
302 "CB_INITSTORAGE32", /* 0x0161 */
303 NULL, NULL, NULL, NULL, NULL, NULL,
304 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
306 /* 0x0170 - Win32 Static controls */
307 "STM_SETICON32", /* 0x0170 */
308 "STM_GETICON32", /* 0x0171 */
309 "STM_SETIMAGE32", /* 0x0172 */
310 "STM_GETIMAGE32", /* 0x0173 */
311 NULL, NULL, NULL, NULL,
312 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
314 /* 0x0180 - Win32 Listboxes */
315 "LB_ADDSTRING32", /* 0x0180 */
316 "LB_INSERTSTRING32", /* 0x0181 */
317 "LB_DELETESTRING32", /* 0x0182 */
318 "LB_SELITEMRANGEEX32", /* 0x0183 */
319 "LB_RESETCONTENT32", /* 0x0184 */
320 "LB_SETSEL32", /* 0x0185 */
321 "LB_SETCURSEL32", /* 0x0186 */
322 "LB_GETSEL32", /* 0x0187 */
323 "LB_GETCURSEL32", /* 0x0188 */
324 "LB_GETTEXT32", /* 0x0189 */
325 "LB_GETTEXTLEN32", /* 0x018a */
326 "LB_GETCOUNT32", /* 0x018b */
327 "LB_SELECTSTRING32", /* 0x018c */
328 "LB_DIR32", /* 0x018d */
329 "LB_GETTOPINDEX32", /* 0x018e */
330 "LB_FINDSTRING32", /* 0x018f */
332 "LB_GETSELCOUNT32", /* 0x0190 */
333 "LB_GETSELITEMS32", /* 0x0191 */
334 "LB_SETTABSTOPS32", /* 0x0192 */
335 "LB_GETHORIZONTALEXTENT32", /* 0x0193 */
336 "LB_SETHORIZONTALEXTENT32", /* 0x0194 */
337 "LB_SETCOLUMNWIDTH32", /* 0x0195 */
338 "LB_ADDFILE32", /* 0x0196 */
339 "LB_SETTOPINDEX32", /* 0x0197 */
340 "LB_GETITEMRECT32", /* 0x0198 */
341 "LB_GETITEMDATA32", /* 0x0199 */
342 "LB_SETITEMDATA32", /* 0x019a */
343 "LB_SELITEMRANGE32", /* 0x019b */
344 "LB_SETANCHORINDEX32", /* 0x019c */
345 "LB_GETANCHORINDEX32", /* 0x019d */
346 "LB_SETCARETINDEX32", /* 0x019e */
347 "LB_GETCARETINDEX32", /* 0x019f */
349 "LB_SETITEMHEIGHT32", /* 0x01a0 */
350 "LB_GETITEMHEIGHT32", /* 0x01a1 */
351 "LB_FINDSTRINGEXACT32", /* 0x01a2 */
352 "LB_CARETON32", /* 0x01a3 */
353 "LB_CARETOFF32", /* 0x01a4 */
354 "LB_SETLOCALE32", /* 0x01a5 */
355 "LB_GETLOCALE32", /* 0x01a6 */
356 "LB_SETCOUNT32", /* 0x01a7 */
357 "LB_INITSTORAGE32", /* 0x01a8 */
358 "LB_ITEMFROMPOINT32", /* 0x01a9 */
359 NULL, NULL, NULL, NULL, NULL, NULL,
361 /* 0x01B0 */
362 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
363 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
365 /* 0x01C0 */
366 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
367 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
369 /* 0x01D0 */
370 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
371 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
373 /* 0x01E0 */
374 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
375 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
377 /* 0x01F0 */
378 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
379 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
381 "WM_MOUSEMOVE", /* 0x0200 */
382 "WM_LBUTTONDOWN", /* 0x0201 */
383 "WM_LBUTTONUP", /* 0x0202 */
384 "WM_LBUTTONDBLCLK", /* 0x0203 */
385 "WM_RBUTTONDOWN", /* 0x0204 */
386 "WM_RBUTTONUP", /* 0x0205 */
387 "WM_RBUTTONDBLCLK", /* 0x0206 */
388 "WM_MBUTTONDOWN", /* 0x0207 */
389 "WM_MBUTTONUP", /* 0x0208 */
390 "WM_MBUTTONDBLCLK", /* 0x0209 */
391 NULL, NULL, NULL, NULL, NULL, NULL,
393 "WM_PARENTNOTIFY", /* 0x0210 */
394 "WM_ENTERMENULOOP", /* 0x0211 */
395 "WM_EXITMENULOOP", /* 0x0212 */
396 "WM_NEXTMENU", /* 0x0213 */
397 "WM_SIZING",
398 "WM_CAPTURECHANGED",
399 "WM_MOVING", NULL,
400 "WM_POWERBROADCAST",
401 "WM_DEVICECHANGE", NULL, NULL, NULL, NULL, NULL, NULL,
403 "WM_MDICREATE", /* 0x0220 */
404 "WM_MDIDESTROY", /* 0x0221 */
405 "WM_MDIACTIVATE", /* 0x0222 */
406 "WM_MDIRESTORE", /* 0x0223 */
407 "WM_MDINEXT", /* 0x0224 */
408 "WM_MDIMAXIMIZE", /* 0x0225 */
409 "WM_MDITILE", /* 0x0226 */
410 "WM_MDICASCADE", /* 0x0227 */
411 "WM_MDIICONARRANGE", /* 0x0228 */
412 "WM_MDIGETACTIVE", /* 0x0229 */
414 "WM_DROPOBJECT",
415 "WM_QUERYDROPOBJECT",
416 "WM_BEGINDRAG",
417 "WM_DRAGLOOP",
418 "WM_DRAGSELECT",
419 "WM_DRAGMOVE",
421 /* 0x0230*/
422 "WM_MDISETMENU", /* 0x0230 */
423 "WM_ENTERSIZEMOVE", /* 0x0231 */
424 "WM_EXITSIZEMOVE", /* 0x0232 */
425 "WM_DROPFILES", /* 0x0233 */
426 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
427 /* 0x0238*/
428 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
430 /* 0x0240 */
431 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
432 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
434 /* 0x0250 */
435 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
436 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
438 /* 0x0260 */
439 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,
444 /* 0x0280 */
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 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,
455 /* 0x02c0 */
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 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
462 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
463 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
464 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
466 "WM_CUT", /* 0x0300 */
467 "WM_COPY",
468 "WM_PASTE",
469 "WM_CLEAR",
470 "WM_UNDO",
471 "WM_RENDERFORMAT",
472 "WM_RENDERALLFORMATS",
473 "WM_DESTROYCLIPBOARD",
474 "WM_DRAWCLIPBOARD",
475 "WM_PAINTCLIPBOARD",
476 "WM_VSCROLLCLIPBOARD",
477 "WM_SIZECLIPBOARD",
478 "WM_ASKCBFORMATNAME",
479 "WM_CHANGECBCHAIN",
480 "WM_HSCROLLCLIPBOARD",
481 "WM_QUERYNEWPALETTE", /* 0x030f*/
483 "WM_PALETTEISCHANGING",
484 "WM_PALETTECHANGED",
485 "WM_HOTKEY", /* 0x0312 */
486 NULL, NULL, NULL, NULL,
487 "WM_PRINT",
488 "WM_PRINTCLIENT",
489 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
491 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,
496 /* 0x0340 */
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 "WM_QUERYAFXWNDPROC", /* 0x0360 */
503 "WM_SIZEPARENT", /* 0x0361 */
504 "WM_SETMESSAGESTRING", /* 0x0362 */
505 "WM_IDLEUPDATECMDUI", /* 0x0363 */
506 "WM_INITIALUPDATE", /* 0x0364 */
507 "WM_COMMANDHELP", /* 0x0365 */
508 "WM_HELPHITTEST", /* 0x0366 */
509 "WM_EXITHELPMODE", /* 0x0367 */
510 "WM_RECALCPARENT", /* 0x0368 */
511 "WM_SIZECHILD", /* 0x0369 */
512 "WM_KICKIDLE", /* 0x036A */
513 "WM_QUERYCENTERWND", /* 0x036B */
514 "WM_DISABLEMODAL", /* 0x036C */
515 "WM_FLOATSTATUS", /* 0x036D */
516 "WM_ACTIVATETOPLEVEL", /* 0x036E */
517 "WM_QUERY3DCONTROLS", /* 0x036F */
518 NULL,NULL,NULL,
519 "WM_SOCKET_NOTIFY", /* 0x0373 */
520 "WM_SOCKET_DEAD", /* 0x0374 */
521 "WM_POPMESSAGESTRING", /* 0x0375 */
522 "WM_OCC_LOADFROMSTREAM", /* 0x0376 */
523 "WM_OCC_LOADFROMSTORAGE", /* 0x0377 */
524 "WM_OCC_INITNEW", /* 0x0378 */
525 "WM_QUEUE_SENTINEL", /* 0x0379 */
526 "WM_OCC_LOADFROMSTREAM_EX", /* 0x037A */
527 "WM_OCC_LOADFROMSTORAGE_EX", /* 0x037B */
529 NULL,NULL,NULL,NULL,
531 /* 0x0380 */
532 "WM_PENWINFIRST",
533 "WM_RCRESULT",
534 "WM_HOOKRCRESULT",
535 "WM_GLOBALRCCHANGE",
536 "WM_SKB",
537 "WM_HEDITCTL",
538 NULL, NULL,
539 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
541 "WM_COALESCE_FIRST",
542 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
543 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
544 "WM_COALESCE_LAST",
546 /* 0x03a0 */
547 "MM_JOY1MOVE",
548 "MM_JOY2MOVE",
549 "MM_JOY1ZMOVE",
550 "MM_JOY2ZMOVE",
551 NULL, NULL, NULL, NULL,
552 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
554 /* 0x03b0 */
555 NULL, NULL, NULL, NULL, NULL,
556 "MM_JOY1BUTTONDOWN",
557 "MM_JOY2BUTTONDOWN",
558 "MM_JOY1BUTTONUP",
559 "MM_JOY2BUTTONUP",
560 "MM_MCINOTIFY",
561 NULL,
562 "MM_WOM_OPEN",
563 "MM_WOM_CLOSE",
564 "MM_WOM_DONE",
565 "MM_WIM_OPEN",
566 "MM_WIM_CLOSE",
568 /* 0x03c0 */
569 "MM_WIM_DATA",
570 "MM_MIM_OPEN",
571 "MM_MIM_CLOSE",
572 "MM_MIM_DATA",
573 "MM_MIM_LONGDATA",
574 "MM_MIM_ERROR",
575 "MM_MIM_LONGERROR",
576 "MM_MOM_OPEN",
577 "MM_MOM_CLOSE",
578 "MM_MOM_DONE",
579 NULL, NULL, NULL, NULL, NULL, NULL,
580 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
581 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
583 /* 0x03e0 */
584 "WM_DDE_INITIATE", /* 0x3E0 */
585 "WM_DDE_TERMINATE", /* 0x3E1 */
586 "WM_DDE_ADVISE", /* 0x3E2 */
587 "WM_DDE_UNADVISE", /* 0x3E3 */
588 "WM_DDE_ACK", /* 0x3E4 */
589 "WM_DDE_DATA", /* 0x3E5 */
590 "WM_DDE_REQUEST", /* 0x3E6 */
591 "WM_DDE_POKE", /* 0x3E7 */
592 "WM_DDE_EXECUTE", /* 0x3E8 */
593 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
596 /* 0x03f0 */
597 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
598 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
600 "WM_USER"
604 #define SPY_MAX_LVMMSGNUM 139
605 static const char * const LVMMessageTypeNames[SPY_MAX_LVMMSGNUM + 1] =
607 "LVM_GETBKCOLOR", /* 1000 */
608 "LVM_SETBKCOLOR",
609 "LVM_GETIMAGELIST",
610 "LVM_SETIMAGELIST",
611 "LVM_GETITEMCOUNT",
612 "LVM_GETITEMA",
613 "LVM_SETITEMA",
614 "LVM_INSERTITEMA",
615 "LVM_DELETEITEM",
616 "LVM_DELETEALLITEMS",
617 "LVM_GETCALLBACKMASK",
618 "LVM_SETCALLBACKMASK",
619 "LVM_GETNEXTITEM",
620 "LVM_FINDITEMA",
621 "LVM_GETITEMRECT",
622 "LVM_SETITEMPOSITION",
623 "LVM_GETITEMPOSITION",
624 "LVM_GETSTRINGWIDTHA",
625 "LVM_HITTEST",
626 "LVM_ENSUREVISIBLE",
627 "LVM_SCROLL",
628 "LVM_REDRAWITEMS",
629 "LVM_ARRANGE",
630 "LVM_EDITLABELA",
631 "LVM_GETEDITCONTROL",
632 "LVM_GETCOLUMNA",
633 "LVM_SETCOLUMNA",
634 "LVM_INSERTCOLUMNA",
635 "LVM_DELETECOLUMN",
636 "LVM_GETCOLUMNWIDTH",
637 "LVM_SETCOLUMNWIDTH",
638 "LVM_GETHEADER",
639 "LVM_CREATEDRAGIMAGE",
640 "LVM_GETVIEWRECT",
641 "LVM_GETTEXTCOLOR",
642 "LVM_SETTEXTCOLOR",
643 "LVM_GETTEXTBKCOLOR",
644 "LVM_SETTEXTBKCOLOR",
645 "LVM_GETTOPINDEX",
646 "LVM_GETCOUNTPERPAGE",
647 "LVM_GETORIGIN",
648 "LVM_UPDATE",
649 "LVM_SETITEMSTATE",
650 "LVM_GETITEMSTATE",
651 "LVM_GETITEMTEXTA",
652 "LVM_SETITEMTEXTA",
653 "LVM_SETITEMCOUNT",
654 "LVM_SORTITEMS",
655 "LVM_SETITEMPOSITION32",
656 "LVM_GETSELECTEDCOUNT",
657 "LVM_GETITEMSPACING",
658 "LVM_GETISEARCHSTRINGA",
659 "LVM_SETICONSPACING",
660 "LVM_SETEXTENDEDLISTVIEWSTYLE",
661 "LVM_GETEXTENDEDLISTVIEWSTYLE",
662 "LVM_GETSUBITEMRECT",
663 "LVM_SUBITEMHITTEST",
664 "LVM_SETCOLUMNORDERARRAY",
665 "LVM_GETCOLUMNORDERARRAY",
666 "LVM_SETHOTITEM",
667 "LVM_GETHOTITEM",
668 "LVM_SETHOTCURSOR",
669 "LVM_GETHOTCURSOR",
670 "LVM_APPROXIMATEVIEWRECT",
671 "LVM_SETWORKAREAS",
672 "LVM_GETSELECTIONMARK",
673 "LVM_SETSELECTIONMARK",
674 "LVM_SETBKIMAGEA",
675 "LVM_GETBKIMAGEA",
676 "LVM_GETWORKAREAS",
677 "LVM_SETHOVERTIME",
678 "LVM_GETHOVERTIME",
679 "LVM_GETNUMBEROFWORKAREAS",
680 "LVM_SETTOOLTIPS",
681 "LVM_GETITEMW",
682 "LVM_SETITEMW",
683 "LVM_INSERTITEMW",
684 "LVM_GETTOOLTIPS",
685 NULL,
686 NULL,
687 NULL,
688 NULL,
689 "LVM_FINDITEMW",
690 NULL,
691 NULL,
692 NULL,
693 "LVM_GETSTRINGWIDTHW",
694 NULL,
695 NULL,
696 NULL,
697 NULL,
698 NULL,
699 NULL,
700 NULL,
701 "LVM_GETCOLUMNW",
702 "LVM_SETCOLUMNW",
703 "LVM_INSERTCOLUMNW",
704 NULL,
705 NULL,
706 NULL,
707 NULL,
708 NULL,
709 NULL,
710 NULL,
711 NULL,
712 NULL,
713 NULL,
714 NULL,
715 NULL,
716 NULL,
717 NULL,
718 NULL,
719 NULL,
720 NULL,
721 "LVM_GETITEMTEXTW",
722 "LVM_SETITEMTEXTW",
723 "LVM_GETISEARCHSTRINGW",
724 "LVM_EDITLABELW",
725 NULL,
726 NULL,
727 NULL,
728 NULL,
729 NULL,
730 NULL,
731 NULL,
732 NULL,
733 NULL,
734 NULL,
735 NULL,
736 NULL,
737 NULL,
738 NULL,
739 NULL,
740 NULL,
741 NULL,
742 NULL,
743 NULL,
744 NULL,
745 "LVM_SETBKIMAGEW",
746 "LVM_GETBKIMAGEW" /* 0x108B */
749 #define SPY_MAX_CCMMSGNUM 6
750 static const char * const CCMMessageTypeNames[SPY_MAX_CCMMSGNUM + 1] =
752 NULL, /* 0x2000 */
753 "CCM_SETBKCOLOR",
754 "CCM_SETCOLORSCHEME",
755 "CCM_GETCOLORSCHEME",
756 "CCM_GETDROPTARGET",
757 "CCM_SETUNICODEFORMAT",
758 "CCM_GETUNICODEFORMAT"
761 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
762 static BOOL16 SPY_ExcludeDWP = 0;
763 static int SPY_IndentLevel = 0;
765 #define SPY_EXCLUDE(msg) \
766 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
768 /***********************************************************************
769 * SPY_GetMsgName
771 const char *SPY_GetMsgName( UINT msg )
773 static char msg_buffer[20];
775 if (msg <= SPY_MAX_MSGNUM)
777 if (!MessageTypeNames[msg]) return "???";
778 return MessageTypeNames[msg];
781 if (msg >= LVM_FIRST && msg <= LVM_FIRST + SPY_MAX_LVMMSGNUM)
783 if (!LVMMessageTypeNames[msg-LVM_FIRST]) return "LVM_?";
784 return LVMMessageTypeNames[msg-LVM_FIRST];
787 if (msg >= CCM_FIRST && msg <= CCM_FIRST + SPY_MAX_CCMMSGNUM)
789 if (!CCMMessageTypeNames[msg-CCM_FIRST]) return "???";
790 return CCMMessageTypeNames[msg-CCM_FIRST];
793 sprintf( msg_buffer, "WM_USER+%04x", msg - WM_USER );
794 return msg_buffer;
797 /***********************************************************************
798 * SPY_GetWndName
800 const char *SPY_GetWndName( HWND hwnd )
802 static char wnd_buffer[16];
804 WND* pWnd = WIN_FindWndPtr( hwnd );
805 if( pWnd )
807 INT n = sizeof(wnd_buffer) - 6;
808 LPSTR p = wnd_buffer;
809 LPSTR src;
811 char postfix;
813 if( pWnd->text && pWnd->text[0] != '\0' )
815 src = pWnd->text;
816 *(p++) = postfix = '\"';
817 while ((n-- > 1) && *src) *p++ = *src++;
819 else /* get class name */
821 INT len;
823 *(p++)='{';
824 GlobalGetAtomNameA((ATOM) GetClassWord(pWnd->hwndSelf, GCW_ATOM), p, n + 1);
825 src = p += (len = lstrlenA(p));
826 if( len >= n ) src = wnd_buffer; /* something nonzero */
827 postfix = '}';
829 if( *src ) for( n = 0; n < 3; n++ ) *(p++)='.';
830 *(p++) = postfix;
831 *(p++) = '\0';
832 WIN_ReleaseWndPtr(pWnd);
835 else lstrcpyA( wnd_buffer, "\"NULL\"" );
836 return wnd_buffer;
838 /***********************************************************************
839 * SPY_DumpStructure
841 void SPY_DumpStructure (UINT msg, LPARAM structure)
843 switch (msg)
845 case WM_DRAWITEM:
846 { DRAWITEMSTRUCT *lpdis = (DRAWITEMSTRUCT*) structure;
847 TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n", lpdis->CtlType, lpdis->CtlID);
848 TRACE("itemID=0x%08x itemAction=0x%08x itemState=0x%08x\n", lpdis->itemID, lpdis->itemAction, lpdis->itemState);
849 TRACE("hWnd=0x%04x hDC=0x%04x (%d,%d)-(%d,%d) itemData=0x%08lx\n",
850 lpdis->hwndItem, lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, lpdis->rcItem.right, lpdis->rcItem.bottom, lpdis->itemData);
852 break;
853 case WM_MEASUREITEM:
854 { MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) structure;
855 TRACE("MEASUREITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n", lpmis->CtlType, lpmis->CtlID);
856 TRACE("itemID=0x%08x itemWidth=0x%08x itemHeight=0x%08x\n", lpmis->itemID, lpmis->itemWidth, lpmis->itemHeight);
857 TRACE("itemData=0x%08lx\n", lpmis->itemData);
859 break;
860 case WM_NOTIFY:
861 { NMHDR * pnmh = (NMHDR*) structure;
862 TRACE("NMHDR hwndFrom=0x%08x idFrom=0x%08x code=0x%08x\n", pnmh->hwndFrom, pnmh->idFrom, pnmh->code);
864 default:
865 break;
869 /***********************************************************************
870 * SPY_EnterMessage
872 void SPY_EnterMessage( INT iFlag, HWND hWnd, UINT msg,
873 WPARAM wParam, LPARAM lParam )
875 LPCSTR pname;
877 if (!TRACE_ON(message) || SPY_EXCLUDE(msg)) return;
879 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
880 switch(iFlag)
882 case SPY_DISPATCHMESSAGE16:
883 pname = SPY_GetWndName(hWnd);
884 TRACE("%*s(%04x) %-16s message [%04x] %s dispatched wp=%04x lp=%08lx\n",
885 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
886 wParam, lParam);
887 break;
889 case SPY_DISPATCHMESSAGE:
890 pname = SPY_GetWndName(hWnd);
891 TRACE("%*s(%08x) %-16s message [%04x] %s dispatched wp=%08x lp=%08lx\n",
892 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
893 wParam, lParam);
894 break;
896 case SPY_SENDMESSAGE16:
897 case SPY_SENDMESSAGE:
899 char taskName[30];
900 HTASK16 hTask = GetWindowTask16(hWnd);
902 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
903 else if (!hTask) strcpy( taskName, "Wine" );
904 else
906 sprintf( taskName, "task %04x ???", hTask );
907 GetModuleName16( hTask, taskName + 10, sizeof(taskName) - 10 );
909 pname = SPY_GetWndName(hWnd);
911 if (iFlag == SPY_SENDMESSAGE16)
912 TRACE("%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
913 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
914 taskName, wParam, lParam );
915 else
916 { TRACE("%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
917 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
918 taskName, wParam, lParam );
919 SPY_DumpStructure(msg, lParam);
922 break;
924 case SPY_DEFWNDPROC16:
925 if( SPY_ExcludeDWP ) return;
926 TRACE("%*s(%04x) DefWindowProc16: %s [%04x] wp=%04x lp=%08lx\n",
927 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
928 msg, wParam, lParam );
929 break;
931 case SPY_DEFWNDPROC:
932 if( SPY_ExcludeDWP ) return;
933 TRACE("%*s(%08x) DefWindowProc32: %s [%04x] wp=%08x lp=%08lx\n",
934 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
935 msg, wParam, lParam );
936 break;
938 SPY_IndentLevel += SPY_INDENT_UNIT;
942 /***********************************************************************
943 * SPY_ExitMessage
945 void SPY_ExitMessage( INT iFlag, HWND hWnd, UINT msg, LRESULT lReturn )
947 LPCSTR pname;
949 if (!TRACE_ON(message) || SPY_EXCLUDE(msg) ||
950 (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND)) )
951 return;
953 if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
955 switch(iFlag)
957 case SPY_RESULT_DEFWND16:
958 TRACE(" %*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
959 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
960 break;
962 case SPY_RESULT_DEFWND:
963 TRACE(" %*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n",
964 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
965 break;
967 case SPY_RESULT_OK16:
968 pname = SPY_GetWndName(hWnd);
969 TRACE(" %*s(%04x) %-16s message [%04x] %s returned %08lx\n",
970 SPY_IndentLevel, "", hWnd, pname, msg,
971 SPY_GetMsgName( msg ), lReturn );
972 break;
974 case SPY_RESULT_OK:
975 pname = SPY_GetWndName(hWnd);
976 TRACE(" %*s(%08x) %-16s message [%04x] %s returned %08lx\n",
977 SPY_IndentLevel, "", hWnd, pname, msg,
978 SPY_GetMsgName( msg ), lReturn );
979 break;
981 case SPY_RESULT_INVALIDHWND16:
982 pname = SPY_GetWndName(hWnd);
983 WARN(" %*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
984 SPY_IndentLevel, "", hWnd, pname, msg,
985 SPY_GetMsgName( msg ) );
986 break;
988 case SPY_RESULT_INVALIDHWND:
989 pname = SPY_GetWndName(hWnd);
990 WARN(" %*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
991 SPY_IndentLevel, "", hWnd, pname, msg,
992 SPY_GetMsgName( msg ) );
993 break;
998 /***********************************************************************
999 * SPY_Init
1001 int SPY_Init(void)
1003 int i;
1004 char buffer[1024];
1006 if (!TRACE_ON(message)) return TRUE;
1008 PROFILE_GetWineIniString( "Spy", "Include", "", buffer, sizeof(buffer) );
1009 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
1011 TRACE("Include=%s\n", buffer );
1012 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
1013 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
1016 PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer, sizeof(buffer) );
1017 if (buffer[0])
1019 TRACE("Exclude=%s\n", buffer );
1020 if (!strcmp( buffer, "EXCLUDEALL" ))
1021 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
1022 else
1023 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
1024 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
1027 SPY_ExcludeDWP = PROFILE_GetWineIniInt( "Spy", "ExcludeDWP", 0 );
1029 return 1;