'Realigned' the layout table a bit. Applied the non-latin-1 stuff and
[wine/dcerpc.git] / misc / spy.c
blob41804d29e39b346706b7ab0fae43ef8deebac5ef
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 "wine/winuser16.h"
11 #include "wine/winbase16.h"
12 #include "win.h"
13 #include "module.h"
14 #include "options.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,
96 "WM_NOTIFY", NULL,
98 /* 0x0050 */
99 "WM_INPUTLANGCHANGEREQUEST",
100 "WM_INPUTLANGCHANGE",
101 "WM_TCARD",
102 "WM_HELP",
103 "WM_USERCHANGED",
104 "WM_NOTIFYFORMAT", NULL, NULL,
105 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
107 /* 0x0060 */
108 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
109 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
111 /* 0x0070 */
112 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
113 NULL, NULL, NULL,
114 "WM_CONTEXTMENU",
115 "WM_STYLECHANGING",
116 "WM_STYLECHANGED",
117 "WM_DISPLAYCHANGE",
118 "WM_GETICON",
120 "WM_SETICON", /* 0x0080 */
121 "WM_NCCREATE", /* 0x0081 */
122 "WM_NCDESTROY", /* 0x0082 */
123 "WM_NCCALCSIZE", /* 0x0083 */
124 "WM_NCHITTEST", /* 0x0084 */
125 "WM_NCPAINT", /* 0x0085 */
126 "WM_NCACTIVATE", /* 0x0086 */
127 "WM_GETDLGCODE", /* 0x0087 */
128 "wm_syncpaint",
129 "wm_synctask", NULL, NULL, NULL, NULL, NULL, NULL,
131 /* 0x0090 */
132 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
133 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
135 /* 0x00A0 */
136 "WM_NCMOUSEMOVE", /* 0x00A0 */
137 "WM_NCLBUTTONDOWN", /* 0x00A1 */
138 "WM_NCLBUTTONUP", /* 0x00A2 */
139 "WM_NCLBUTTONDBLCLK", /* 0x00A3 */
140 "WM_NCRBUTTONDOWN", /* 0x00A4 */
141 "WM_NCRBUTTONUP", /* 0x00A5 */
142 "WM_NCRBUTTONDBLCLK", /* 0x00A6 */
143 "WM_NCMBUTTONDOWN", /* 0x00A7 */
144 "WM_NCMBUTTONUP", /* 0x00A8 */
145 "WM_NCMBUTTONDBLCLK", /* 0x00A9 */
146 NULL, NULL, NULL, NULL, NULL, NULL,
148 /* 0x00B0 - Win32 Edit controls */
149 "EM_GETSEL32", /* 0x00b0 */
150 "EM_SETSEL32", /* 0x00b1 */
151 "EM_GETRECT32", /* 0x00b2 */
152 "EM_SETRECT32", /* 0x00b3 */
153 "EM_SETRECTNP32", /* 0x00b4 */
154 "EM_SCROLL32", /* 0x00b5 */
155 "EM_LINESCROLL32", /* 0x00b6 */
156 "EM_SCROLLCARET32", /* 0x00b7 */
157 "EM_GETMODIFY32", /* 0x00b8 */
158 "EM_SETMODIFY32", /* 0x00b9 */
159 "EM_GETLINECOUNT32", /* 0x00ba */
160 "EM_LINEINDEX32", /* 0x00bb */
161 "EM_SETHANDLE32", /* 0x00bc */
162 "EM_GETHANDLE32", /* 0x00bd */
163 "EM_GETTHUMB32", /* 0x00be */
164 NULL, /* 0x00bf */
166 NULL, /* 0x00c0 */
167 "EM_LINELENGTH32", /* 0x00c1 */
168 "EM_REPLACESEL32", /* 0x00c2 */
169 NULL, /* 0x00c3 */
170 "EM_GETLINE32", /* 0x00c4 */
171 "EM_LIMITTEXT32", /* 0x00c5 */
172 "EM_CANUNDO32", /* 0x00c6 */
173 "EM_UNDO32", /* 0x00c7 */
174 "EM_FMTLINES32", /* 0x00c8 */
175 "EM_LINEFROMCHAR32", /* 0x00c9 */
176 NULL, /* 0x00ca */
177 "EM_SETTABSTOPS32", /* 0x00cb */
178 "EM_SETPASSWORDCHAR32", /* 0x00cc */
179 "EM_EMPTYUNDOBUFFER32", /* 0x00cd */
180 "EM_GETFIRSTVISIBLELINE32", /* 0x00ce */
181 "EM_SETREADONLY32", /* 0x00cf */
183 "EM_SETWORDBREAKPROC32", /* 0x00d0 */
184 "EM_GETWORDBREAKPROC32", /* 0x00d1 */
185 "EM_GETPASSWORDCHAR32", /* 0x00d2 */
186 "EM_SETMARGINS32", /* 0x00d3 */
187 "EM_GETMARGINS32", /* 0x00d4 */
188 "EM_GETLIMITTEXT32", /* 0x00d5 */
189 "EM_POSFROMCHAR32", /* 0x00d6 */
190 "EM_CHARFROMPOS32", /* 0x00d7 */
191 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
193 /* 0x00E0 - Win32 Scrollbars */
194 "SBM_SETPOS32", /* 0x00e0 */
195 "SBM_GETPOS32", /* 0x00e1 */
196 "SBM_SETRANGE32", /* 0x00e2 */
197 "SBM_GETRANGE32", /* 0x00e3 */
198 "SBM_ENABLE_ARROWS32", /* 0x00e4 */
199 NULL,
200 "SBM_SETRANGEREDRAW32", /* 0x00e6 */
201 NULL, NULL,
202 "SBM_SETSCROLLINFO32", /* 0x00e9 */
203 "SBM_GETSCROLLINFO32", /* 0x00ea */
204 NULL, NULL, NULL, NULL, NULL,
206 /* 0x00F0 - Win32 Buttons */
207 "BM_GETCHECK32", /* 0x00f0 */
208 "BM_SETCHECK32", /* 0x00f1 */
209 "BM_GETSTATE32", /* 0x00f2 */
210 "BM_SETSTATE32", /* 0x00f3 */
211 "BM_SETSTYLE32", /* 0x00f4 */
212 "BM_CLICK32", /* 0x00f5 */
213 "BM_GETIMAGE32", /* 0x00f6 */
214 "BM_SETIMAGE32", /* 0x00f7 */
215 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
217 "WM_KEYDOWN", /* 0x0100 */
218 "WM_KEYUP", /* 0x0101 */
219 "WM_CHAR", /* 0x0102 */
220 "WM_DEADCHAR", /* 0x0103 */
221 "WM_SYSKEYDOWN", /* 0x0104 */
222 "WM_SYSKEYUP", /* 0x0105 */
223 "WM_SYSCHAR", /* 0x0106 */
224 "WM_SYSDEADCHAR", /* 0x0107 */
225 "WM_KEYLAST", /* 0x0108 */
226 NULL,
227 "WM_CONVERTREQUEST",
228 "WM_CONVERTRESULT",
229 "WM_INTERIM", NULL, NULL, NULL,
231 "WM_INITDIALOG", /* 0x0110 */
232 "WM_COMMAND", /* 0x0111 */
233 "WM_SYSCOMMAND", /* 0x0112 */
234 "WM_TIMER", /* 0x0113 */
235 "WM_HSCROLL", /* 0x0114 */
236 "WM_VSCROLL", /* 0x0115 */
237 "WM_INITMENU", /* 0x0116 */
238 "WM_INITMENUPOPUP", /* 0x0117 */
239 "WM_SYSTIMER", /* 0x0118 */
240 NULL, NULL, NULL, NULL, NULL, NULL,
241 "WM_MENUSELECT", /* 0x011f */
243 "WM_MENUCHAR", /* 0x0120 */
244 "WM_ENTERIDLE", /* 0x0121 */
245 NULL, NULL, NULL, NULL, NULL, NULL,
246 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
248 /* 0x0130 */
249 NULL,
250 "wm_lbtrackpoint", /* 0x0131 */
251 "WM_CTLCOLORMSGBOX", /* 0x0132 */
252 "WM_CTLCOLOREDIT", /* 0x0133 */
253 "WM_CTLCOLORLISTBOX", /* 0x0134 */
254 "WM_CTLCOLORBTN", /* 0x0135 */
255 "WM_CTLCOLORDLG", /* 0x0136 */
256 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
257 "WM_CTLCOLORSTATIC", /* 0x0138 */
258 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
260 /* 0x0140 - Win32 Comboboxes */
261 "CB_GETEDITSEL32", /* 0x0140 */
262 "CB_LIMITTEXT32", /* 0x0141 */
263 "CB_SETEDITSEL32", /* 0x0142 */
264 "CB_ADDSTRING32", /* 0x0143 */
265 "CB_DELETESTRING32", /* 0x0144 */
266 "CB_DIR32", /* 0x0145 */
267 "CB_GETCOUNT32", /* 0x0146 */
268 "CB_GETCURSEL32", /* 0x0147 */
269 "CB_GETLBTEXT32", /* 0x0148 */
270 "CB_GETLBTEXTLEN32", /* 0x0149 */
271 "CB_INSERTSTRING32", /* 0x014a */
272 "CB_RESETCONTENT32", /* 0x014b */
273 "CB_FINDSTRING32", /* 0x014c */
274 "CB_SELECTSTRING32", /* 0x014d */
275 "CB_SETCURSEL32", /* 0x014e */
276 "CB_SHOWDROPDOWN32", /* 0x014f */
278 "CB_GETITEMDATA32", /* 0x0150 */
279 "CB_SETITEMDATA32", /* 0x0151 */
280 "CB_GETDROPPEDCONTROLRECT32",/* 0x0152 */
281 "CB_SETITEMHEIGHT32", /* 0x0153 */
282 "CB_GETITEMHEIGHT32", /* 0x0154 */
283 "CB_SETEXTENDEDUI32", /* 0x0155 */
284 "CB_GETEXTENDEDUI32", /* 0x0156 */
285 "CB_GETDROPPEDSTATE32", /* 0x0157 */
286 "CB_FINDSTRINGEXACT32", /* 0x0158 */
287 "CB_SETLOCALE32", /* 0x0159 */
288 "CB_GETLOCALE32", /* 0x015a */
289 "CB_GETTOPINDEX32", /* 0x015b */
290 "CB_SETTOPINDEX32", /* 0x015c */
291 "CB_GETHORIZONTALEXTENT32", /* 0x015d */
292 "CB_SETHORIZONTALEXTENT32", /* 0x015e */
293 "CB_GETDROPPEDWIDTH32", /* 0x015f */
295 "CB_SETDROPPEDWIDTH32", /* 0x0160 */
296 "CB_INITSTORAGE32", /* 0x0161 */
297 NULL, NULL, NULL, NULL, NULL, NULL,
298 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
300 /* 0x0170 - Win32 Static controls */
301 "STM_SETICON32", /* 0x0170 */
302 "STM_GETICON32", /* 0x0171 */
303 "STM_SETIMAGE32", /* 0x0172 */
304 "STM_GETIMAGE32", /* 0x0173 */
305 NULL, NULL, NULL, NULL,
306 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
308 /* 0x0180 - Win32 Listboxes */
309 "LB_ADDSTRING32", /* 0x0180 */
310 "LB_INSERTSTRING32", /* 0x0181 */
311 "LB_DELETESTRING32", /* 0x0182 */
312 "LB_SELITEMRANGEEX32", /* 0x0183 */
313 "LB_RESETCONTENT32", /* 0x0184 */
314 "LB_SETSEL32", /* 0x0185 */
315 "LB_SETCURSEL32", /* 0x0186 */
316 "LB_GETSEL32", /* 0x0187 */
317 "LB_GETCURSEL32", /* 0x0188 */
318 "LB_GETTEXT32", /* 0x0189 */
319 "LB_GETTEXTLEN32", /* 0x018a */
320 "LB_GETCOUNT32", /* 0x018b */
321 "LB_SELECTSTRING32", /* 0x018c */
322 "LB_DIR32", /* 0x018d */
323 "LB_GETTOPINDEX32", /* 0x018e */
324 "LB_FINDSTRING32", /* 0x018f */
326 "LB_GETSELCOUNT32", /* 0x0190 */
327 "LB_GETSELITEMS32", /* 0x0191 */
328 "LB_SETTABSTOPS32", /* 0x0192 */
329 "LB_GETHORIZONTALEXTENT32", /* 0x0193 */
330 "LB_SETHORIZONTALEXTENT32", /* 0x0194 */
331 "LB_SETCOLUMNWIDTH32", /* 0x0195 */
332 "LB_ADDFILE32", /* 0x0196 */
333 "LB_SETTOPINDEX32", /* 0x0197 */
334 "LB_GETITEMRECT32", /* 0x0198 */
335 "LB_GETITEMDATA32", /* 0x0199 */
336 "LB_SETITEMDATA32", /* 0x019a */
337 "LB_SELITEMRANGE32", /* 0x019b */
338 "LB_SETANCHORINDEX32", /* 0x019c */
339 "LB_GETANCHORINDEX32", /* 0x019d */
340 "LB_SETCARETINDEX32", /* 0x019e */
341 "LB_GETCARETINDEX32", /* 0x019f */
343 "LB_SETITEMHEIGHT32", /* 0x01a0 */
344 "LB_GETITEMHEIGHT32", /* 0x01a1 */
345 "LB_FINDSTRINGEXACT32", /* 0x01a2 */
346 "LB_CARETON32", /* 0x01a3 */
347 "LB_CARETOFF32", /* 0x01a4 */
348 "LB_SETLOCALE32", /* 0x01a5 */
349 "LB_GETLOCALE32", /* 0x01a6 */
350 "LB_SETCOUNT32", /* 0x01a7 */
351 "LB_INITSTORAGE32", /* 0x01a8 */
352 "LB_ITEMFROMPOINT32", /* 0x01a9 */
353 NULL, NULL, NULL, NULL, NULL, NULL,
355 /* 0x01B0 */
356 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
357 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
359 /* 0x01C0 */
360 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
361 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
363 /* 0x01D0 */
364 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
365 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
367 /* 0x01E0 */
368 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
369 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
371 /* 0x01F0 */
372 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
373 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
375 "WM_MOUSEMOVE", /* 0x0200 */
376 "WM_LBUTTONDOWN", /* 0x0201 */
377 "WM_LBUTTONUP", /* 0x0202 */
378 "WM_LBUTTONDBLCLK", /* 0x0203 */
379 "WM_RBUTTONDOWN", /* 0x0204 */
380 "WM_RBUTTONUP", /* 0x0205 */
381 "WM_RBUTTONDBLCLK", /* 0x0206 */
382 "WM_MBUTTONDOWN", /* 0x0207 */
383 "WM_MBUTTONUP", /* 0x0208 */
384 "WM_MBUTTONDBLCLK", /* 0x0209 */
385 NULL, NULL, NULL, NULL, NULL, NULL,
387 "WM_PARENTNOTIFY", /* 0x0210 */
388 "WM_ENTERMENULOOP", /* 0x0211 */
389 "WM_EXITMENULOOP", /* 0x0212 */
390 "wm_nextmenu", /* 0x0213 */
391 "WM_SIZING",
392 "WM_CAPTURECHANGED",
393 "WM_MOVING", NULL,
394 "WM_POWERBROADCAST",
395 "WM_DEVICECHANGE", NULL, NULL, NULL, NULL, NULL, NULL,
397 "WM_MDICREATE", /* 0x0220 */
398 "WM_MDIDESTROY", /* 0x0221 */
399 "WM_MDIACTIVATE", /* 0x0222 */
400 "WM_MDIRESTORE", /* 0x0223 */
401 "WM_MDINEXT", /* 0x0224 */
402 "WM_MDIMAXIMIZE", /* 0x0225 */
403 "WM_MDITILE", /* 0x0226 */
404 "WM_MDICASCADE", /* 0x0227 */
405 "WM_MDIICONARRANGE", /* 0x0228 */
406 "WM_MDIGETACTIVE", /* 0x0229 */
408 "wm_dropobject",
409 "wm_querydropobject",
410 "wm_begindrag",
411 "wm_dragloop",
412 "wn_dragselect",
413 "wm_dragmove",
415 /* 0x0230*/
416 "WM_MDISETMENU", /* 0x0230 */
417 "WM_ENTERSIZEMOVE", /* 0x0231 */
418 "WM_EXITSIZEMOVE", /* 0x0232 */
419 "WM_DROPFILES", /* 0x0233 */
420 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
421 /* 0x0238*/
422 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
424 /* 0x0240 */
425 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
426 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
428 /* 0x0250 */
429 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
430 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
432 /* 0x0260 */
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,
436 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
438 /* 0x0280 */
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 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,
449 /* 0x02c0 */
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 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,
460 "WM_CUT", /* 0x0300 */
461 "WM_COPY",
462 "WM_PASTE",
463 "WM_CLEAR",
464 "WM_UNDO",
465 "WM_RENDERFORMAT",
466 "WM_RENDERALLFORMATS",
467 "WM_DESTROYCLIPBOARD",
468 "WM_DRAWCLIPBOARD",
469 "WM_PAINTCLIPBOARD",
470 "WM_VSCROLLCLIPBOARD",
471 "WM_SIZECLIPBOARD",
472 "WM_ASKCBFORMATNAME",
473 "WM_CHANGECBCHAIN",
474 "WM_HSCROLLCLIPBOARD",
475 "WM_QUERYNEWPALETTE", /* 0x030f*/
477 "WM_PALETTEISCHANGING",
478 "WM_PALETTECHANGED",
479 "WM_HOTKEY", /* 0x0312 */
480 NULL, NULL, NULL, NULL,
481 "WM_PRINT",
482 "WM_PRINTCLIENT",
483 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
485 NULL, 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,
490 /* 0x0340 */
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 "WM_QUERYAFXWNDPROC", /* 0x0360 */
497 "WM_SIZEPARENT", /* 0x0361 */
498 "WM_SETMESSAGESTRING", /* 0x0362 */
499 "WM_IDLEUPDATECMDUI", /* 0x0363 */
500 "WM_INITIALUPDATE", /* 0x0364 */
501 "WM_COMMANDHELP", /* 0x0365 */
502 "WM_HELPHITTEST", /* 0x0366 */
503 "WM_EXITHELPMODE", /* 0x0367 */
504 "WM_RECALCPARENT", /* 0x0368 */
505 "WM_SIZECHILD", /* 0x0369 */
506 "WM_KICKIDLE", /* 0x036A */
507 "WM_QUERYCENTERWND", /* 0x036B */
508 "WM_DISABLEMODAL", /* 0x036C */
509 "WM_FLOATSTATUS", /* 0x036D */
510 "WM_ACTIVATETOPLEVEL", /* 0x036E */
511 "WM_QUERY3DCONTROLS", /* 0x036F */
512 NULL,NULL,NULL,
513 "WM_SOCKET_NOTIFY", /* 0x0373 */
514 "WM_SOCKET_DEAD", /* 0x0374 */
515 "WM_POPMESSAGESTRING", /* 0x0375 */
516 "WM_OCC_LOADFROMSTREAM", /* 0x0376 */
517 "WM_OCC_LOADFROMSTORAGE", /* 0x0377 */
518 "WM_OCC_INITNEW", /* 0x0378 */
519 "WM_QUEUE_SENTINEL", /* 0x0379 */
520 "WM_OCC_LOADFROMSTREAM_EX", /* 0x037A */
521 "WM_OCC_LOADFROMSTORAGE_EX", /* 0x037B */
523 NULL,NULL,NULL,NULL,
525 /* 0x0380 */
526 "WM_PENWINFIRST",
527 "WM_RCRESULT",
528 "WM_HOOKRCRESULT",
529 "WM_GLOBALRCCHANGE",
530 "WM_SKB",
531 "WM_HEDITCTL",
532 NULL, NULL,
533 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
535 "WM_COALESCE_FIRST",
536 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
537 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
538 "WM_COALESCE_LAST",
540 /* 0x03a0 */
541 "MM_JOY1MOVE",
542 "MM_JOY2MOVE",
543 "MM_JOY1ZMOVE",
544 "MM_JOY2ZMOVE",
545 NULL, NULL, NULL, NULL,
546 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
548 /* 0x03b0 */
549 NULL, NULL, NULL, NULL, NULL,
550 "MM_JOY1BUTTONDOWN",
551 "MM_JOY2BUTTONDOWN",
552 "MM_JOY1BUTTONUP",
553 "MM_JOY2BUTTONUP",
554 "MM_MCINOTIFY",
555 NULL,
556 "MM_WOM_OPEN",
557 "MM_WOM_CLOSE",
558 "MM_WOM_DONE",
559 "MM_WIM_OPEN",
560 "MM_WIM_CLOSE",
562 /* 0x03c0 */
563 "MM_WIM_DATA",
564 "MM_MIM_OPEN",
565 "MM_MIM_CLOSE",
566 "MM_MIM_DATA",
567 "MM_MIM_LONGDATA",
568 "MM_MIM_ERROR",
569 "MM_MIM_LONGERROR",
570 "MM_MOM_OPEN",
571 "MM_MOM_CLOSE",
572 "MM_MOM_DONE",
573 NULL, NULL, NULL, NULL, NULL, NULL,
574 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
575 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
577 /* 0x03e0 */
578 "WM_DDE_INITIATE", /* 0x3E0 */
579 "WM_DDE_TERMINATE", /* 0x3E1 */
580 "WM_DDE_ADVISE", /* 0x3E2 */
581 "WM_DDE_UNADVISE", /* 0x3E3 */
582 "WM_DDE_ACK", /* 0x3E4 */
583 "WM_DDE_DATA", /* 0x3E5 */
584 "WM_DDE_REQUEST", /* 0x3E6 */
585 "WM_DDE_POKE", /* 0x3E7 */
586 "WM_DDE_EXECUTE", /* 0x3E8 */
587 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
590 /* 0x03f0 */
591 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
592 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
594 "WM_USER"
598 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
599 static BOOL16 SPY_ExcludeDWP = 0;
600 static int SPY_IndentLevel = 0;
602 #define SPY_EXCLUDE(msg) \
603 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
605 /***********************************************************************
606 * SPY_GetMsgName
608 const char *SPY_GetMsgName( UINT msg )
610 static char msg_buffer[20];
612 if (msg <= SPY_MAX_MSGNUM)
614 if (!MessageTypeNames[msg]) return "???";
615 return MessageTypeNames[msg];
617 sprintf( msg_buffer, "WM_USER+%04x", msg - WM_USER );
618 return msg_buffer;
621 /***********************************************************************
622 * SPY_GetWndName
624 const char *SPY_GetWndName( HWND hwnd )
626 static char wnd_buffer[16];
628 WND* pWnd = WIN_FindWndPtr( hwnd );
629 if( pWnd )
631 INT n = sizeof(wnd_buffer) - 6;
632 LPSTR p = wnd_buffer;
633 LPSTR src;
635 char postfix;
637 if( pWnd->text && pWnd->text[0] != '\0' )
639 src = pWnd->text;
640 *(p++) = postfix = '\"';
641 while ((n-- > 1) && *src) *p++ = *src++;
643 else /* get class name */
645 INT len;
647 *(p++)='{';
648 GlobalGetAtomNameA( pWnd->class->atomName, p, n + 1);
649 src = p += (len = lstrlenA(p));
650 if( len >= n ) src = wnd_buffer; /* something nonzero */
651 postfix = '}';
653 if( *src ) for( n = 0; n < 3; n++ ) *(p++)='.';
654 *(p++) = postfix;
655 *(p++) = '\0';
656 WIN_ReleaseWndPtr(pWnd);
659 else lstrcpyA( wnd_buffer, "\"NULL\"" );
660 return wnd_buffer;
663 /***********************************************************************
664 * SPY_EnterMessage
666 void SPY_EnterMessage( INT iFlag, HWND hWnd, UINT msg,
667 WPARAM wParam, LPARAM lParam )
669 LPCSTR pname;
671 if (!TRACE_ON(message) || SPY_EXCLUDE(msg)) return;
673 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
674 switch(iFlag)
676 case SPY_DISPATCHMESSAGE16:
677 pname = SPY_GetWndName(hWnd);
678 TRACE(message,"%*s(%04x) %-16s message [%04x] %s dispatched wp=%04x lp=%08lx\n",
679 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
680 wParam, lParam);
681 break;
683 case SPY_DISPATCHMESSAGE:
684 pname = SPY_GetWndName(hWnd);
685 TRACE(message,"%*s(%08x) %-16s message [%04x] %s dispatched wp=%08x lp=%08lx\n",
686 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
687 wParam, lParam);
688 break;
690 case SPY_SENDMESSAGE16:
691 case SPY_SENDMESSAGE:
693 char taskName[30];
694 HTASK16 hTask = GetWindowTask16(hWnd);
696 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
697 else if (!hTask) strcpy( taskName, "Wine" );
698 else
700 sprintf( taskName, "task %04x ???", hTask );
701 GetModuleName16( hTask, taskName + 10, sizeof(taskName) - 10 );
703 pname = SPY_GetWndName(hWnd);
705 if (iFlag == SPY_SENDMESSAGE16)
706 TRACE(message, "%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
707 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
708 taskName, wParam, lParam );
709 else
710 TRACE(message, "%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
711 SPY_IndentLevel, "", hWnd, pname, msg, SPY_GetMsgName( msg ),
712 taskName, wParam, lParam );
714 break;
716 case SPY_DEFWNDPROC16:
717 if( SPY_ExcludeDWP ) return;
718 TRACE(message, "%*s(%04x) DefWindowProc16: %s [%04x] wp=%04x lp=%08lx\n",
719 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
720 msg, wParam, lParam );
721 break;
723 case SPY_DEFWNDPROC:
724 if( SPY_ExcludeDWP ) return;
725 TRACE(message, "%*s(%08x) DefWindowProc32: %s [%04x] wp=%08x lp=%08lx\n",
726 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
727 msg, wParam, lParam );
728 break;
730 SPY_IndentLevel += SPY_INDENT_UNIT;
734 /***********************************************************************
735 * SPY_ExitMessage
737 void SPY_ExitMessage( INT iFlag, HWND hWnd, UINT msg, LRESULT lReturn )
739 LPCSTR pname;
741 if (!TRACE_ON(message) || SPY_EXCLUDE(msg) ||
742 (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND)) )
743 return;
745 if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
747 switch(iFlag)
749 case SPY_RESULT_DEFWND16:
750 TRACE(message," %*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
751 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
752 break;
754 case SPY_RESULT_DEFWND:
755 TRACE(message," %*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n",
756 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ), msg, lReturn );
757 break;
759 case SPY_RESULT_OK16:
760 pname = SPY_GetWndName(hWnd);
761 TRACE(message," %*s(%04x) %-16s message [%04x] %s returned %08lx\n",
762 SPY_IndentLevel, "", hWnd, pname, msg,
763 SPY_GetMsgName( msg ), lReturn );
764 break;
766 case SPY_RESULT_OK:
767 pname = SPY_GetWndName(hWnd);
768 TRACE(message," %*s(%08x) %-16s message [%04x] %s returned %08lx\n",
769 SPY_IndentLevel, "", hWnd, pname, msg,
770 SPY_GetMsgName( msg ), lReturn );
771 break;
773 case SPY_RESULT_INVALIDHWND16:
774 pname = SPY_GetWndName(hWnd);
775 WARN(message, " %*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
776 SPY_IndentLevel, "", hWnd, pname, msg,
777 SPY_GetMsgName( msg ) );
778 break;
780 case SPY_RESULT_INVALIDHWND:
781 pname = SPY_GetWndName(hWnd);
782 WARN(message, " %*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
783 SPY_IndentLevel, "", hWnd, pname, msg,
784 SPY_GetMsgName( msg ) );
785 break;
790 /***********************************************************************
791 * SPY_Init
793 int SPY_Init(void)
795 int i;
796 char buffer[1024];
798 if (!TRACE_ON(message)) return TRUE;
800 PROFILE_GetWineIniString( "Spy", "Include", "", buffer, sizeof(buffer) );
801 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
803 TRACE(message, "Include=%s\n", buffer );
804 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
805 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
808 PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer, sizeof(buffer) );
809 if (buffer[0])
811 TRACE(message, "Exclude=%s\n", buffer );
812 if (!strcmp( buffer, "EXCLUDEALL" ))
813 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
814 else
815 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
816 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
819 SPY_ExcludeDWP = PROFILE_GetWineIniInt( "Spy", "ExcludeDWP", 0 );
821 return 1;