blob: 24906ab9a9a4d8836dcc038c4a9924192a15181b [file] [log] [blame]
Alexandre Julliardb817f4f1996-03-14 18:08:34 +00001/*
2 * Message spying routines
Alexandre Julliardcdd09231994-01-12 11:12:51 +00003 *
4 * Copyright 1994, Bob Amstadt
Alexandre Julliardaf0bae51995-10-03 17:06:08 +00005 * 1995, Alex Korobka
Alexandre Julliardcdd09231994-01-12 11:12:51 +00006 */
7
Alexandre Julliard8bbf8181996-09-13 16:50:47 +00008#define NO_TRANSITION_TYPES /* This file is Win32-clean */
Alexandre Julliardcdd09231994-01-12 11:12:51 +00009#include <stdlib.h>
10#include <stdio.h>
Alexandre Julliard8d24ae61994-04-05 21:42:43 +000011#include <string.h>
Alexandre Julliardcdd09231994-01-12 11:12:51 +000012#include "windows.h"
Alexandre Julliardb817f4f1996-03-14 18:08:34 +000013#include "module.h"
Alexandre Julliard86a8d0f1994-01-18 23:04:40 +000014#include "options.h"
Alexandre Julliarde2991ea1995-07-29 13:09:43 +000015#include "stddebug.h"
16#include "debug.h"
Alexandre Julliardaf0bae51995-10-03 17:06:08 +000017#include "spy.h"
Alexandre Julliardcdd09231994-01-12 11:12:51 +000018
Alexandre Julliardb817f4f1996-03-14 18:08:34 +000019#define SPY_MAX_MSGNUM WM_USER
20#define SPY_INDENT_UNIT 4 /* 4 spaces */
21
Alexandre Julliardd90840e1996-06-11 16:02:08 +000022static const char * const MessageTypeNames[SPY_MAX_MSGNUM + 1] =
Alexandre Julliardcdd09231994-01-12 11:12:51 +000023{
Alexandre Julliard1e37a181996-08-18 16:21:52 +000024 "wm_null", /* 0x00 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +000025 "WM_CREATE",
26 "WM_DESTROY",
27 "WM_MOVE",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000028 "wm_sizewait",
Alexandre Julliardcdd09231994-01-12 11:12:51 +000029 "WM_SIZE",
30 "WM_ACTIVATE",
31 "WM_SETFOCUS",
32 "WM_KILLFOCUS",
Alexandre Julliardaf0bae51995-10-03 17:06:08 +000033 "WM_SETVISIBLE",
Alexandre Julliardcdd09231994-01-12 11:12:51 +000034 "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",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000047 "wm_systemerror",
Alexandre Julliardcdd09231994-01-12 11:12:51 +000048 "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",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000061 "wm_unused3",
62 "wm_painticon",
Alexandre Julliardcdd09231994-01-12 11:12:51 +000063 "WM_ICONERASEBKGND",
64 "WM_NEXTDLGCTL",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000065 "wm_alttabactive",
Alexandre Julliardcdd09231994-01-12 11:12:51 +000066 "WM_SPOOLERSTATUS",
67 "WM_DRAWITEM",
68 "WM_MEASUREITEM",
69 "WM_DELETEITEM",
70 "WM_VKEYTOITEM",
71 "WM_CHARTOITEM",
72 "WM_SETFONT", /* 0x30 */
Alexandre Julliardd4719651995-12-12 18:49:11 +000073 "WM_GETFONT",
74 "WM_SETHOTKEY",
75 "WM_GETHOTKEY",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000076 "wm_filesyschange",
77 "wm_isactiveicon",
78 "wm_queryparkicon",
Alexandre Julliardd4719651995-12-12 18:49:11 +000079 "WM_QUERYDRAGICON",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000080 "wm_querysavestate",
Alexandre Julliardd4719651995-12-12 18:49:11 +000081 "WM_COMPAREITEM",
Alexandre Julliard1e37a181996-08-18 16:21:52 +000082 "wm_testing",
Alexandre Julliardb817f4f1996-03-14 18:08:34 +000083 NULL,
Alexandre Julliard1e37a181996-08-18 16:21:52 +000084 "wm_otherwindowcreated",
85 "wm_otherwindowdestroyed",
86 "wm_activateshellwindow",
Alexandre Julliardb817f4f1996-03-14 18:08:34 +000087 NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +000088
Alexandre Julliardaf0bae51995-10-03 17:06:08 +000089 NULL, /* 0x40 */
Alexandre Julliard1e37a181996-08-18 16:21:52 +000090 "wm_compacting", NULL, NULL,
Alexandre Julliardaf0bae51995-10-03 17:06:08 +000091 "WM_COMMNOTIFY", NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +000092 "WM_WINDOWPOSCHANGING", /* 0x0046 */
93 "WM_WINDOWPOSCHANGED", /* 0x0047 */
Alexandre Julliard1e37a181996-08-18 16:21:52 +000094 "WM_POWER", NULL,
95 "WM_COPYDATA",
96 "WM_CANCELJOURNAL", NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +000097
Alexandre Julliardaf0bae51995-10-03 17:06:08 +000098 NULL, /* 0x0050 */
99 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000100 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
101
102 /* 0x0060 */
103 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
104 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
105
106 /* 0x0070 */
107 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
108 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
109
110 NULL, /* 0x0080 */
111 "WM_NCCREATE", /* 0x0081 */
112 "WM_NCDESTROY", /* 0x0082 */
113 "WM_NCCALCSIZE", /* 0x0083 */
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000114 "WM_NCHITTEST", /* 0x0084 */
115 "WM_NCPAINT", /* 0x0085 */
116 "WM_NCACTIVATE", /* 0x0086 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000117 "WM_GETDLGCODE", /* 0x0087 */
Alexandre Julliard1e37a181996-08-18 16:21:52 +0000118 "wm_syncpaint",
119 "wm_synctask", NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000120
121 /* 0x0090 */
122 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
123 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
124
125 /* 0x00A0 */
Alexandre Julliard58199531994-04-21 01:20:00 +0000126 "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,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000137
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000138 /* 0x00B0 - Win32 Edit controls */
Alexandre Julliardc6c09441997-01-12 18:32:19 +0000139 "EM_GETSEL32", /* 0x00b0 */
140 "EM_SETSEL32", /* 0x00b1 */
141 "EM_GETRECT32", /* 0x00b2 */
142 "EM_SETRECT32", /* 0x00b3 */
143 "EM_SETRECTNP32", /* 0x00b4 */
144 "EM_SCROLL32", /* 0x00b5 */
145 "EM_LINESCROLL32", /* 0x00b6 */
146 "EM_SCROLLCARET32", /* 0x00b7 */
147 "EM_GETMODIFY32", /* 0x00b8 */
148 "EM_SETMODIFY32", /* 0x00b9 */
149 "EM_GETLINECOUNT32", /* 0x00ba */
150 "EM_LINEINDEX32", /* 0x00bb */
151 "EM_SETHANDLE32", /* 0x00bc */
152 "EM_GETHANDLE32", /* 0x00bd */
153 "EM_GETTHUMB32", /* 0x00be */
154 NULL, /* 0x00bf */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000155
Alexandre Julliardc6c09441997-01-12 18:32:19 +0000156 NULL, /* 0x00c0 */
157 "EM_LINELENGTH32", /* 0x00c1 */
158 "EM_REPLACESEL32", /* 0x00c2 */
159 NULL, /* 0x00c3 */
160 "EM_GETLINE32", /* 0x00c4 */
161 "EM_LIMITTEXT32", /* 0x00c5 */
162 "EM_CANUNDO32", /* 0x00c6 */
163 "EM_UNDO32", /* 0x00c7 */
164 "EM_FMTLINES32", /* 0x00c8 */
165 "EM_LINEFROMCHAR32", /* 0x00c9 */
166 NULL, /* 0x00ca */
167 "EM_SETTABSTOPS32", /* 0x00cb */
168 "EM_SETPASSWORDCHAR32", /* 0x00cc */
169 "EM_EMPTYUNDOBUFFER32", /* 0x00cd */
170 "EM_GETFIRSTVISIBLELINE32", /* 0x00ce */
171 "EM_SETREADONLY32", /* 0x00cf */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000172
Alexandre Julliardc6c09441997-01-12 18:32:19 +0000173 "EM_SETWORDBREAKPROC32", /* 0x00d0 */
174 "EM_GETWORDBREAKPROC32", /* 0x00d1 */
175 "EM_GETPASSWORDCHAR32", /* 0x00d2 */
176 "EM_SETMARGINS32", /* 0x00d3 */
177 "EM_GETMARGINS32", /* 0x00d4 */
178 "EM_GETLIMITTEXT32", /* 0x00d5 */
179 "EM_POSFROMCHAR32", /* 0x00d6 */
180 "EM_CHARFROMPOS32", /* 0x00d7 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000181 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
182
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000183 /* 0x00E0 - Win32 Scrollbars */
Alexandre Julliard2c69f6d1996-09-28 18:11:01 +0000184 "SBM_SETPOS32", /* 0x00e0 */
185 "SBM_GETPOS32", /* 0x00e1 */
186 "SBM_SETRANGE32", /* 0x00e2 */
187 "SBM_GETRANGE32", /* 0x00e3 */
188 "SBM_ENABLE_ARROWS32", /* 0x00e4 */
189 NULL,
190 "SBM_SETRANGEREDRAW32", /* 0x00e6 */
191 NULL, NULL,
192 "SBM_SETSCROLLINFO32", /* 0x00e9 */
193 "SBM_GETSCROLLINFO32", /* 0x00ea */
194 NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000195
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000196 /* 0x00F0 - Win32 Buttons */
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000197 "BM_GETCHECK32", /* 0x00f0 */
198 "BM_SETCHECK32", /* 0x00f1 */
199 "BM_GETSTATE32", /* 0x00f2 */
200 "BM_SETSTATE32", /* 0x00f3 */
201 "BM_SETSTYLE32", /* 0x00f4 */
202 "BM_CLICK32", /* 0x00f5 */
203 "BM_GETIMAGE32", /* 0x00f6 */
204 "BM_SETIMAGE32", /* 0x00f7 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000205 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
206
207 "WM_KEYDOWN", /* 0x0100 */
208 "WM_KEYUP", /* 0x0101 */
209 "WM_CHAR", /* 0x0102 */
210 "WM_DEADCHAR", /* 0x0103 */
211 "WM_SYSKEYDOWN", /* 0x0104 */
212 "WM_SYSKEYUP", /* 0x0105 */
213 "WM_SYSCHAR", /* 0x0106 */
214 "WM_SYSDEADCHAR", /* 0x0107 */
215 "WM_KEYLAST", /* 0x0108 */
Alexandre Julliardd4719651995-12-12 18:49:11 +0000216 NULL,
217 "WM_CONVERTREQUEST",
218 "WM_CONVERTRESULT",
219 "WM_INTERIM", NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000220
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000221 "WM_INITDIALOG", /* 0x0110 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000222 "WM_COMMAND", /* 0x0111 */
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000223 "WM_SYSCOMMAND", /* 0x0112 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000224 "WM_TIMER", /* 0x0113 */
225 "WM_HSCROLL", /* 0x0114 */
226 "WM_VSCROLL", /* 0x0115 */
Alexandre Julliard3f2abfa1994-08-16 15:43:11 +0000227 "WM_INITMENU", /* 0x0116 */
228 "WM_INITMENUPOPUP", /* 0x0117 */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000229 "WM_SYSTIMER", /* 0x0118 */
Alexandre Julliard2787be81995-05-22 18:23:01 +0000230 NULL, NULL, NULL, NULL, NULL, NULL,
231 "WM_MENUSELECT", /* 0x011f */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000232
Alexandre Julliard2787be81995-05-22 18:23:01 +0000233 "WM_MENUCHAR", /* 0x0120 */
234 "WM_ENTERIDLE", /* 0x0121 */
235 NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000236 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
237
238 /* 0x0130 */
Alexandre Julliard1e9ac791996-06-06 18:38:27 +0000239 NULL,
240 "wm_lbtrackpoint", /* 0x0131 */
241 "WM_CTLCOLORMSGBOX", /* 0x0132 */
242 "WM_CTLCOLOREDIT", /* 0x0133 */
243 "WM_CTLCOLORLISTBOX", /* 0x0134 */
244 "WM_CTLCOLORBTN", /* 0x0135 */
245 "WM_CTLCOLORDLG", /* 0x0136 */
246 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
247 "WM_CTLCOLORSTATIC", /* 0x0138 */
248 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000249
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000250 /* 0x0140 - Win32 Comboboxes */
Alexandre Julliard75d86e11996-11-17 18:59:11 +0000251 "CB_GETEDITSEL32", /* 0x0140 */
252 "CB_LIMITTEXT32", /* 0x0141 */
253 "CB_SETEDITSEL32", /* 0x0142 */
254 "CB_ADDSTRING32", /* 0x0143 */
255 "CB_DELETESTRING32", /* 0x0144 */
256 "CB_DIR32", /* 0x0145 */
257 "CB_GETCOUNT32", /* 0x0146 */
258 "CB_GETCURSEL32", /* 0x0147 */
259 "CB_GETLBTEXT32", /* 0x0148 */
260 "CB_GETLBTEXTLEN32", /* 0x0149 */
261 "CB_INSERTSTRING32", /* 0x014a */
262 "CB_RESETCONTENT32", /* 0x014b */
263 "CB_FINDSTRING32", /* 0x014c */
264 "CB_SELECTSTRING32", /* 0x014d */
265 "CB_SETCURSEL32", /* 0x014e */
266 "CB_SHOWDROPDOWN32", /* 0x014f */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000267
Alexandre Julliard75d86e11996-11-17 18:59:11 +0000268 "CB_GETITEMDATA32", /* 0x0150 */
269 "CB_SETITEMDATA32", /* 0x0151 */
270 "CB_GETDROPPEDCONTROLRECT32",/* 0x0152 */
271 "CB_SETITEMHEIGHT32", /* 0x0153 */
272 "CB_GETITEMHEIGHT32", /* 0x0154 */
273 "CB_SETEXTENDEDUI32", /* 0x0155 */
274 "CB_GETEXTENDEDUI32", /* 0x0156 */
275 "CB_GETDROPPEDSTATE32", /* 0x0157 */
276 "CB_FINDSTRINGEXACT32", /* 0x0158 */
277 "CB_SETLOCALE32", /* 0x0159 */
278 "CB_GETLOCALE32", /* 0x015a */
279 "CB_GETTOPINDEX32", /* 0x015b */
280 "CB_SETTOPINDEX32", /* 0x015c */
281 "CB_GETHORIZONTALEXTENT32", /* 0x015d */
282 "CB_SETHORIZONTALEXTENT32", /* 0x015e */
283 "CB_GETDROPPEDWIDTH32", /* 0x015f */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000284
Alexandre Julliard75d86e11996-11-17 18:59:11 +0000285 "CB_SETDROPPEDWIDTH32", /* 0x0160 */
286 "CB_INITSTORAGE32", /* 0x0161 */
287 NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000288 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
289
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000290 /* 0x0170 - Win32 Static controls */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000291 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
292 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
293
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000294 /* 0x0180 - Win32 Listboxes */
Alexandre Julliardd1ce8b21996-09-02 16:46:30 +0000295 "LB_ADDSTRING32", /* 0x0180 */
296 "LB_INSERTSTRING32", /* 0x0181 */
297 "LB_DELETESTRING32", /* 0x0182 */
298 "LB_SELITEMRANGEEX32", /* 0x0183 */
299 "LB_RESETCONTENT32", /* 0x0184 */
300 "LB_SETSEL32", /* 0x0185 */
301 "LB_SETCURSEL32", /* 0x0186 */
302 "LB_GETSEL32", /* 0x0187 */
303 "LB_GETCURSEL32", /* 0x0188 */
304 "LB_GETTEXT32", /* 0x0189 */
305 "LB_GETTEXTLEN32", /* 0x018a */
306 "LB_GETCOUNT32", /* 0x018b */
307 "LB_SELECTSTRING32", /* 0x018c */
308 "LB_DIR32", /* 0x018d */
309 "LB_GETTOPINDEX32", /* 0x018e */
310 "LB_FINDSTRING32", /* 0x018f */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000311
Alexandre Julliardd1ce8b21996-09-02 16:46:30 +0000312 "LB_GETSELCOUNT32", /* 0x0190 */
313 "LB_GETSELITEMS32", /* 0x0191 */
314 "LB_SETTABSTOPS32", /* 0x0192 */
315 "LB_GETHORIZONTALEXTENT32", /* 0x0193 */
316 "LB_SETHORIZONTALEXTENT32", /* 0x0194 */
317 "LB_SETCOLUMNWIDTH32", /* 0x0195 */
318 "LB_ADDFILE32", /* 0x0196 */
319 "LB_SETTOPINDEX32", /* 0x0197 */
320 "LB_GETITEMRECT32", /* 0x0198 */
321 "LB_GETITEMDATA32", /* 0x0199 */
322 "LB_SETITEMDATA32", /* 0x019a */
323 "LB_SELITEMRANGE32", /* 0x019b */
324 "LB_SETANCHORINDEX32", /* 0x019c */
325 "LB_GETANCHORINDEX32", /* 0x019d */
326 "LB_SETCARETINDEX32", /* 0x019e */
327 "LB_GETCARETINDEX32", /* 0x019f */
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000328
Alexandre Julliardd1ce8b21996-09-02 16:46:30 +0000329 "LB_SETITEMHEIGHT32", /* 0x01a0 */
330 "LB_GETITEMHEIGHT32", /* 0x01a1 */
331 "LB_FINDSTRINGEXACT32", /* 0x01a2 */
Alexandre Julliardda0cfb31996-12-01 17:17:47 +0000332 "LB_CARETON32", /* 0x01a3 */
333 "LB_CARETOFF32", /* 0x01a4 */
Alexandre Julliardd1ce8b21996-09-02 16:46:30 +0000334 "LB_SETLOCALE32", /* 0x01a5 */
335 "LB_GETLOCALE32", /* 0x01a6 */
336 "LB_SETCOUNT32", /* 0x01a7 */
337 "LB_INITSTORAGE32", /* 0x01a8 */
338 "LB_ITEMFROMPOINT32", /* 0x01a9 */
339 NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000340
341 /* 0x01B0 */
342 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
343 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
344
345 /* 0x01C0 */
346 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
347 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
348
349 /* 0x01D0 */
350 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
351 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
352
353 /* 0x01E0 */
354 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
355 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
356
357 /* 0x01F0 */
358 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
359 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
360
361 "WM_MOUSEMOVE", /* 0x0200 */
362 "WM_LBUTTONDOWN", /* 0x0201 */
363 "WM_LBUTTONUP", /* 0x0202 */
364 "WM_LBUTTONDBLCLK", /* 0x0203 */
365 "WM_RBUTTONDOWN", /* 0x0204 */
366 "WM_RBUTTONUP", /* 0x0205 */
367 "WM_RBUTTONDBLCLK", /* 0x0206 */
368 "WM_MBUTTONDOWN", /* 0x0207 */
369 "WM_MBUTTONUP", /* 0x0208 */
370 "WM_MBUTTONDBLCLK", /* 0x0209 */
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000371 NULL, NULL, NULL, NULL, NULL, NULL,
372
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000373 "WM_PARENTNOTIFY", /* 0x0210 */
Alexandre Julliard2787be81995-05-22 18:23:01 +0000374 "WM_ENTERMENULOOP", /* 0x0211 */
375 "WM_EXITMENULOOP", /* 0x0212 */
Alexandre Julliard1e37a181996-08-18 16:21:52 +0000376 "wm_nextmenu", /* 0x0213 */
Alexandre Julliardd4719651995-12-12 18:49:11 +0000377 NULL, NULL, NULL, NULL,
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000378 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
379
Alexandre Julliard2787be81995-05-22 18:23:01 +0000380 "WM_MDICREATE", /* 0x0220 */
381 "WM_MDIDESTROY", /* 0x0221 */
382 "WM_MDIACTIVATE", /* 0x0222 */
383 "WM_MDIRESTORE", /* 0x0223 */
384 "WM_MDINEXT", /* 0x0224 */
385 "WM_MDIMAXIMIZE", /* 0x0225 */
386 "WM_MDITILE", /* 0x0226 */
387 "WM_MDICASCADE", /* 0x0227 */
388 "WM_MDIICONARRANGE", /* 0x0228 */
389 "WM_MDIGETACTIVE", /* 0x0229 */
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000390
Alexandre Julliardade697e1995-11-26 13:59:11 +0000391 "wm_dropobject",
392 "wm_querydropobject",
393 "wm_begindrag",
394 "wm_dragloop",
395 "wn_dragselect",
396 "wm_dragmove",
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000397
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000398 /* 0x0230*/
Alexandre Julliard2787be81995-05-22 18:23:01 +0000399 "WM_MDISETMENU", /* 0x0230 */
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000400 "WM_ENTERSIZEMOVE", /* 0x0231 */
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000401 "WM_EXITSIZEMOVE", /* 0x0232 */
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000402 "WM_DROPFILES", /* 0x0233 */
Alexandre Julliard1e37a181996-08-18 16:21:52 +0000403 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000404 /* 0x0238*/
405 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
406
407 /* 0x0240 */
408 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
409 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
410
411 /* 0x0250 */
412 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
413 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
414
415 /* 0x0260 */
416 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
417 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
418 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
419 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
420
421 /* 0x0280 */
422 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
423 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
424 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
425 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
426
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,
430 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
431
432 /* 0x02c0 */
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,
437
438 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
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
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000443 "WM_CUT", /* 0x0300 */
444 "WM_COPY",
445 "WM_PASTE",
446 "WM_CLEAR",
447 "WM_UNDO",
448 "WM_RENDERFORMAT",
449 "WM_RENDERALLFORMATS",
450 "WM_DESTROYCLIPBOARD",
451 "WM_DRAWCLIPBOARD",
452 "WM_PAINTCLIPBOARD",
453 "WM_VSCROLLCLIPBOARD",
454 "WM_SIZECLIPBOARD",
455 "WM_ASKCBFORMATNAME",
456 "WM_CHANGECBCHAIN",
457 "WM_HSCROLLCLIPBOARD",
458 "WM_QUERYNEWPALETTE", /* 0x030f*/
459
460 "WM_PALETTEISCHANGING",
Alexandre Julliard1e37a181996-08-18 16:21:52 +0000461 "WM_PALETTECHANGED",
462 "WM_HOTKEY", /* 0x0312 */
463 NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000464 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000465
466 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
467 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
468 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
469 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
470
471 /* 0x0340 */
472 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
473 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
474 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
475 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
476
477 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
478 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
479 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
480 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
481
482 /* 0x0380 */
Alexandre Julliard1e37a181996-08-18 16:21:52 +0000483 "WM_PENWINFIRST",
484 "WM_RCRESULT",
485 "WM_HOOKRCRESULT",
486 "WM_GLOBALRCCHANGE",
487 "WM_SKB",
488 "WM_HEDITCTL",
489 NULL, NULL,
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000490 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardd4719651995-12-12 18:49:11 +0000491
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000492 "WM_COALESCE_FIRST",
Alexandre Julliardd4719651995-12-12 18:49:11 +0000493 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
494 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000495 "WM_COALESCE_LAST",
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000496
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,
501
502 /* 0x03c0 */
503 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
504 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
505 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
506 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
507
508 /* 0x03e0 */
509 "WM_DDE_INITIATE", /* 0x3E0 */
510 "WM_DDE_TERMINATE", /* 0x3E1 */
511 "WM_DDE_ADVISE", /* 0x3E2 */
512 "WM_DDE_UNADVISE", /* 0x3E3 */
513 "WM_DDE_ACK", /* 0x3E4 */
514 "WM_DDE_DATA", /* 0x3E5 */
515 "WM_DDE_REQUEST", /* 0x3E6 */
516 "WM_DDE_POKE", /* 0x3E7 */
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000517 "WM_DDE_EXECUTE", /* 0x3E8 */
518 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
519
520
521 /* 0x03f0 */
522 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
523 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
524
525 "WM_USER"
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000526};
527
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000528
Alexandre Julliard8bbf8181996-09-13 16:50:47 +0000529static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000530static int SPY_IndentLevel = 0;
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000531
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000532#define SPY_EXCLUDE(msg) \
533 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000534
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000535/***********************************************************************
536 * SPY_GetMsgName
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000537 */
Alexandre Julliard8bbf8181996-09-13 16:50:47 +0000538const char *SPY_GetMsgName( UINT32 msg )
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000539{
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000540 static char buffer[20];
Alexandre Julliarde2991ea1995-07-29 13:09:43 +0000541
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000542 if (msg <= SPY_MAX_MSGNUM)
543 {
544 if (!MessageTypeNames[msg]) return "???";
545 return MessageTypeNames[msg];
546 }
Alexandre Julliard3051b641996-07-05 17:14:13 +0000547 sprintf( buffer, "WM_USER+%04x", msg - WM_USER );
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000548 return buffer;
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000549}
550
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000551
552/***********************************************************************
553 * SPY_EnterMessage
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000554 */
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000555void SPY_EnterMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg,
556 WPARAM32 wParam, LPARAM lParam )
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000557{
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000558 if (!debugging_message || SPY_EXCLUDE(msg)) return;
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000559
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000560 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000561 switch(iFlag)
Alexandre Julliardd2e1c1a1996-03-09 16:12:43 +0000562 {
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000563 case SPY_DISPATCHMESSAGE16:
564 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s dispatched wp=%04x lp=%08lx\n",
565 SPY_IndentLevel, "", hWnd, msg, SPY_GetMsgName( msg ),
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000566 wParam, lParam);
567 break;
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000568
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000569 case SPY_DISPATCHMESSAGE32:
570 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s dispatched wp=%08x lp=%08lx\n",
571 SPY_IndentLevel, "", hWnd, msg, SPY_GetMsgName( msg ),
572 wParam, lParam);
573 break;
574
575 case SPY_SENDMESSAGE16:
576 case SPY_SENDMESSAGE32:
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000577 {
578 char taskName[30];
Alexandre Julliard8bbf8181996-09-13 16:50:47 +0000579 HTASK16 hTask = GetWindowTask16(hWnd);
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000580 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
581 else if (!hTask) strcpy( taskName, "Wine" );
Alexandre Julliard59730ae1996-03-24 16:20:51 +0000582 else sprintf( taskName, "task %04x %s",
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000583 hTask, MODULE_GetModuleName( GetExePtr(hTask) ) );
584
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000585 if (iFlag == SPY_SENDMESSAGE16)
586 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
587 SPY_IndentLevel, "", hWnd, msg,
588 SPY_GetMsgName( msg ), taskName, wParam,
589 lParam );
590 else
591 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
592 SPY_IndentLevel, "", hWnd, msg,
593 SPY_GetMsgName( msg ), taskName, wParam,
594 lParam );
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000595 }
596 break;
597
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000598 case SPY_DEFWNDPROC16:
Alexandre Julliard59730ae1996-03-24 16:20:51 +0000599 dprintf_message(stddeb, "%*s(%04x) DefWindowProc: %s [%04x] wp=%04x lp=%08lx\n",
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000600 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
601 msg, wParam, lParam );
602 break;
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000603
604 case SPY_DEFWNDPROC32:
605 dprintf_message(stddeb, "%*s(%08x) DefWindowProc: %s [%04x] wp=%08x lp=%08lx\n",
606 SPY_IndentLevel, "", hWnd, SPY_GetMsgName( msg ),
607 msg, wParam, lParam );
608 break;
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000609 }
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000610 SPY_IndentLevel += SPY_INDENT_UNIT;
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000611}
612
613
614/***********************************************************************
615 * SPY_ExitMessage
616 */
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000617void SPY_ExitMessage( INT32 iFlag, HWND32 hWnd, UINT32 msg, LRESULT lReturn )
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000618{
619 if (!debugging_message || SPY_EXCLUDE(msg)) return;
620 if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT;
621
622 switch(iFlag)
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000623 {
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000624 case SPY_RESULT_OK16:
Alexandre Julliard59730ae1996-03-24 16:20:51 +0000625 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s returned %08lx\n",
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000626 SPY_IndentLevel, "", hWnd, msg,
627 SPY_GetMsgName( msg ), lReturn );
628 break;
Alexandre Julliard2d93d001996-05-21 15:01:41 +0000629 case SPY_RESULT_OK32:
630 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s returned %08lx\n",
631 SPY_IndentLevel, "", hWnd, msg,
632 SPY_GetMsgName( msg ), lReturn );
633 break;
634 case SPY_RESULT_INVALIDHWND16:
635 dprintf_message(stddeb,"%*s(%04x) message [%04x] %s HAS INVALID HWND\n",
636 SPY_IndentLevel, "", hWnd, msg,
637 SPY_GetMsgName( msg ) );
638 break;
639 case SPY_RESULT_INVALIDHWND32:
640 dprintf_message(stddeb,"%*s(%08x) message [%04x] %s HAS INVALID HWND\n",
641 SPY_IndentLevel, "", hWnd, msg,
642 SPY_GetMsgName( msg ) );
643 break;
644 }
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000645}
646
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000647
648/***********************************************************************
649 * SPY_Init
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000650 */
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000651int SPY_Init(void)
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000652{
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000653 int i;
654 char buffer[512];
Alexandre Julliardaca05781994-10-17 18:12:41 +0000655
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000656 PROFILE_GetWineIniString( "Spy", "Include", "", buffer, sizeof(buffer) );
657 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
658 {
659 dprintf_message( stddeb, "SpyInit: Include=%s\n", buffer );
660 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
661 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
662 }
Alexandre Julliardaf0bae51995-10-03 17:06:08 +0000663
Alexandre Julliardb817f4f1996-03-14 18:08:34 +0000664 PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer, sizeof(buffer) );
665 if (buffer[0])
666 {
667 dprintf_message( stddeb, "SpyInit: Exclude=%s\n", buffer );
668 if (!strcmp( buffer, "EXCLUDEALL" ))
669 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
670 else
671 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
672 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
673 }
674 return 1;
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000675}