2 * Message spying routines
4 * Copyright 1994, Bob Amstadt
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
30 #include "wine/unicode.h"
32 #include "user_private.h"
33 #include "wine/debug.h"
38 WINE_DEFAULT_DEBUG_CHANNEL(message
);
40 #define SPY_MAX_MSGNUM WM_USER
41 #define SPY_INDENT_UNIT 4 /* 4 spaces */
42 #define ARRAYSIZE(a) ((sizeof(a) / sizeof((a)[0])))
46 static const char * const ClassLongOffsetNames
[] =
48 "GCLP_MENUNAME", /* -8 */
49 "GCLP_HBRBACKGROUND", /* -10 */
50 "GCLP_HCURSOR", /* -12 */
51 "GCLP_HICON", /* -14 */
52 "GCLP_HMODULE", /* -16 */
53 "GCL_CBWNDEXTRA", /* -18 */
54 "GCL_CBCLSEXTRA", /* -20 */
56 "GCLP_WNDPROC", /* -24 */
57 "GCL_STYLE", /* -26 */
61 "GCLP_HICONSM", /* -34 */
64 static const char * const MessageTypeNames
[SPY_MAX_MSGNUM
+ 1] =
82 "WM_CLOSE", /* 0x10 */
98 "WM_SETCURSOR", /* 0x20 */
114 "WM_SETFONT", /* 0x30 */
127 "WM_GETOBJECT", /* 0x3d */
128 "wm_activateshellwindow",
132 "wm_compacting", NULL
, NULL
,
133 "WM_COMMNOTIFY", NULL
,
134 "WM_WINDOWPOSCHANGING", /* 0x0046 */
135 "WM_WINDOWPOSCHANGED", /* 0x0047 */
138 "WM_CANCELJOURNAL", NULL
, NULL
,
142 "WM_INPUTLANGCHANGEREQUEST",
143 "WM_INPUTLANGCHANGE",
147 "WM_NOTIFYFORMAT", NULL
, NULL
,
148 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
151 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
152 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
155 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
163 "WM_SETICON", /* 0x0080 */
164 "WM_NCCREATE", /* 0x0081 */
165 "WM_NCDESTROY", /* 0x0082 */
166 "WM_NCCALCSIZE", /* 0x0083 */
167 "WM_NCHITTEST", /* 0x0084 */
168 "WM_NCPAINT", /* 0x0085 */
169 "WM_NCACTIVATE", /* 0x0086 */
170 "WM_GETDLGCODE", /* 0x0087 */
172 "WM_SYNCTASK", NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
175 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
176 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
179 "WM_NCMOUSEMOVE", /* 0x00a0 */
180 "WM_NCLBUTTONDOWN", /* 0x00a1 */
181 "WM_NCLBUTTONUP", /* 0x00a2 */
182 "WM_NCLBUTTONDBLCLK", /* 0x00a3 */
183 "WM_NCRBUTTONDOWN", /* 0x00a4 */
184 "WM_NCRBUTTONUP", /* 0x00a5 */
185 "WM_NCRBUTTONDBLCLK", /* 0x00a6 */
186 "WM_NCMBUTTONDOWN", /* 0x00a7 */
187 "WM_NCMBUTTONUP", /* 0x00a8 */
188 "WM_NCMBUTTONDBLCLK", /* 0x00a9 */
190 "WM_NCXBUTTONDOWN", /* 0x00ab */
191 "WM_NCXBUTTONUP", /* 0x00ac */
192 "WM_NCXBUTTONDBLCLK", /* 0x00ad */
196 /* 0x00B0 - Win32 Edit controls */
197 "EM_GETSEL", /* 0x00b0 */
198 "EM_SETSEL", /* 0x00b1 */
199 "EM_GETRECT", /* 0x00b2 */
200 "EM_SETRECT", /* 0x00b3 */
201 "EM_SETRECTNP", /* 0x00b4 */
202 "EM_SCROLL", /* 0x00b5 */
203 "EM_LINESCROLL", /* 0x00b6 */
204 "EM_SCROLLCARET", /* 0x00b7 */
205 "EM_GETMODIFY", /* 0x00b8 */
206 "EM_SETMODIFY", /* 0x00b9 */
207 "EM_GETLINECOUNT", /* 0x00ba */
208 "EM_LINEINDEX", /* 0x00bb */
209 "EM_SETHANDLE", /* 0x00bc */
210 "EM_GETHANDLE", /* 0x00bd */
211 "EM_GETTHUMB", /* 0x00be */
215 "EM_LINELENGTH", /* 0x00c1 */
216 "EM_REPLACESEL", /* 0x00c2 */
218 "EM_GETLINE", /* 0x00c4 */
219 "EM_LIMITTEXT", /* 0x00c5 */
220 "EM_CANUNDO", /* 0x00c6 */
221 "EM_UNDO", /* 0x00c7 */
222 "EM_FMTLINES", /* 0x00c8 */
223 "EM_LINEFROMCHAR", /* 0x00c9 */
225 "EM_SETTABSTOPS", /* 0x00cb */
226 "EM_SETPASSWORDCHAR", /* 0x00cc */
227 "EM_EMPTYUNDOBUFFER", /* 0x00cd */
228 "EM_GETFIRSTVISIBLELINE", /* 0x00ce */
229 "EM_SETREADONLY", /* 0x00cf */
231 "EM_SETWORDBREAKPROC", /* 0x00d0 */
232 "EM_GETWORDBREAKPROC", /* 0x00d1 */
233 "EM_GETPASSWORDCHAR", /* 0x00d2 */
234 "EM_SETMARGINS", /* 0x00d3 */
235 "EM_GETMARGINS", /* 0x00d4 */
236 "EM_GETLIMITTEXT", /* 0x00d5 */
237 "EM_POSFROMCHAR", /* 0x00d6 */
238 "EM_CHARFROMPOS", /* 0x00d7 */
239 "EM_SETIMESTATUS", /* 0x00d8 */
240 "EM_GETIMESTATUS", /* 0x00d9 */
241 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
243 /* 0x00E0 - Win32 Scrollbars */
244 "SBM_SETPOS", /* 0x00e0 */
245 "SBM_GETPOS", /* 0x00e1 */
246 "SBM_SETRANGE", /* 0x00e2 */
247 "SBM_GETRANGE", /* 0x00e3 */
248 "SBM_ENABLE_ARROWS", /* 0x00e4 */
250 "SBM_SETRANGEREDRAW", /* 0x00e6 */
252 "SBM_SETSCROLLINFO", /* 0x00e9 */
253 "SBM_GETSCROLLINFO", /* 0x00ea */
254 NULL
, NULL
, NULL
, NULL
, NULL
,
256 /* 0x00F0 - Win32 Buttons */
257 "BM_GETCHECK", /* 0x00f0 */
258 "BM_SETCHECK", /* 0x00f1 */
259 "BM_GETSTATE", /* 0x00f2 */
260 "BM_SETSTATE", /* 0x00f3 */
261 "BM_SETSTYLE", /* 0x00f4 */
262 "BM_CLICK", /* 0x00f5 */
263 "BM_GETIMAGE", /* 0x00f6 */
264 "BM_SETIMAGE", /* 0x00f7 */
265 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
266 "WM_INPUT_DEVICE_CHANGE", /* 0x00fe */
267 "WM_INPUT", /* 0x00ff */
269 "WM_KEYDOWN", /* 0x0100 */
270 "WM_KEYUP", /* 0x0101 */
271 "WM_CHAR", /* 0x0102 */
272 "WM_DEADCHAR", /* 0x0103 */
273 "WM_SYSKEYDOWN", /* 0x0104 */
274 "WM_SYSKEYUP", /* 0x0105 */
275 "WM_SYSCHAR", /* 0x0106 */
276 "WM_SYSDEADCHAR", /* 0x0107 */
278 "WM_UNICHAR", /* 0x0109 */
279 "WM_CONVERTREQUEST", /* 0x010a */
280 "WM_CONVERTRESULT", /* 0x010b */
281 "WM_INTERIM", /* 0x010c */
282 "WM_IME_STARTCOMPOSITION", /* 0x010d */
283 "WM_IME_ENDCOMPOSITION", /* 0x010e */
284 "WM_IME_COMPOSITION", /* 0x010f */
286 "WM_INITDIALOG", /* 0x0110 */
287 "WM_COMMAND", /* 0x0111 */
288 "WM_SYSCOMMAND", /* 0x0112 */
289 "WM_TIMER", /* 0x0113 */
290 "WM_HSCROLL", /* 0x0114 */
291 "WM_VSCROLL", /* 0x0115 */
292 "WM_INITMENU", /* 0x0116 */
293 "WM_INITMENUPOPUP", /* 0x0117 */
294 "WM_SYSTIMER", /* 0x0118 */
295 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
296 "WM_MENUSELECT", /* 0x011f */
298 "WM_MENUCHAR", /* 0x0120 */
299 "WM_ENTERIDLE", /* 0x0121 */
301 "WM_MENURBUTTONUP", /* 0x0122 */
302 "WM_MENUDRAG", /* 0x0123 */
303 "WM_MENUGETOBJECT", /* 0x0124 */
304 "WM_UNINITMENUPOPUP", /* 0x0125 */
305 "WM_MENUCOMMAND", /* 0x0126 */
306 "WM_CHANGEUISTATE", /* 0x0127 */
307 "WM_UPDATEUISTATE", /* 0x0128 */
308 "WM_QUERYUISTATE", /* 0x0129 */
310 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
314 "WM_LBTRACKPOINT", /* 0x0131 */
315 "WM_CTLCOLORMSGBOX", /* 0x0132 */
316 "WM_CTLCOLOREDIT", /* 0x0133 */
317 "WM_CTLCOLORLISTBOX", /* 0x0134 */
318 "WM_CTLCOLORBTN", /* 0x0135 */
319 "WM_CTLCOLORDLG", /* 0x0136 */
320 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
321 "WM_CTLCOLORSTATIC", /* 0x0138 */
322 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
324 /* 0x0140 - Win32 Comboboxes */
325 "CB_GETEDITSEL", /* 0x0140 */
326 "CB_LIMITTEXT", /* 0x0141 */
327 "CB_SETEDITSEL", /* 0x0142 */
328 "CB_ADDSTRING", /* 0x0143 */
329 "CB_DELETESTRING", /* 0x0144 */
330 "CB_DIR", /* 0x0145 */
331 "CB_GETCOUNT", /* 0x0146 */
332 "CB_GETCURSEL", /* 0x0147 */
333 "CB_GETLBTEXT", /* 0x0148 */
334 "CB_GETLBTEXTLEN", /* 0x0149 */
335 "CB_INSERTSTRING", /* 0x014a */
336 "CB_RESETCONTENT", /* 0x014b */
337 "CB_FINDSTRING", /* 0x014c */
338 "CB_SELECTSTRING", /* 0x014d */
339 "CB_SETCURSEL", /* 0x014e */
340 "CB_SHOWDROPDOWN", /* 0x014f */
342 "CB_GETITEMDATA", /* 0x0150 */
343 "CB_SETITEMDATA", /* 0x0151 */
344 "CB_GETDROPPEDCONTROLRECT", /* 0x0152 */
345 "CB_SETITEMHEIGHT", /* 0x0153 */
346 "CB_GETITEMHEIGHT", /* 0x0154 */
347 "CB_SETEXTENDEDUI", /* 0x0155 */
348 "CB_GETEXTENDEDUI", /* 0x0156 */
349 "CB_GETDROPPEDSTATE", /* 0x0157 */
350 "CB_FINDSTRINGEXACT", /* 0x0158 */
351 "CB_SETLOCALE", /* 0x0159 */
352 "CB_GETLOCALE", /* 0x015a */
353 "CB_GETTOPINDEX", /* 0x015b */
354 "CB_SETTOPINDEX", /* 0x015c */
355 "CB_GETHORIZONTALEXTENT", /* 0x015d */
356 "CB_SETHORIZONTALEXTENT", /* 0x015e */
357 "CB_GETDROPPEDWIDTH", /* 0x015f */
359 "CB_SETDROPPEDWIDTH", /* 0x0160 */
360 "CB_INITSTORAGE", /* 0x0161 */
361 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
362 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
364 /* 0x0170 - Win32 Static controls */
365 "STM_SETICON", /* 0x0170 */
366 "STM_GETICON", /* 0x0171 */
367 "STM_SETIMAGE", /* 0x0172 */
368 "STM_GETIMAGE", /* 0x0173 */
369 NULL
, NULL
, NULL
, NULL
,
370 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
372 /* 0x0180 - Win32 Listboxes */
373 "LB_ADDSTRING", /* 0x0180 */
374 "LB_INSERTSTRING", /* 0x0181 */
375 "LB_DELETESTRING", /* 0x0182 */
376 "LB_SELITEMRANGEEX", /* 0x0183 */
377 "LB_RESETCONTENT", /* 0x0184 */
378 "LB_SETSEL", /* 0x0185 */
379 "LB_SETCURSEL", /* 0x0186 */
380 "LB_GETSEL", /* 0x0187 */
381 "LB_GETCURSEL", /* 0x0188 */
382 "LB_GETTEXT", /* 0x0189 */
383 "LB_GETTEXTLEN", /* 0x018a */
384 "LB_GETCOUNT", /* 0x018b */
385 "LB_SELECTSTRING", /* 0x018c */
386 "LB_DIR", /* 0x018d */
387 "LB_GETTOPINDEX", /* 0x018e */
388 "LB_FINDSTRING", /* 0x018f */
390 "LB_GETSELCOUNT", /* 0x0190 */
391 "LB_GETSELITEMS", /* 0x0191 */
392 "LB_SETTABSTOPS", /* 0x0192 */
393 "LB_GETHORIZONTALEXTENT", /* 0x0193 */
394 "LB_SETHORIZONTALEXTENT", /* 0x0194 */
395 "LB_SETCOLUMNWIDTH", /* 0x0195 */
396 "LB_ADDFILE", /* 0x0196 */
397 "LB_SETTOPINDEX", /* 0x0197 */
398 "LB_GETITEMRECT", /* 0x0198 */
399 "LB_GETITEMDATA", /* 0x0199 */
400 "LB_SETITEMDATA", /* 0x019a */
401 "LB_SELITEMRANGE", /* 0x019b */
402 "LB_SETANCHORINDEX", /* 0x019c */
403 "LB_GETANCHORINDEX", /* 0x019d */
404 "LB_SETCARETINDEX", /* 0x019e */
405 "LB_GETCARETINDEX", /* 0x019f */
407 "LB_SETITEMHEIGHT", /* 0x01a0 */
408 "LB_GETITEMHEIGHT", /* 0x01a1 */
409 "LB_FINDSTRINGEXACT", /* 0x01a2 */
410 "LB_CARETON", /* 0x01a3 */
411 "LB_CARETOFF", /* 0x01a4 */
412 "LB_SETLOCALE", /* 0x01a5 */
413 "LB_GETLOCALE", /* 0x01a6 */
414 "LB_SETCOUNT", /* 0x01a7 */
415 "LB_INITSTORAGE", /* 0x01a8 */
416 "LB_ITEMFROMPOINT", /* 0x01a9 */
417 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
421 "LB_GETLISTBOXINFO", /* 0x01b2 */
422 NULL
, NULL
, NULL
, NULL
, NULL
,
423 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
426 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
427 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
430 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
431 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
435 "MN_GETHMENU", /* 0x01E1 */
436 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
437 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
,
443 "WM_MOUSEMOVE", /* 0x0200 */
444 "WM_LBUTTONDOWN", /* 0x0201 */
445 "WM_LBUTTONUP", /* 0x0202 */
446 "WM_LBUTTONDBLCLK", /* 0x0203 */
447 "WM_RBUTTONDOWN", /* 0x0204 */
448 "WM_RBUTTONUP", /* 0x0205 */
449 "WM_RBUTTONDBLCLK", /* 0x0206 */
450 "WM_MBUTTONDOWN", /* 0x0207 */
451 "WM_MBUTTONUP", /* 0x0208 */
452 "WM_MBUTTONDBLCLK", /* 0x0209 */
453 "WM_MOUSEWHEEL", /* 0x020A */
454 "WM_XBUTTONDOWN", /* 0x020B */
455 "WM_XBUTTONUP", /* 0x020C */
456 "WM_XBUTTONDBLCLK", /* 0x020D */
457 "WM_MOUSEHWHEEL", /* 0x020E */
460 "WM_PARENTNOTIFY", /* 0x0210 */
461 "WM_ENTERMENULOOP", /* 0x0211 */
462 "WM_EXITMENULOOP", /* 0x0212 */
463 "WM_NEXTMENU", /* 0x0213 */
468 "WM_DEVICECHANGE", NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
470 "WM_MDICREATE", /* 0x0220 */
471 "WM_MDIDESTROY", /* 0x0221 */
472 "WM_MDIACTIVATE", /* 0x0222 */
473 "WM_MDIRESTORE", /* 0x0223 */
474 "WM_MDINEXT", /* 0x0224 */
475 "WM_MDIMAXIMIZE", /* 0x0225 */
476 "WM_MDITILE", /* 0x0226 */
477 "WM_MDICASCADE", /* 0x0227 */
478 "WM_MDIICONARRANGE", /* 0x0228 */
479 "WM_MDIGETACTIVE", /* 0x0229 */
482 "WM_QUERYDROPOBJECT",
489 "WM_MDISETMENU", /* 0x0230 */
490 "WM_ENTERSIZEMOVE", /* 0x0231 */
491 "WM_EXITSIZEMOVE", /* 0x0232 */
492 "WM_DROPFILES", /* 0x0233 */
493 "WM_MDIREFRESHMENU", /* 0x0234 */
495 "WM_POINTERDEVICECHANGE", /* 0x0238 */
496 "WM_POINTERDEVICEINRANGE", /* 0x0239 */
497 "WM_POINTERDEVICEOUTOFRANGE", /* 0x023a */
498 NULL
, NULL
, NULL
, NULL
, NULL
,
501 "WM_TOUCH", /* 0x0240 */
502 "WM_NCPOINTERUPDATE", /* 0x0241 */
503 "WM_NCPOINTERDOWN", /* 0x0242 */
504 "WM_NCPOINTERUP", /* 0x0243 */
506 "WM_POINTERUPDATE", /* 0x0245 */
507 "WM_POINTERDOWN", /* 0x0246 */
508 "WM_POINTERUP", /* 0x0247 */
510 "WM_POINTERENTER", /* 0x0249 */
511 "WM_POINTERLEAVE", /* 0x024a */
512 "WM_POINTERACTIVATE", /* 0x024b */
513 "WM_POINTERCAPTURECHANGED", /* 0x024c */
514 "WM_TOUCHHITTESTING", /* 0x024d */
515 "WM_POINTERWHEEL", /* 0x024e */
516 "WM_POINTERHWHEEL", /* 0x024f */
519 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
520 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
523 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
524 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
525 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
526 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
530 "WM_IME_SETCONTEXT", /* 0x0281 */
531 "WM_IME_NOTIFY", /* 0x0282 */
532 "WM_IME_CONTROL", /* 0x0283 */
533 "WM_IME_COMPOSITIONFULL", /* 0x0284 */
534 "WM_IME_SELECT", /* 0x0285 */
535 "WM_IME_CHAR", /* 0x0286 */
537 "WM_IME_REQUEST", /* 0x0288 */
538 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
539 "WM_IME_KEYDOWN", /* 0x0290 */
540 "WM_IME_KEYUP", /* 0x0291 */
541 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
542 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
545 "WM_NCMOUSEHOVER", /* 0x02A0 */
546 "WM_MOUSEHOVER", /* 0x02A1 */
547 "WM_NCMOUSELEAVE", /* 0x02A2 */
548 "WM_MOUSELEAVE", /* 0x02A3 */
549 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
550 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
551 "WM_WTSSESSION_CHANGE", /* 0x02B1 */
552 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
553 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
556 "WM_TABLET_FIRST", /* 0x02c0 */
557 "WM_TABLET_FIRST+1", /* 0x02c1 */
558 "WM_TABLET_FIRST+2", /* 0x02c2 */
559 "WM_TABLET_FIRST+3", /* 0x02c3 */
560 "WM_TABLET_FIRST+4", /* 0x02c4 */
561 "WM_TABLET_FIRST+5", /* 0x02c5 */
562 "WM_TABLET_FIRST+7", /* 0x02c6 */
563 "WM_TABLET_FIRST+8", /* 0x02c7 */
564 "WM_TABLET_FIRST+9", /* 0x02c8 */
565 "WM_TABLET_FIRST+10", /* 0x02c9 */
566 "WM_TABLET_FIRST+11", /* 0x02ca */
567 "WM_TABLET_FIRST+12", /* 0x02cb */
568 "WM_TABLET_FIRST+13", /* 0x02cc */
569 "WM_TABLET_FIRST+14", /* 0x02cd */
570 "WM_TABLET_FIRST+15", /* 0x02ce */
571 "WM_TABLET_FIRST+16", /* 0x02cf */
572 "WM_TABLET_FIRST+17", /* 0x02d0 */
573 "WM_TABLET_FIRST+18", /* 0x02d1 */
574 "WM_TABLET_FIRST+19", /* 0x02d2 */
575 "WM_TABLET_FIRST+20", /* 0x02d3 */
576 "WM_TABLET_FIRST+21", /* 0x02d4 */
577 "WM_TABLET_FIRST+22", /* 0x02d5 */
578 "WM_TABLET_FIRST+23", /* 0x02d6 */
579 "WM_TABLET_FIRST+24", /* 0x02d7 */
580 "WM_TABLET_FIRST+25", /* 0x02d8 */
581 "WM_TABLET_FIRST+26", /* 0x02d9 */
582 "WM_TABLET_FIRST+27", /* 0x02da */
583 "WM_TABLET_FIRST+28", /* 0x02db */
584 "WM_TABLET_FIRST+29", /* 0x02dc */
585 "WM_TABLET_FIRST+30", /* 0x02dd */
586 "WM_TABLET_FIRST+31", /* 0x02de */
587 "WM_TABLET_LAST", /* 0x02df */
589 "WM_DPICHANGED", /* 0x02e0 */
591 "WM_DPICHANGED_BEFOREPARENT",/* 0x02e2 */
592 "WM_DPICHANGED_AFTERPARENT",/* 0x02e3 */
593 "WM_GETDPISCALEDSIZE", /* 0x02e4 */
596 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
597 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
598 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
600 "WM_CUT", /* 0x0300 */
606 "WM_RENDERALLFORMATS",
607 "WM_DESTROYCLIPBOARD",
610 "WM_VSCROLLCLIPBOARD",
612 "WM_ASKCBFORMATNAME",
614 "WM_HSCROLLCLIPBOARD",
615 "WM_QUERYNEWPALETTE", /* 0x030f*/
617 "WM_PALETTEISCHANGING",
619 "WM_HOTKEY", /* 0x0312 */
620 "WM_POPUPSYSTEMMENU", /* 0x0313 */
622 "WM_PRINT", /* 0x0317 */
623 "WM_PRINTCLIENT", /* 0x0318 */
624 "WM_APPCOMMAND", /* 0x0319 */
625 "WM_THEMECHANGED", /* 0x031A */
627 "WM_CLIPBOARDUPDATE", /* 0x031D */
628 "WM_DWMCOMPOSITIONCHANGED", /* 0x031E */
629 "WM_DWMNCRENDERINGCHANGED", /* 0x031F */
631 "WM_DWMCOLORIZATIONCOLORCHANGED", /* 0x0320 */
632 "WM_DWMWINDOWMAXIMIZEDCHANGE", /* 0x0321 */
633 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
634 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
636 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
637 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
638 "WM_GETTITLEBARINFOEX", /* 0x033F */
641 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
642 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
644 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
645 "WM_HANDHELDFIRST", /* 0x0358 */
646 "WM_HANDHELDFIRST+1", /* 0x0359 */
647 "WM_HANDHELDFIRST+2", /* 0x035A */
648 "WM_HANDHELDFIRST+3", /* 0x035B */
649 "WM_HANDHELDFIRST+4", /* 0x035C */
650 "WM_HANDHELDFIRST+5", /* 0x035D */
651 "WM_HANDHELDFIRST+6", /* 0x035E */
652 "WM_HANDHELDLAST", /* 0x035F */
654 "WM_QUERYAFXWNDPROC", /* 0x0360 WM_AFXFIRST */
655 "WM_SIZEPARENT", /* 0x0361 */
656 "WM_SETMESSAGESTRING", /* 0x0362 */
657 "WM_IDLEUPDATECMDUI", /* 0x0363 */
658 "WM_INITIALUPDATE", /* 0x0364 */
659 "WM_COMMANDHELP", /* 0x0365 */
660 "WM_HELPHITTEST", /* 0x0366 */
661 "WM_EXITHELPMODE", /* 0x0367 */
662 "WM_RECALCPARENT", /* 0x0368 */
663 "WM_SIZECHILD", /* 0x0369 */
664 "WM_KICKIDLE", /* 0x036A */
665 "WM_QUERYCENTERWND", /* 0x036B */
666 "WM_DISABLEMODAL", /* 0x036C */
667 "WM_FLOATSTATUS", /* 0x036D */
668 "WM_ACTIVATETOPLEVEL", /* 0x036E */
669 "WM_QUERY3DCONTROLS", /* 0x036F */
671 "WM_SOCKET_NOTIFY", /* 0x0373 */
672 "WM_SOCKET_DEAD", /* 0x0374 */
673 "WM_POPMESSAGESTRING", /* 0x0375 */
674 "WM_OCC_LOADFROMSTREAM", /* 0x0376 */
675 "WM_OCC_LOADFROMSTORAGE", /* 0x0377 */
676 "WM_OCC_INITNEW", /* 0x0378 */
677 "WM_QUEUE_SENTINEL", /* 0x0379 */
678 "WM_OCC_LOADFROMSTREAM_EX", /* 0x037A */
679 "WM_OCC_LOADFROMSTORAGE_EX", /* 0x037B */
682 "WM_AFXLAST", /* 0x037F */
684 "WM_PENWINFIRST", /* 0x0380 */
685 "WM_RCRESULT", /* 0x0381 */
686 "WM_HOOKRCRESULT", /* 0x0382 */
687 "WM_GLOBALRCCHANGE", /* 0x0383 */
688 "WM_SKB", /* 0x0384 */
689 "WM_HEDITCTL", /* 0x0385 */
691 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
692 "WM_PENWINLAST", /* 0x038F */
694 "WM_COALESCE_FIRST", /* 0x0390 */
695 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
696 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
697 "WM_COALESCE_LAST", /* 0x039F */
704 NULL
, NULL
, NULL
, NULL
,
705 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
708 NULL
, NULL
, NULL
, NULL
, NULL
,
713 "MM_MCINOTIFY", /* 0x03B9 */
715 "MM_WOM_OPEN", /* 0x03BB */
716 "MM_WOM_CLOSE", /* 0x03BC */
717 "MM_WOM_DONE", /* 0x03BD */
718 "MM_WIM_OPEN", /* 0x03BE */
719 "MM_WIM_CLOSE", /* 0x03BF */
722 "MM_WIM_DATA", /* 0x03C0 */
723 "MM_MIM_OPEN", /* 0x03C1 */
724 "MM_MIM_CLOSE", /* 0x03C2 */
725 "MM_MIM_DATA", /* 0x03C3 */
726 "MM_MIM_LONGDATA", /* 0x03C4 */
727 "MM_MIM_ERROR", /* 0x03C5 */
728 "MM_MIM_LONGERROR", /* 0x03C6 */
729 "MM_MOM_OPEN", /* 0x03C7 */
730 "MM_MOM_CLOSE", /* 0x03C8 */
731 "MM_MOM_DONE", /* 0x03C9 */
732 "MM_MOM_POSITIONCB", /* 0x03CA */
733 "MM_MCISIGNAL", /* 0x03CB */
734 "MM_MIM_MOREDATA", /* 0x03CC */
738 "MM_MIXM_LINE_CHANGE",
739 "MM_MIXM_CONTROL_CHANGE",
740 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
741 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
744 "WM_DDE_INITIATE", /* 0x3E0 */
745 "WM_DDE_TERMINATE", /* 0x3E1 */
746 "WM_DDE_ADVISE", /* 0x3E2 */
747 "WM_DDE_UNADVISE", /* 0x3E3 */
748 "WM_DDE_ACK", /* 0x3E4 */
749 "WM_DDE_DATA", /* 0x3E5 */
750 "WM_DDE_REQUEST", /* 0x3E6 */
751 "WM_DDE_POKE", /* 0x3E7 */
752 "WM_DDE_EXECUTE", /* 0x3E8 */
753 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
757 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
758 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
760 "WM_USER" /* 0x0400 */
764 #define SPY_MAX_LVMMSGNUM 182
765 static const char * const LVMMessageTypeNames
[SPY_MAX_LVMMSGNUM
+ 1] =
767 "LVM_GETBKCOLOR", /* 1000 */
776 "LVM_DELETEALLITEMS",
777 "LVM_GETCALLBACKMASK",
778 "LVM_SETCALLBACKMASK",
782 "LVM_SETITEMPOSITION",
783 "LVM_GETITEMPOSITION",
784 "LVM_GETSTRINGWIDTHA",
791 "LVM_GETEDITCONTROL",
796 "LVM_GETCOLUMNWIDTH",
797 "LVM_SETCOLUMNWIDTH",
800 "LVM_CREATEDRAGIMAGE",
804 "LVM_GETTEXTBKCOLOR",
805 "LVM_SETTEXTBKCOLOR",
807 "LVM_GETCOUNTPERPAGE",
816 "LVM_SETITEMPOSITION32",
817 "LVM_GETSELECTEDCOUNT",
818 "LVM_GETITEMSPACING",
819 "LVM_GETISEARCHSTRINGA",
820 "LVM_SETICONSPACING",
821 "LVM_SETEXTENDEDLISTVIEWSTYLE",
822 "LVM_GETEXTENDEDLISTVIEWSTYLE",
823 "LVM_GETSUBITEMRECT",
824 "LVM_SUBITEMHITTEST",
825 "LVM_SETCOLUMNORDERARRAY",
826 "LVM_GETCOLUMNORDERARRAY",
831 "LVM_APPROXIMATEVIEWRECT",
833 "LVM_GETSELECTIONMARK",
834 "LVM_SETSELECTIONMARK",
840 "LVM_GETNUMBEROFWORKAREAS",
854 "LVM_GETSTRINGWIDTHW",
884 "LVM_GETISEARCHSTRINGW",
906 "LVM_GETBKIMAGEW", /* 0x108B */
907 "LVM_SETSELECTEDCOLUMN",
921 "LVM_MOVEITEMTOGROUP",
922 "LVM_SETGROUPMETRICS",
923 "LVM_GETGROUPMETRICS",
924 "LVM_ENABLEGROUPVIEW",
926 "LVM_INSERTGROUPSORTED",
927 "LVM_REMOVEALLGROUPS",
929 "LVM_SETTILEVIEWINFO",
930 "LVM_GETTILEVIEWINFO",
935 "LVM_INSERTMARKHITTEST",
936 "LVM_GETINSERTMARKRECT",
937 "LVM_SETINSERTMARKCOLOR",
938 "LVM_GETINSERTMARKCOLOR",
941 "LVM_GETSELECTEDCOLUMN",
942 "LVM_ISGROUPVIEWENABLED",
943 "LVM_GETOUTLINECOLOR",
944 "LVM_SETOUTLINECOLOR",
946 "LVM_CANCELEDITLABEL",
953 #define SPY_MAX_TVMSGNUM 65
954 static const char * const TVMessageTypeNames
[SPY_MAX_TVMSGNUM
+ 1] =
956 "TVM_INSERTITEMA", /* 1100 */
971 "TVM_GETEDITCONTROL",
972 "TVM_GETVISIBLECOUNT",
974 "TVM_CREATEDRAGIMAGE",
977 "TVM_SORTCHILDRENCB",
978 "TVM_ENDEDITLABELNOW",
979 "TVM_GETISEARCHSTRINGA",
993 "TVM_SETINSERTMARKCOLOR",
994 "TVM_GETINSERTMARKCOLOR",
1020 "TVM_GETISEARCHSTRINGW",
1025 #define SPY_MAX_HDMMSGNUM 19
1026 static const char * const HDMMessageTypeNames
[SPY_MAX_HDMMSGNUM
+ 1] =
1028 "HDM_GETITEMCOUNT", /* 1200 */
1044 "HDM_CREATEDRAGIMAGE",
1045 "GETORDERARRAYINDEX",
1046 "SETORDERARRAYINDEX",
1051 #define SPY_MAX_TCMMSGNUM 62
1052 static const char * const TCMMessageTypeNames
[SPY_MAX_TCMMSGNUM
+ 1] =
1063 "TCM_DELETEALLITEMS",
1103 "TCM_SETMINTABWIDTH",
1105 "TCM_HIGHLIGHTITEM",
1106 "TCM_SETEXTENDEDSTYLE",
1107 "TCM_GETEXTENDEDSTYLE",
1119 #define SPY_MAX_PGMMSGNUM 13
1120 static const char * const PGMMessageTypeNames
[SPY_MAX_PGMMSGNUM
+ 1] =
1132 "PGM_SETBUTTONSIZE",
1133 "PGM_GETBUTTONSIZE",
1134 "PGM_GETBUTTONSTATE",
1139 #define SPY_MAX_CCMMSGNUM 9
1140 static const char * const CCMMessageTypeNames
[SPY_MAX_CCMMSGNUM
+ 1] =
1144 "CCM_SETCOLORSCHEME",
1145 "CCM_GETCOLORSCHEME",
1146 "CCM_GETDROPTARGET",
1147 "CCM_SETUNICODEFORMAT",
1148 "CCM_GETUNICODEFORMAT",
1151 "CCM_SETNOTIFYWINDOW"
1154 #define SPY_MAX_WINEMSGNUM (WM_WINE_MOUSE_LL_HOOK - WM_WINE_DESTROYWINDOW)
1155 static const char * const WINEMessageTypeNames
[SPY_MAX_WINEMSGNUM
+ 1] =
1157 "WM_WINE_DESTROYWINDOW",
1158 "WM_WINE_SETWINDOWPOS",
1159 "WM_WINE_SHOWWINDOW",
1160 "WM_WINE_SETPARENT",
1161 "WM_WINE_SETWINDOWLONG",
1163 "WM_WINE_SETACTIVEWINDOW",
1164 "WM_WINE_KEYBOARD_LL_HOOK",
1165 "WM_WINE_MOUSE_LL_HOOK",
1168 /* Virtual key names */
1169 #define SPY_MAX_VKKEYSNUM 255
1170 static const char * const VK_KeyNames
[SPY_MAX_VKKEYSNUM
+ 1] =
1173 "VK_LBUTTON", /* 0x01 */
1174 "VK_RBUTTON", /* 0x02 */
1175 "VK_CANCEL", /* 0x03 */
1176 "VK_MBUTTON", /* 0x04 */
1177 "VK_XBUTTON1", /* 0x05 */
1178 "VK_XBUTTON2", /* 0x06 */
1180 "VK_BACK", /* 0x08 */
1181 "VK_TAB", /* 0x09 */
1184 "VK_CLEAR", /* 0x0C */
1185 "VK_RETURN", /* 0x0D */
1188 "VK_SHIFT", /* 0x10 */
1189 "VK_CONTROL", /* 0x11 */
1190 "VK_MENU", /* 0x12 */
1191 "VK_PAUSE", /* 0x13 */
1192 "VK_CAPITAL", /* 0x14 */
1199 "VK_ESCAPE", /* 0x1B */
1200 "VK_CONVERT", /* 0x1C */
1201 "VK_NONCONVERT", /* 0x1D */
1202 "VK_ACCEPT", /* 0x1E */
1203 "VK_MODECHANGE", /* 0x1F */
1204 "VK_SPACE", /* 0x20 */
1205 "VK_PRIOR", /* 0x21 */
1206 "VK_NEXT", /* 0x22 */
1207 "VK_END", /* 0x23 */
1208 "VK_HOME", /* 0x24 */
1209 "VK_LEFT", /* 0x25 */
1211 "VK_RIGHT", /* 0x27 */
1212 "VK_DOWN", /* 0x28 */
1213 "VK_SELECT", /* 0x29 */
1214 "VK_PRINT", /* 0x2A */
1215 "VK_EXECUTE", /* 0x2B */
1216 "VK_SNAPSHOT", /* 0x2C */
1217 "VK_INSERT", /* 0x2D */
1218 "VK_DELETE", /* 0x2E */
1219 "VK_HELP", /* 0x2F */
1263 "VK_LWIN", /* 0x5B */
1264 "VK_RWIN", /* 0x5C */
1265 "VK_APPS", /* 0x5D */
1267 "VK_SLEEP", /* 0x5F */
1268 "VK_NUMPAD0", /* 0x60 */
1269 "VK_NUMPAD1", /* 0x61 */
1270 "VK_NUMPAD2", /* 0x62 */
1271 "VK_NUMPAD3", /* 0x63 */
1272 "VK_NUMPAD4", /* 0x64 */
1273 "VK_NUMPAD5", /* 0x65 */
1274 "VK_NUMPAD6", /* 0x66 */
1275 "VK_NUMPAD7", /* 0x67 */
1276 "VK_NUMPAD8", /* 0x68 */
1277 "VK_NUMPAD9", /* 0x69 */
1278 "VK_MULTIPLY", /* 0x6A */
1279 "VK_ADD", /* 0x6B */
1280 "VK_SEPARATOR", /* 0x6C */
1281 "VK_SUBTRACT", /* 0x6D */
1282 "VK_DECIMAL", /* 0x6E */
1283 "VK_DIVIDE", /* 0x6F */
1293 "VK_F10", /* 0x79 */
1294 "VK_F11", /* 0x7A */
1295 "VK_F12", /* 0x7B */
1296 "VK_F13", /* 0x7C */
1297 "VK_F14", /* 0x7D */
1298 "VK_F15", /* 0x7E */
1299 "VK_F16", /* 0x7F */
1300 "VK_F17", /* 0x80 */
1301 "VK_F18", /* 0x81 */
1302 "VK_F19", /* 0x82 */
1303 "VK_F20", /* 0x83 */
1304 "VK_F21", /* 0x84 */
1305 "VK_F22", /* 0x85 */
1306 "VK_F23", /* 0x86 */
1307 "VK_F24", /* 0x87 */
1316 "VK_NUMLOCK", /* 0x90 */
1317 "VK_SCROLL", /* 0x91 */
1318 "VK_OEM_NEC_EQUAL", /* 0x92 aka. VK_OEM_FJ_JISHO */
1319 "VK_OEM_FJ_MASSHOU", /* 0x93 */
1320 "VK_OEM_FJ_TOUROKU", /* 0x94 */
1321 "VK_OEM_FJ_LOYA", /* 0x95 */
1322 "VK_OEM_FJ_ROYA", /* 0x96 */
1332 "VK_LSHIFT", /* 0xA0 */
1333 "VK_RSHIFT", /* 0xA1 */
1334 "VK_LCONTROL", /* 0xA2 */
1335 "VK_RCONTROL", /* 0xA3 */
1336 "VK_LMENU", /* 0xA4 */
1337 "VK_RMENU", /* 0xA5 */
1338 "VK_BROWSER_BACK", /* 0xA6 */
1339 "VK_BROWSER_FORWARD", /* 0xA7 */
1340 "VK_BROWSER_REFRESH", /* 0xA8 */
1341 "VK_BROWSER_STOP", /* 0xA9 */
1342 "VK_BROWSER_SEARCH", /* 0xAA */
1343 "VK_BROWSER_FAVORITES", /* 0xAB */
1344 "VK_BROWSER_HOME", /* 0xAC */
1345 "VK_VOLUME_MUTE", /* 0xAD */
1346 "VK_VOLUME_DOWN", /* 0xAE */
1347 "VK_VOLUME_UP", /* 0xAF */
1348 "VK_MEDIA_NEXT_TRACK", /* 0xB0 */
1349 "VK_MEDIA_PREV_TRACK", /* 0xB1 */
1350 "VK_MEDIA_STOP", /* 0xB2 */
1351 "VK_MEDIA_PLAY_PAUSE", /* 0xB3 */
1352 "VK_LAUNCH_MAIL", /* 0xB4 */
1353 "VK_LAUNCH_MEDIA_SELECT", /* 0xB5 */
1354 "VK_LAUNCH_APP1", /* 0xB6 */
1355 "VK_LAUNCH_APP2", /* 0xB7 */
1358 "VK_OEM_1", /* 0xBA */
1359 "VK_OEM_PLUS", /* 0xBB */
1360 "VK_OEM_COMMA", /* 0xBC */
1361 "VK_OEM_MINUS", /* 0xBD */
1362 "VK_OEM_PERIOD", /* 0xBE */
1363 "VK_OEM_2", /* 0xBF */
1364 "VK_OEM_3", /* 0xC0 */
1391 "VK_OEM_4", /* 0xDB */
1392 "VK_OEM_5", /* 0xDC */
1393 "VK_OEM_6", /* 0xDD */
1394 "VK_OEM_7", /* 0xDE */
1395 "VK_OEM_8", /* 0xDF */
1397 "VK_OEM_AX", /* 0xE1 */
1398 "VK_OEM_102", /* 0xE2 */
1399 "VK_ICO_HELP", /* 0xE3 */
1400 "VK_ICO_00", /* 0xE4 */
1401 "VK_PROCESSKEY", /* 0xE5 */
1403 "VK_PACKET", /* 0xE7 */
1418 "VK_ATTN", /* 0xF6 */
1419 "VK_CRSEL", /* 0xF7 */
1420 "VK_EXSEL", /* 0xF8 */
1421 "VK_EREOF", /* 0xF9 */
1422 "VK_PLAY", /* 0xFA */
1423 "VK_ZOOM", /* 0xFB */
1424 "VK_NONAME", /* 0xFC */
1425 "VK_PA1", /* 0xFD */
1426 "VK_OEM_CLEAR", /* 0xFE */
1431 /************************************************************************/
1434 /* WM_USER+n message values for "common controls" */
1438 const char *name
; /* name of control message */
1439 UINT value
; /* message number (0x0401-0x0fff */
1440 UINT len
; /* length of space at lParam to dump */
1446 const WCHAR
*classname
; /* class name to match */
1447 const USER_MSG
*classmsg
; /* pointer to first USER_MSG for class */
1448 UINT count
; /* number of entries */
1451 #define USM(a,b) { #a ,a,b}
1452 #define SZOF(a) sizeof(a)
1454 /* To dump memory at the lParam for any of these messages, */
1455 /* replace the "0" with a "SZOF(structure)", or with a */
1456 /* number. (First method preferred.) */
1458 #define RB_GETBANDINFO_OLD (WM_USER+5) /* obsoleted after IE3, but we have to support it anyway */
1460 static const USER_MSG rebar_array
[] = {
1461 USM(RB_INSERTBANDA
, 0),
1462 USM(RB_DELETEBAND
, 0),
1463 USM(RB_GETBARINFO
, 0),
1464 USM(RB_SETBARINFO
, 0),
1465 USM(RB_GETBANDINFO_OLD
, 0),
1466 USM(RB_SETBANDINFOA
, 0),
1467 USM(RB_SETPARENT
, 0),
1470 USM(RB_INSERTBANDW
, 0),
1471 USM(RB_SETBANDINFOW
, 0),
1472 USM(RB_GETBANDCOUNT
, 0),
1473 USM(RB_GETROWCOUNT
, 0),
1474 USM(RB_GETROWHEIGHT
, 0),
1475 USM(RB_IDTOINDEX
, 0),
1476 USM(RB_GETTOOLTIPS
, 0),
1477 USM(RB_SETTOOLTIPS
, 0),
1478 USM(RB_SETBKCOLOR
, 0),
1479 USM(RB_GETBKCOLOR
, 0),
1480 USM(RB_SETTEXTCOLOR
, 0),
1481 USM(RB_GETTEXTCOLOR
, 0),
1482 USM(RB_SIZETORECT
, 0),
1483 USM(RB_BEGINDRAG
, 0),
1485 USM(RB_DRAGMOVE
, 0),
1486 USM(RB_GETBARHEIGHT
, 0),
1487 USM(RB_GETBANDINFOW
, 0),
1488 USM(RB_GETBANDINFOA
, 0),
1489 USM(RB_MINIMIZEBAND
, 0),
1490 USM(RB_MAXIMIZEBAND
, 0),
1491 USM(RB_GETBANDBORDERS
, 0),
1492 USM(RB_SHOWBAND
, 0),
1493 USM(RB_SETPALETTE
, 0),
1494 USM(RB_GETPALETTE
, 0),
1495 USM(RB_MOVEBAND
, 0),
1498 static const USER_MSG toolbar_array
[] = {
1499 USM(TB_ENABLEBUTTON
,0),
1500 USM(TB_CHECKBUTTON
,0),
1501 USM(TB_PRESSBUTTON
,0),
1502 USM(TB_HIDEBUTTON
,0),
1503 USM(TB_INDETERMINATE
,0),
1504 USM(TB_MARKBUTTON
,0),
1505 USM(TB_ISBUTTONENABLED
,0),
1506 USM(TB_ISBUTTONCHECKED
,0),
1507 USM(TB_ISBUTTONPRESSED
,0),
1508 USM(TB_ISBUTTONHIDDEN
,0),
1509 USM(TB_ISBUTTONINDETERMINATE
,0),
1510 USM(TB_ISBUTTONHIGHLIGHTED
,0),
1511 USM(TB_SETSTATE
,0),
1512 USM(TB_GETSTATE
,0),
1513 USM(TB_ADDBITMAP
,0),
1514 USM(TB_ADDBUTTONSA
,0),
1515 USM(TB_INSERTBUTTONA
,0),
1516 USM(TB_DELETEBUTTON
,0),
1517 USM(TB_GETBUTTON
,0),
1518 USM(TB_BUTTONCOUNT
,0),
1519 USM(TB_COMMANDTOINDEX
,0),
1520 USM(TB_SAVERESTOREA
,0),
1521 USM(TB_CUSTOMIZE
,0),
1522 USM(TB_ADDSTRINGA
,0),
1523 USM(TB_GETITEMRECT
,0),
1524 USM(TB_BUTTONSTRUCTSIZE
,0),
1525 USM(TB_SETBUTTONSIZE
,0),
1526 USM(TB_SETBITMAPSIZE
,0),
1527 USM(TB_AUTOSIZE
,0),
1528 USM(TB_GETTOOLTIPS
,0),
1529 USM(TB_SETTOOLTIPS
,0),
1530 USM(TB_SETPARENT
,0),
1533 USM(TB_GETBITMAPFLAGS
,0),
1534 USM(TB_SETCMDID
,0),
1535 USM(TB_CHANGEBITMAP
,0),
1536 USM(TB_GETBITMAP
,0),
1537 USM(TB_GETBUTTONTEXTA
,0),
1538 USM(TB_REPLACEBITMAP
,0),
1539 USM(TB_SETINDENT
,0),
1540 USM(TB_SETIMAGELIST
,0),
1541 USM(TB_GETIMAGELIST
,0),
1542 USM(TB_LOADIMAGES
,0),
1544 USM(TB_SETHOTIMAGELIST
,0),
1545 USM(TB_GETHOTIMAGELIST
,0),
1546 USM(TB_SETDISABLEDIMAGELIST
,0),
1547 USM(TB_GETDISABLEDIMAGELIST
,0),
1548 USM(TB_SETSTYLE
,0),
1549 USM(TB_GETSTYLE
,0),
1550 USM(TB_GETBUTTONSIZE
,0),
1551 USM(TB_SETBUTTONWIDTH
,0),
1552 USM(TB_SETMAXTEXTROWS
,0),
1553 USM(TB_GETTEXTROWS
,0),
1554 USM(TB_GETOBJECT
,0),
1555 USM(TB_GETBUTTONINFOW
,0),
1556 USM(TB_SETBUTTONINFOW
,0),
1557 USM(TB_GETBUTTONINFOA
,0),
1558 USM(TB_SETBUTTONINFOA
,0),
1559 USM(TB_INSERTBUTTONW
,0),
1560 USM(TB_ADDBUTTONSW
,0),
1562 USM(TB_SETDRAWTEXTFLAGS
,0),
1563 USM(TB_GETHOTITEM
,0),
1564 USM(TB_SETHOTITEM
,0),
1565 USM(TB_SETANCHORHIGHLIGHT
,0),
1566 USM(TB_GETANCHORHIGHLIGHT
,0),
1567 USM(TB_GETBUTTONTEXTW
,0),
1568 USM(TB_SAVERESTOREW
,0),
1569 USM(TB_ADDSTRINGW
,0),
1570 USM(TB_MAPACCELERATORA
,0),
1571 USM(TB_GETINSERTMARK
,0),
1572 USM(TB_SETINSERTMARK
,0),
1573 USM(TB_INSERTMARKHITTEST
,0),
1574 USM(TB_MOVEBUTTON
,0),
1575 USM(TB_GETMAXSIZE
,0),
1576 USM(TB_SETEXTENDEDSTYLE
,0),
1577 USM(TB_GETEXTENDEDSTYLE
,0),
1578 USM(TB_GETPADDING
,0),
1579 USM(TB_SETPADDING
,0),
1580 USM(TB_SETINSERTMARKCOLOR
,0),
1581 USM(TB_GETINSERTMARKCOLOR
,0),
1582 USM(TB_MAPACCELERATORW
,0),
1583 USM(TB_GETSTRINGW
,0),
1584 USM(TB_GETSTRINGA
,0),
1585 USM(TB_SETBOUNDINGSIZE
,8),
1586 USM(TB_SETHOTITEM2
,0),
1587 USM(TB_HASACCELERATOR
,0),
1588 USM(TB_SETLISTGAP
,0),
1589 USM(TB_GETIMAGELISTCOUNT
,0),
1590 USM(TB_GETIDEALSIZE
,8),
1591 USM(TB_UNKWN464
,0),
1594 static const USER_MSG tooltips_array
[] = {
1595 USM(TTM_ACTIVATE
,0),
1596 USM(TTM_SETDELAYTIME
,0),
1597 USM(TTM_ADDTOOLA
,0),
1598 USM(TTM_DELTOOLA
,0),
1599 USM(TTM_NEWTOOLRECTA
,0),
1600 USM(TTM_RELAYEVENT
,0),
1601 USM(TTM_GETTOOLINFOA
,0),
1602 USM(TTM_HITTESTA
,0),
1603 USM(TTM_GETTEXTA
,0),
1604 USM(TTM_UPDATETIPTEXTA
,0),
1605 USM(TTM_GETTOOLCOUNT
,0),
1606 USM(TTM_ENUMTOOLSA
,0),
1607 USM(TTM_GETCURRENTTOOLA
,0),
1608 USM(TTM_WINDOWFROMPOINT
,0),
1609 USM(TTM_TRACKACTIVATE
,0),
1610 USM(TTM_TRACKPOSITION
,0),
1611 USM(TTM_SETTIPBKCOLOR
,0),
1612 USM(TTM_SETTIPTEXTCOLOR
,0),
1613 USM(TTM_GETDELAYTIME
,0),
1614 USM(TTM_GETTIPBKCOLOR
,0),
1615 USM(TTM_GETTIPTEXTCOLOR
,0),
1616 USM(TTM_SETMAXTIPWIDTH
,0),
1617 USM(TTM_GETMAXTIPWIDTH
,0),
1618 USM(TTM_SETMARGIN
,0),
1619 USM(TTM_GETMARGIN
,0),
1622 USM(TTM_GETBUBBLESIZE
,0),
1623 USM(TTM_ADDTOOLW
,0),
1624 USM(TTM_DELTOOLW
,0),
1625 USM(TTM_NEWTOOLRECTW
,0),
1626 USM(TTM_GETTOOLINFOW
,0),
1627 USM(TTM_SETTOOLINFOW
,0),
1628 USM(TTM_HITTESTW
,0),
1629 USM(TTM_GETTEXTW
,0),
1630 USM(TTM_UPDATETIPTEXTW
,0),
1631 USM(TTM_ENUMTOOLSW
,0),
1632 USM(TTM_GETCURRENTTOOLW
,0),
1635 static const USER_MSG comboex_array
[] = {
1636 USM(CBEM_INSERTITEMA
,0),
1637 USM(CBEM_SETIMAGELIST
,0),
1638 USM(CBEM_GETIMAGELIST
,0),
1639 USM(CBEM_GETITEMA
,0),
1640 USM(CBEM_SETITEMA
,0),
1641 USM(CBEM_GETCOMBOCONTROL
,0),
1642 USM(CBEM_GETEDITCONTROL
,0),
1643 USM(CBEM_SETEXSTYLE
,0),
1644 USM(CBEM_GETEXTENDEDSTYLE
,0),
1645 USM(CBEM_HASEDITCHANGED
,0),
1646 USM(CBEM_INSERTITEMW
,0),
1647 USM(CBEM_SETITEMW
,0),
1648 USM(CBEM_GETITEMW
,0),
1649 USM(CBEM_SETEXTENDEDSTYLE
,0),
1652 static const USER_MSG propsht_array
[] = {
1653 USM(PSM_SETCURSEL
,0),
1654 USM(PSM_REMOVEPAGE
,0),
1655 USM(PSM_ADDPAGE
,0),
1656 USM(PSM_CHANGED
,0),
1657 USM(PSM_RESTARTWINDOWS
,0),
1658 USM(PSM_REBOOTSYSTEM
,0),
1659 USM(PSM_CANCELTOCLOSE
,0),
1660 USM(PSM_QUERYSIBLINGS
,0),
1661 USM(PSM_UNCHANGED
,0),
1663 USM(PSM_SETTITLEA
,0),
1664 USM(PSM_SETWIZBUTTONS
,0),
1665 USM(PSM_PRESSBUTTON
,0),
1666 USM(PSM_SETCURSELID
,0),
1667 USM(PSM_SETFINISHTEXTA
,0),
1668 USM(PSM_GETTABCONTROL
,0),
1669 USM(PSM_ISDIALOGMESSAGE
,0),
1670 USM(PSM_GETCURRENTPAGEHWND
,0),
1671 USM(PSM_SETTITLEW
,0),
1672 USM(PSM_SETFINISHTEXTW
,0),
1674 static const WCHAR PropSheetInfoStr
[] =
1675 {'P','r','o','p','e','r','t','y','S','h','e','e','t','I','n','f','o',0 };
1677 static const USER_MSG updown_array
[] = {
1678 USM(UDM_SETRANGE
,0),
1679 USM(UDM_GETRANGE
,0),
1682 USM(UDM_SETBUDDY
,0),
1683 USM(UDM_GETBUDDY
,0),
1684 USM(UDM_SETACCEL
,0),
1685 USM(UDM_GETACCEL
,0),
1686 USM(UDM_SETBASE
,0),
1687 USM(UDM_GETBASE
,0),
1688 USM(UDM_SETRANGE32
,0),
1689 USM(UDM_GETRANGE32
,0),
1690 USM(UDM_SETPOS32
,0),
1691 USM(UDM_GETPOS32
,0),
1695 * $ for i in `grep EM_ include/richedit.h | cut -d' ' -f2 | cut -f1`; do echo -e " USM($i\t\t,0),"; done
1697 static const USER_MSG richedit_array
[] = {
1698 {"EM_SCROLLCARET", WM_USER
+49 ,0},
1699 USM(EM_CANPASTE
,0),
1700 USM(EM_DISPLAYBAND
,0),
1701 USM(EM_EXGETSEL
,0),
1702 USM(EM_EXLIMITTEXT
,0),
1703 USM(EM_EXLINEFROMCHAR
,0),
1704 USM(EM_EXSETSEL
,0),
1705 USM(EM_FINDTEXT
,0),
1706 USM(EM_FORMATRANGE
,0),
1707 USM(EM_GETCHARFORMAT
,0),
1708 USM(EM_GETEVENTMASK
,0),
1709 USM(EM_GETOLEINTERFACE
,0),
1710 USM(EM_GETPARAFORMAT
,0),
1711 USM(EM_GETSELTEXT
,0),
1712 USM(EM_HIDESELECTION
,0),
1713 USM(EM_PASTESPECIAL
,0),
1714 USM(EM_REQUESTRESIZE
,0),
1715 USM(EM_SELECTIONTYPE
,0),
1716 USM(EM_SETBKGNDCOLOR
,0),
1717 USM(EM_SETCHARFORMAT
,0),
1718 USM(EM_SETEVENTMASK
,0),
1719 USM(EM_SETOLECALLBACK
,0),
1720 USM(EM_SETPARAFORMAT
,0),
1721 USM(EM_SETTARGETDEVICE
,0),
1722 USM(EM_STREAMIN
,0),
1723 USM(EM_STREAMOUT
,0),
1724 USM(EM_GETTEXTRANGE
,0),
1725 USM(EM_FINDWORDBREAK
,0),
1726 USM(EM_SETOPTIONS
,0),
1727 USM(EM_GETOPTIONS
,0),
1728 USM(EM_FINDTEXTEX
,0),
1729 USM(EM_GETWORDBREAKPROCEX
,0),
1730 USM(EM_SETWORDBREAKPROCEX
,0),
1731 USM(EM_SETUNDOLIMIT
,0),
1734 USM(EM_GETUNDONAME
,0),
1735 USM(EM_GETREDONAME
,0),
1736 USM(EM_STOPGROUPTYPING
,0),
1737 USM(EM_SETTEXTMODE
,0),
1738 USM(EM_GETTEXTMODE
,0),
1739 USM(EM_AUTOURLDETECT
,0),
1740 USM(EM_GETAUTOURLDETECT
,0),
1741 USM(EM_SETPALETTE
,0),
1742 USM(EM_GETTEXTEX
,0),
1743 USM(EM_GETTEXTLENGTHEX
,0),
1744 USM(EM_SHOWSCROLLBAR
,0),
1745 USM(EM_SETTEXTEX
,0),
1746 USM(EM_SETPUNCTUATION
,0),
1747 USM(EM_GETPUNCTUATION
,0),
1748 USM(EM_SETWORDWRAPMODE
,0),
1749 USM(EM_GETWORDWRAPMODE
,0),
1750 USM(EM_SETIMECOLOR
,0),
1751 USM(EM_GETIMECOLOR
,0),
1752 USM(EM_SETIMEOPTIONS
,0),
1753 USM(EM_GETIMEOPTIONS
,0),
1754 USM(EM_CONVPOSITION
,0),
1755 USM(EM_SETLANGOPTIONS
,0),
1756 USM(EM_GETLANGOPTIONS
,0),
1757 USM(EM_GETIMECOMPMODE
,0),
1758 USM(EM_FINDTEXTW
,0),
1759 USM(EM_FINDTEXTEXW
,0),
1760 USM(EM_RECONVERSION
,0),
1761 USM(EM_SETIMEMODEBIAS
,0),
1762 USM(EM_GETIMEMODEBIAS
,0),
1763 USM(EM_SETBIDIOPTIONS
,0),
1764 USM(EM_GETBIDIOPTIONS
,0),
1765 USM(EM_SETTYPOGRAPHYOPTIONS
,0),
1766 USM(EM_GETTYPOGRAPHYOPTIONS
,0),
1767 USM(EM_SETEDITSTYLE
,0),
1768 USM(EM_GETEDITSTYLE
,0),
1770 USM(EM_GETSCROLLPOS
,0),
1771 USM(EM_SETSCROLLPOS
,0),
1772 USM(EM_SETFONTSIZE
,0),
1780 static const CONTROL_CLASS cc_array
[] = {
1781 {WC_COMBOBOXEXW
, comboex_array
, ARRAYSIZE(comboex_array
) },
1782 {WC_PROPSHEETW
, propsht_array
, ARRAYSIZE(propsht_array
) },
1783 {REBARCLASSNAMEW
, rebar_array
, ARRAYSIZE(rebar_array
) },
1784 {TOOLBARCLASSNAMEW
, toolbar_array
, ARRAYSIZE(toolbar_array
) },
1785 {TOOLTIPS_CLASSW
, tooltips_array
, ARRAYSIZE(tooltips_array
) },
1786 {UPDOWN_CLASSW
, updown_array
, ARRAYSIZE(updown_array
) },
1787 {RICHEDIT_CLASS20W
, richedit_array
, ARRAYSIZE(richedit_array
) },
1791 /************************************************************************/
1794 /* WM_NOTIFY function codes display */
1798 const char *name
; /* name of notify message */
1799 UINT value
; /* notify code value */
1800 UINT len
; /* length of extra space to dump */
1803 #define SPNFY(a,b) { #a ,a,sizeof(b)-sizeof(NMHDR)}
1805 /* Array MUST be in descending order by the 'value' field */
1806 /* (since value is UNSIGNED, 0xffffffff is largest and */
1807 /* 0xfffffffe is smaller). A binary search is used to */
1808 /* locate the correct 'value'. */
1809 static const SPY_NOTIFY spnfy_array
[] = {
1810 /* common 0U to 0U-99U */
1811 SPNFY(NM_OUTOFMEMORY
, NMHDR
),
1812 SPNFY(NM_CLICK
, NMHDR
),
1813 SPNFY(NM_DBLCLK
, NMHDR
),
1814 SPNFY(NM_RETURN
, NMHDR
),
1815 SPNFY(NM_RCLICK
, NMHDR
),
1816 SPNFY(NM_RDBLCLK
, NMHDR
),
1817 SPNFY(NM_SETFOCUS
, NMHDR
),
1818 SPNFY(NM_KILLFOCUS
, NMHDR
),
1819 SPNFY(NM_CUSTOMDRAW
, NMCUSTOMDRAW
),
1820 SPNFY(NM_HOVER
, NMHDR
),
1821 SPNFY(NM_NCHITTEST
, NMMOUSE
),
1822 SPNFY(NM_KEYDOWN
, NMKEY
),
1823 SPNFY(NM_RELEASEDCAPTURE
, NMHDR
),
1824 SPNFY(NM_SETCURSOR
, NMMOUSE
),
1825 SPNFY(NM_CHAR
, NMCHAR
),
1826 SPNFY(NM_TOOLTIPSCREATED
, NMTOOLTIPSCREATED
),
1827 /* Listview 0U-100U to 0U-199U */
1828 SPNFY(LVN_ITEMCHANGING
, NMLISTVIEW
),
1829 SPNFY(LVN_ITEMCHANGED
, NMLISTVIEW
),
1830 SPNFY(LVN_INSERTITEM
, NMLISTVIEW
),
1831 SPNFY(LVN_DELETEITEM
, NMLISTVIEW
),
1832 SPNFY(LVN_DELETEALLITEMS
, NMLISTVIEW
),
1833 SPNFY(LVN_BEGINLABELEDITA
, NMLVDISPINFOA
),
1834 SPNFY(LVN_ENDLABELEDITA
, NMLVDISPINFOA
),
1835 SPNFY(LVN_COLUMNCLICK
, NMLISTVIEW
),
1836 SPNFY(LVN_BEGINDRAG
, NMLISTVIEW
),
1837 SPNFY(LVN_BEGINRDRAG
, NMLISTVIEW
),
1838 SPNFY(LVN_ODCACHEHINT
, NMLVCACHEHINT
),
1839 SPNFY(LVN_ITEMACTIVATE
, NMITEMACTIVATE
),
1840 SPNFY(LVN_ODSTATECHANGED
, NMLVODSTATECHANGE
),
1841 SPNFY(LVN_HOTTRACK
, NMLISTVIEW
),
1842 SPNFY(LVN_GETDISPINFOA
, NMLVDISPINFOA
),
1843 SPNFY(LVN_SETDISPINFOA
, NMLVDISPINFOA
),
1844 SPNFY(LVN_ODFINDITEMA
, NMLVFINDITEMA
),
1845 SPNFY(LVN_KEYDOWN
, NMLVKEYDOWN
),
1846 SPNFY(LVN_MARQUEEBEGIN
, NMLISTVIEW
),
1847 SPNFY(LVN_GETINFOTIPA
, NMLVGETINFOTIPA
),
1848 SPNFY(LVN_GETINFOTIPW
, NMLVGETINFOTIPW
),
1849 SPNFY(LVN_BEGINLABELEDITW
, NMLVDISPINFOW
),
1850 SPNFY(LVN_ENDLABELEDITW
, NMLVDISPINFOW
),
1851 SPNFY(LVN_GETDISPINFOW
, NMLVDISPINFOW
),
1852 SPNFY(LVN_SETDISPINFOW
, NMLVDISPINFOW
),
1853 SPNFY(LVN_ODFINDITEMW
, NMLVFINDITEMW
),
1854 /* PropertySheet 0U-200U to 0U-299U */
1855 SPNFY(PSN_SETACTIVE
, PSHNOTIFY
),
1856 SPNFY(PSN_KILLACTIVE
, PSHNOTIFY
),
1857 SPNFY(PSN_APPLY
, PSHNOTIFY
),
1858 SPNFY(PSN_RESET
, PSHNOTIFY
),
1859 SPNFY(PSN_HELP
, PSHNOTIFY
),
1860 SPNFY(PSN_WIZBACK
, PSHNOTIFY
),
1861 SPNFY(PSN_WIZNEXT
, PSHNOTIFY
),
1862 SPNFY(PSN_WIZFINISH
, PSHNOTIFY
),
1863 SPNFY(PSN_QUERYCANCEL
, PSHNOTIFY
),
1864 SPNFY(PSN_GETOBJECT
, NMOBJECTNOTIFY
),
1865 SPNFY(PSN_TRANSLATEACCELERATOR
, PSHNOTIFY
),
1866 SPNFY(PSN_QUERYINITIALFOCUS
, PSHNOTIFY
),
1867 /* Header 0U-300U to 0U-399U */
1868 SPNFY(HDN_ITEMCHANGINGA
, NMHEADERA
),
1869 SPNFY(HDN_ITEMCHANGEDA
, NMHEADERA
),
1870 SPNFY(HDN_ITEMCLICKA
, NMHEADERA
),
1871 SPNFY(HDN_ITEMDBLCLICKA
, NMHEADERA
),
1872 SPNFY(HDN_DIVIDERDBLCLICKA
, NMHEADERA
),
1873 SPNFY(HDN_BEGINTRACKA
, NMHEADERA
),
1874 SPNFY(HDN_ENDTRACKA
, NMHEADERA
),
1875 SPNFY(HDN_TRACKA
, NMHEADERA
),
1876 SPNFY(HDN_GETDISPINFOA
, NMHEADERA
),
1877 SPNFY(HDN_BEGINDRAG
, NMHDR
),
1878 SPNFY(HDN_ENDDRAG
, NMHDR
),
1879 SPNFY(HDN_ITEMCHANGINGW
, NMHDR
),
1880 SPNFY(HDN_ITEMCHANGEDW
, NMHDR
),
1881 SPNFY(HDN_ITEMCLICKW
, NMHDR
),
1882 SPNFY(HDN_ITEMDBLCLICKW
, NMHDR
),
1883 SPNFY(HDN_DIVIDERDBLCLICKW
, NMHDR
),
1884 SPNFY(HDN_BEGINTRACKW
, NMHDR
),
1885 SPNFY(HDN_ENDTRACKW
, NMHDR
),
1886 SPNFY(HDN_TRACKW
, NMHDR
),
1887 SPNFY(HDN_GETDISPINFOW
, NMHDR
),
1888 /* Treeview 0U-400U to 0U-499U */
1889 SPNFY(TVN_SELCHANGINGA
, NMTREEVIEWA
),
1890 SPNFY(TVN_SELCHANGEDA
, NMTREEVIEWA
),
1891 SPNFY(TVN_GETDISPINFOA
, NMTVDISPINFOA
),
1892 SPNFY(TVN_SETDISPINFOA
, NMTVDISPINFOA
),
1893 SPNFY(TVN_ITEMEXPANDINGA
, NMTREEVIEWA
),
1894 SPNFY(TVN_ITEMEXPANDEDA
, NMTREEVIEWA
),
1895 SPNFY(TVN_BEGINDRAGA
, NMTREEVIEWA
),
1896 SPNFY(TVN_BEGINRDRAGA
, NMTREEVIEWA
),
1897 SPNFY(TVN_DELETEITEMA
, NMTREEVIEWA
),
1898 SPNFY(TVN_BEGINLABELEDITA
, NMTVDISPINFOA
),
1899 SPNFY(TVN_ENDLABELEDITA
, NMTVDISPINFOA
),
1900 SPNFY(TVN_KEYDOWN
, NMTVKEYDOWN
),
1901 SPNFY(TVN_SELCHANGINGW
, NMTREEVIEWW
),
1902 SPNFY(TVN_SELCHANGEDW
, NMTREEVIEWW
),
1903 SPNFY(TVN_GETDISPINFOW
, NMTVDISPINFOW
),
1904 SPNFY(TVN_SETDISPINFOW
, NMTVDISPINFOW
),
1905 SPNFY(TVN_ITEMEXPANDINGW
, NMTREEVIEWW
),
1906 SPNFY(TVN_ITEMEXPANDEDW
, NMTREEVIEWW
),
1907 SPNFY(TVN_BEGINDRAGW
, NMTREEVIEWW
),
1908 SPNFY(TVN_BEGINRDRAGW
, NMTREEVIEWW
),
1909 SPNFY(TVN_DELETEITEMW
, NMTREEVIEWW
),
1910 SPNFY(TVN_BEGINLABELEDITW
, NMTVDISPINFOW
),
1911 SPNFY(TVN_ENDLABELEDITW
, NMTVDISPINFOW
),
1912 /* Tooltips 0U-520U to 0U-549U */
1913 SPNFY(TTN_GETDISPINFOA
, NMHDR
),
1914 SPNFY(TTN_SHOW
, NMHDR
),
1915 SPNFY(TTN_POP
, NMHDR
),
1916 SPNFY(TTN_GETDISPINFOW
, NMHDR
),
1917 /* Tab 0U-550U to 0U-580U */
1918 SPNFY(TCN_KEYDOWN
, NMHDR
),
1919 SPNFY(TCN_SELCHANGE
, NMHDR
),
1920 SPNFY(TCN_SELCHANGING
, NMHDR
),
1921 SPNFY(TCN_GETOBJECT
, NMHDR
),
1922 /* Common Dialog 0U-601U to 0U-699U */
1923 SPNFY(CDN_INITDONE
, OFNOTIFYA
),
1924 SPNFY(CDN_SELCHANGE
, OFNOTIFYA
),
1925 SPNFY(CDN_FOLDERCHANGE
, OFNOTIFYA
),
1926 SPNFY(CDN_SHAREVIOLATION
, OFNOTIFYA
),
1927 SPNFY(CDN_HELP
, OFNOTIFYA
),
1928 SPNFY(CDN_FILEOK
, OFNOTIFYA
),
1929 SPNFY(CDN_TYPECHANGE
, OFNOTIFYA
),
1930 /* Toolbar 0U-700U to 0U-720U */
1931 SPNFY(TBN_GETBUTTONINFOA
, NMTOOLBARA
),
1932 SPNFY(TBN_BEGINDRAG
, NMTOOLBARA
),
1933 SPNFY(TBN_ENDDRAG
, NMTOOLBARA
),
1934 SPNFY(TBN_BEGINADJUST
, NMHDR
),
1935 SPNFY(TBN_ENDADJUST
, NMHDR
),
1936 SPNFY(TBN_RESET
, NMHDR
),
1937 SPNFY(TBN_QUERYINSERT
, NMTOOLBARA
),
1938 SPNFY(TBN_QUERYDELETE
, NMTOOLBARA
),
1939 SPNFY(TBN_TOOLBARCHANGE
, NMHDR
),
1940 SPNFY(TBN_CUSTHELP
, NMHDR
),
1941 SPNFY(TBN_DROPDOWN
, NMTOOLBARA
),
1942 SPNFY(TBN_GETOBJECT
, NMOBJECTNOTIFY
),
1943 SPNFY(TBN_HOTITEMCHANGE
, NMTBHOTITEM
),
1944 SPNFY(TBN_DRAGOUT
, NMTOOLBARA
),
1945 SPNFY(TBN_DELETINGBUTTON
, NMTOOLBARA
),
1946 SPNFY(TBN_GETDISPINFOA
, NMTBDISPINFOA
),
1947 SPNFY(TBN_GETDISPINFOW
, NMTBDISPINFOW
),
1948 SPNFY(TBN_GETINFOTIPA
, NMTBGETINFOTIPA
),
1949 SPNFY(TBN_GETINFOTIPW
, NMTBGETINFOTIPW
),
1950 SPNFY(TBN_GETBUTTONINFOW
, NMTOOLBARW
),
1951 /* Up/Down 0U-721U to 0U-740U */
1952 SPNFY(UDN_DELTAPOS
, NM_UPDOWN
),
1953 /* Month Calendar 0U-750U to 0U-759U */
1954 /* ******************* WARNING ***************************** */
1955 /* The following appear backwards but needs to be this way. */
1956 /* The reason is that MS (and us) define the MCNs as */
1958 /* instead of the way ALL other notifications are */
1960 /* The only place that this is important is in this list */
1962 /* Also since the same error was made with the DTN_ items, */
1963 /* they overlay the MCN_ and need to be inserted in the */
1964 /* other section of the table so that it is in order for */
1965 /* the binary search. */
1967 /* Thank you MS for your obvious quality control!! */
1968 /* ******************* WARNING ***************************** */
1969 /* Date/Time 0U-760U to 0U-799U */
1970 /* SPNFY(MCN_SELECT, NMHDR), */
1971 /* SPNFY(MCN_GETDAYSTATE, NMHDR), */
1972 /* SPNFY(MCN_SELCHANGE, NMHDR), */
1973 /* ******************* WARNING ***************************** */
1974 /* The following appear backwards but needs to be this way. */
1975 /* The reason is that MS (and us) define the MCNs as */
1977 /* instead of the way ALL other notifications are */
1979 /* The only place that this is important is in this list */
1980 /* ******************* WARNING ***************************** */
1981 SPNFY(DTN_FORMATQUERYW
, NMHDR
),
1982 SPNFY(DTN_FORMATW
, NMHDR
),
1983 SPNFY(DTN_WMKEYDOWNW
, NMHDR
),
1984 SPNFY(DTN_USERSTRINGW
, NMHDR
),
1985 SPNFY(MCN_SELECT
, NMHDR
),
1986 SPNFY(MCN_GETDAYSTATE
, NMHDR
),
1987 SPNFY(MCN_SELCHANGE
, NMHDR
),
1988 SPNFY(DTN_CLOSEUP
, NMHDR
),
1989 SPNFY(DTN_DROPDOWN
, NMHDR
),
1990 SPNFY(DTN_FORMATQUERYA
, NMHDR
),
1991 SPNFY(DTN_FORMATA
, NMHDR
),
1992 SPNFY(DTN_WMKEYDOWNA
, NMHDR
),
1993 SPNFY(DTN_USERSTRINGA
, NMHDR
),
1994 SPNFY(DTN_DATETIMECHANGE
, NMHDR
),
1995 /* ComboBoxEx 0U-800U to 0U-830U */
1996 SPNFY(CBEN_GETDISPINFOA
, NMCOMBOBOXEXA
),
1997 SPNFY(CBEN_INSERTITEM
, NMCOMBOBOXEXA
),
1998 SPNFY(CBEN_DELETEITEM
, NMCOMBOBOXEXA
),
1999 SPNFY(CBEN_BEGINEDIT
, NMHDR
),
2000 SPNFY(CBEN_ENDEDITA
, NMCBEENDEDITA
),
2001 SPNFY(CBEN_ENDEDITW
, NMCBEENDEDITW
),
2002 SPNFY(CBEN_GETDISPINFOW
, NMCOMBOBOXEXW
),
2003 SPNFY(CBEN_DRAGBEGINA
, NMCBEDRAGBEGINA
),
2004 SPNFY(CBEN_DRAGBEGINW
, NMCBEDRAGBEGINW
),
2005 /* Rebar 0U-831U to 0U-859U */
2006 SPNFY(RBN_HEIGHTCHANGE
, NMHDR
),
2007 SPNFY(RBN_GETOBJECT
, NMOBJECTNOTIFY
),
2008 SPNFY(RBN_LAYOUTCHANGED
, NMHDR
),
2009 SPNFY(RBN_AUTOSIZE
, NMRBAUTOSIZE
),
2010 SPNFY(RBN_BEGINDRAG
, NMREBAR
),
2011 SPNFY(RBN_ENDDRAG
, NMREBAR
),
2012 SPNFY(RBN_DELETINGBAND
, NMREBAR
),
2013 SPNFY(RBN_DELETEDBAND
, NMREBAR
),
2014 SPNFY(RBN_CHILDSIZE
, NMREBARCHILDSIZE
),
2015 /* IP address 0U-860U to 0U-879U */
2016 SPNFY(IPN_FIELDCHANGED
, NMHDR
),
2017 /* Status bar 0U-880U to 0U-899U */
2018 SPNFY(SBN_SIMPLEMODECHANGE
, NMHDR
),
2019 /* Pager 0U-900U to 0U-950U */
2020 SPNFY(PGN_SCROLL
, NMPGSCROLL
),
2021 SPNFY(PGN_CALCSIZE
, NMPGCALCSIZE
),
2025 static unsigned char *spy_exclude
;
2027 static inline BOOL
exclude_msg( UINT msg
)
2029 return spy_exclude
[ min( msg
, SPY_MAX_MSGNUM
) ];
2032 static inline BOOL
exclude_dwp(void)
2034 return spy_exclude
[SPY_MAX_MSGNUM
+ 1];
2040 UINT msgnum
; /* message number */
2041 HWND msg_hwnd
; /* window handle for message */
2042 WPARAM wParam
; /* message parameter */
2043 LPARAM lParam
; /* message parameter */
2044 INT data_len
; /* length of data to dump */
2045 char msg_name
[60]; /* message name (see SPY_GetMsgName) */
2046 WCHAR wnd_class
[60]; /* window class name (full) */
2047 WCHAR wnd_name
[16]; /* window name for message */
2050 static int indent_tls_index
= TLS_OUT_OF_INDEXES
;
2052 /***********************************************************************
2055 static inline INT_PTR
get_indent_level(void)
2057 return (INT_PTR
)TlsGetValue( indent_tls_index
);
2061 /***********************************************************************
2064 static inline void set_indent_level( INT_PTR level
)
2066 TlsSetValue( indent_tls_index
, (void *)level
);
2070 /***********************************************************************
2071 * SPY_GetMsgInternal
2073 static const char *SPY_GetMsgInternal( UINT msg
)
2075 if (msg
<= SPY_MAX_MSGNUM
)
2076 return MessageTypeNames
[msg
];
2078 if (msg
>= LVM_FIRST
&& msg
<= LVM_FIRST
+ SPY_MAX_LVMMSGNUM
)
2079 return LVMMessageTypeNames
[msg
-LVM_FIRST
];
2081 if (msg
>= TV_FIRST
&& msg
<= TV_FIRST
+ SPY_MAX_TVMSGNUM
)
2082 return TVMessageTypeNames
[msg
-TV_FIRST
];
2084 if (msg
>= HDM_FIRST
&& msg
<= HDM_FIRST
+ SPY_MAX_HDMMSGNUM
)
2085 return HDMMessageTypeNames
[msg
-HDM_FIRST
];
2087 if (msg
>= TCM_FIRST
&& msg
<= TCM_FIRST
+ SPY_MAX_TCMMSGNUM
)
2088 return TCMMessageTypeNames
[msg
-TCM_FIRST
];
2090 if (msg
>= PGM_FIRST
&& msg
<= PGM_FIRST
+ SPY_MAX_PGMMSGNUM
)
2091 return PGMMessageTypeNames
[msg
-PGM_FIRST
];
2093 if (msg
>= CCM_FIRST
&& msg
<= CCM_FIRST
+ SPY_MAX_CCMMSGNUM
)
2094 return CCMMessageTypeNames
[msg
-CCM_FIRST
];
2096 if (msg
>= WM_WINE_DESTROYWINDOW
&& msg
<= WM_WINE_DESTROYWINDOW
+ SPY_MAX_WINEMSGNUM
)
2097 return WINEMessageTypeNames
[msg
-WM_WINE_DESTROYWINDOW
];
2102 /***********************************************************************
2105 static const USER_MSG
*SPY_Bsearch_Msg( const USER_MSG
*msgs
, UINT count
, UINT code
)
2107 int low
= 0, high
= count
- 1;
2111 int idx
= (low
+ high
) / 2;
2112 if (msgs
[idx
].value
== code
) return msgs
+ idx
;
2113 if (msgs
[idx
].value
> code
)
2121 /***********************************************************************
2122 * SPY_GetClassLongOffsetName
2124 * Gets the name of a class long offset.
2126 const char *SPY_GetClassLongOffsetName( INT offset
)
2129 if (offset
< 0 && offset
% 2 == 0 && ((index
= -(offset
+ 8) / 2) <
2130 sizeof(ClassLongOffsetNames
) / sizeof(*ClassLongOffsetNames
)))
2132 return ClassLongOffsetNames
[index
];
2138 /***********************************************************************
2141 * Sets the value of "wnd_class" member of the instance structure.
2143 static void SPY_GetClassName( SPY_INSTANCE
*sp_e
)
2145 /* special code to detect a property sheet dialog */
2146 if ((GetClassLongW(sp_e
->msg_hwnd
, GCW_ATOM
) == WC_DIALOG
) &&
2147 (GetPropW(sp_e
->msg_hwnd
, PropSheetInfoStr
))) {
2148 strcpyW(sp_e
->wnd_class
, WC_PROPSHEETW
);
2151 GetClassNameW(sp_e
->msg_hwnd
, sp_e
->wnd_class
, sizeof(sp_e
->wnd_class
)/sizeof(WCHAR
));
2155 /***********************************************************************
2158 * Get message name and other information for dumping
2160 static void SPY_GetMsgStuff( SPY_INSTANCE
*sp_e
)
2163 const char *msg_name
= SPY_GetMsgInternal( sp_e
->msgnum
);
2170 if (sp_e
->msgnum
>= 0xc000)
2172 if (GlobalGetAtomNameA( sp_e
->msgnum
, sp_e
->msg_name
+1, sizeof(sp_e
->msg_name
)-2 ))
2174 sp_e
->msg_name
[0] = '\"';
2175 strcat( sp_e
->msg_name
, "\"" );
2179 if (!sp_e
->wnd_class
[0]) SPY_GetClassName(sp_e
);
2182 TRACE("looking class %s\n", debugstr_w(sp_e
->wnd_class
));
2185 while (cc_array
[i
].classname
&&
2186 strcmpiW(cc_array
[i
].classname
, sp_e
->wnd_class
) != 0) i
++;
2188 if (cc_array
[i
].classname
)
2191 TRACE("process class %s, first %p, last %p\n",
2192 debugstr_w(cc_array
[i
].classname
), cc_array
[i
].classmsg
,
2193 cc_array
[i
].lastmsg
);
2195 p
= SPY_Bsearch_Msg (cc_array
[i
].classmsg
, cc_array
[i
].count
, sp_e
->msgnum
);
2197 lstrcpynA (sp_e
->msg_name
, p
->name
, sizeof(sp_e
->msg_name
));
2198 sp_e
->data_len
= p
->len
;
2202 if (sp_e
->msgnum
>= WM_USER
&& sp_e
->msgnum
<= WM_APP
)
2203 sprintf( sp_e
->msg_name
, "WM_USER+%d", sp_e
->msgnum
- WM_USER
);
2205 sprintf( sp_e
->msg_name
, "%04x", sp_e
->msgnum
);
2209 lstrcpynA(sp_e
->msg_name
, msg_name
, sizeof(sp_e
->msg_name
));
2213 /***********************************************************************
2216 * Sets the value of "wnd_name" and "wnd_class" members of the
2217 * instance structure.
2220 static void SPY_GetWndName( SPY_INSTANCE
*sp_e
)
2224 SPY_GetClassName( sp_e
);
2226 len
= InternalGetWindowText(sp_e
->msg_hwnd
, sp_e
->wnd_name
, sizeof(sp_e
->wnd_name
)/sizeof(WCHAR
));
2227 if(!len
) /* get class name */
2229 LPWSTR dst
= sp_e
->wnd_name
;
2230 LPWSTR src
= sp_e
->wnd_class
;
2231 int n
= sizeof(sp_e
->wnd_name
)/sizeof(WCHAR
) - 3;
2233 while ((n
-- > 0) && *src
) *dst
++ = *src
++;
2239 /***********************************************************************
2242 * **** External function ****
2246 const char *SPY_GetMsgName( UINT msg
, HWND hWnd
)
2248 SPY_INSTANCE ext_sp_e
;
2249 DWORD save_error
= GetLastError();
2251 ext_sp_e
.msgnum
= msg
;
2252 ext_sp_e
.msg_hwnd
= hWnd
;
2253 ext_sp_e
.lParam
= 0;
2254 ext_sp_e
.wParam
= 0;
2255 ext_sp_e
.wnd_class
[0] = 0;
2256 SPY_GetMsgStuff(&ext_sp_e
);
2257 SetLastError( save_error
);
2258 return wine_dbg_sprintf("%s", ext_sp_e
.msg_name
);
2261 /***********************************************************************
2264 const char *SPY_GetVKeyName(WPARAM wParam
)
2266 const char *vk_key_name
;
2268 if(wParam
<= SPY_MAX_VKKEYSNUM
&& VK_KeyNames
[wParam
])
2269 vk_key_name
= VK_KeyNames
[wParam
];
2271 vk_key_name
= "VK_???";
2276 /***********************************************************************
2277 * SPY_Bsearch_Notify
2279 static const SPY_NOTIFY
*SPY_Bsearch_Notify( UINT code
)
2281 int low
= 0, high
= ARRAYSIZE(spnfy_array
) - 1;
2285 int idx
= (low
+ high
) / 2;
2286 if (spnfy_array
[idx
].value
== code
) return spnfy_array
+ idx
;
2287 if (spnfy_array
[idx
].value
< code
)
2295 /***********************************************************************
2298 static void SPY_DumpMem (LPCSTR header
, const UINT
*q
, INT len
)
2302 for(i
=0; i
<len
-12; i
+=16) {
2303 TRACE("%s [%04x] %08x %08x %08x %08x\n",
2304 header
, i
, *q
, *(q
+1), *(q
+2), *(q
+3));
2307 switch ((len
- i
+ 3) & (~3)) {
2309 TRACE("%s [%04x] %08x %08x %08x %08x\n",
2310 header
, i
, *q
, *(q
+1), *(q
+2), *(q
+3));
2313 TRACE("%s [%04x] %08x %08x %08x\n",
2314 header
, i
, *q
, *(q
+1), *(q
+2));
2317 TRACE("%s [%04x] %08x %08x\n",
2318 header
, i
, *q
, *(q
+1));
2321 TRACE("%s [%04x] %08x\n",
2329 /***********************************************************************
2332 static void SPY_DumpStructure(const SPY_INSTANCE
*sp_e
, BOOL enter
)
2334 switch (sp_e
->msgnum
)
2336 case LVM_INSERTITEMW
:
2342 LPLVITEMA item
= (LPLVITEMA
) sp_e
->lParam
;
2344 SPY_DumpMem ("LVITEM", (UINT
*)item
, sizeof(LVITEMA
));
2348 case TCM_INSERTITEMW
:
2349 case TCM_INSERTITEMA
:
2357 TCITEMA
*item
= (TCITEMA
*) sp_e
->lParam
;
2359 SPY_DumpMem ("TCITEM", (UINT
*)item
, sizeof(TCITEMA
));
2363 case TCM_ADJUSTRECT
:
2364 case LVM_GETITEMRECT
:
2365 case LVM_GETSUBITEMRECT
:
2367 LPRECT rc
= (LPRECT
) sp_e
->lParam
;
2369 TRACE("lParam rect (%s)\n", wine_dbgstr_rect(rc
));
2372 case LVM_SETITEMPOSITION32
:
2375 case LVM_GETITEMPOSITION
:
2378 LPPOINT point
= (LPPOINT
) sp_e
->lParam
;
2380 TRACE("lParam point x=%d, y=%d\n", point
->x
, point
->y
);
2385 if (!enter
&& (sp_e
->msgnum
== SBM_SETRANGE
)) break;
2386 TRACE("min=%d max=%d\n", (INT
)sp_e
->wParam
, (INT
)sp_e
->lParam
);
2389 if ((enter
&& (sp_e
->msgnum
== SBM_GETRANGE
)) ||
2390 (!enter
&& (sp_e
->msgnum
== SBM_SETRANGE
))) break;
2392 LPINT ptmin
= (LPINT
) sp_e
->wParam
;
2393 LPINT ptmax
= (LPINT
) sp_e
->lParam
;
2395 TRACE("min=%d max=%d\n", *ptmin
, *ptmax
);
2397 TRACE("min=%d max=n/a\n", *ptmin
);
2399 TRACE("min=n/a max=%d\n", *ptmax
);
2403 if (enter
&& sp_e
->lParam
)
2405 CHARRANGE
*cr
= (CHARRANGE
*) sp_e
->lParam
;
2406 TRACE("CHARRANGE: cpMin=%d cpMax=%d\n", cr
->cpMin
, cr
->cpMax
);
2409 case EM_SETCHARFORMAT
:
2410 if (enter
&& sp_e
->lParam
)
2412 CHARFORMATW
*cf
= (CHARFORMATW
*) sp_e
->lParam
;
2413 TRACE("CHARFORMAT: dwMask=0x%08x dwEffects=", cf
->dwMask
);
2414 if ((cf
->dwMask
& CFM_BOLD
) && (cf
->dwEffects
& CFE_BOLD
))
2416 if ((cf
->dwMask
& CFM_COLOR
) && (cf
->dwEffects
& CFE_AUTOCOLOR
))
2417 TRACE(" CFE_AUTOCOLOR");
2418 if ((cf
->dwMask
& CFM_ITALIC
) && (cf
->dwEffects
& CFE_ITALIC
))
2419 TRACE(" CFE_ITALIC");
2420 if ((cf
->dwMask
& CFM_PROTECTED
) && (cf
->dwEffects
& CFE_PROTECTED
))
2421 TRACE(" CFE_PROTECTED");
2422 if ((cf
->dwMask
& CFM_STRIKEOUT
) && (cf
->dwEffects
& CFE_STRIKEOUT
))
2423 TRACE(" CFE_STRIKEOUT");
2424 if ((cf
->dwMask
& CFM_UNDERLINE
) && (cf
->dwEffects
& CFE_UNDERLINE
))
2425 TRACE(" CFE_UNDERLINE");
2427 if (cf
->dwMask
& CFM_SIZE
)
2428 TRACE("yHeight=%d\n", cf
->yHeight
);
2429 if (cf
->dwMask
& CFM_OFFSET
)
2430 TRACE("yOffset=%d\n", cf
->yOffset
);
2431 if ((cf
->dwMask
& CFM_COLOR
) && !(cf
->dwEffects
& CFE_AUTOCOLOR
))
2432 TRACE("crTextColor=%x\n", cf
->crTextColor
);
2433 TRACE("bCharSet=%x bPitchAndFamily=%x\n", cf
->bCharSet
, cf
->bPitchAndFamily
);
2434 /* FIXME: we should try to be a bit more intelligent about
2435 * whether this is in ANSI or Unicode (it could be either) */
2436 if (cf
->dwMask
& CFM_FACE
)
2437 TRACE("szFaceName=%s\n", debugstr_wn(cf
->szFaceName
, LF_FACESIZE
));
2438 /* FIXME: handle CHARFORMAT2 too */
2444 DRAWITEMSTRUCT
*lpdis
= (DRAWITEMSTRUCT
*) sp_e
->lParam
;
2445 TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
2446 lpdis
->CtlType
, lpdis
->CtlID
);
2447 TRACE("itemID=0x%08x itemAction=0x%08x itemState=0x%08x\n",
2448 lpdis
->itemID
, lpdis
->itemAction
, lpdis
->itemState
);
2449 TRACE("hWnd=%p hDC=%p (%s) itemData=0x%08lx\n",
2450 lpdis
->hwndItem
, lpdis
->hDC
,
2451 wine_dbgstr_rect(&lpdis
->rcItem
), lpdis
->itemData
);
2454 case WM_MEASUREITEM
:
2456 MEASUREITEMSTRUCT
*lpmis
= (MEASUREITEMSTRUCT
*) sp_e
->lParam
;
2457 TRACE("MEASUREITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
2458 lpmis
->CtlType
, lpmis
->CtlID
);
2459 TRACE("itemID=0x%08x itemWidth=0x%08x itemHeight=0x%08x\n",
2460 lpmis
->itemID
, lpmis
->itemWidth
, lpmis
->itemHeight
);
2461 TRACE("itemData=0x%08lx\n", lpmis
->itemData
);
2472 unicode
= IsWindowUnicode(sp_e
->msg_hwnd
);
2473 cs
= (CREATESTRUCTA
*)sp_e
->lParam
;
2474 TRACE("%s %s ex=%08x style=%08x %d,%d %dx%d parent=%p menu=%p inst=%p params=%p\n",
2475 unicode
? debugstr_w((LPCWSTR
)cs
->lpszName
) : debugstr_a(cs
->lpszName
),
2476 unicode
? debugstr_w((LPCWSTR
)cs
->lpszClass
) : debugstr_a(cs
->lpszClass
),
2477 cs
->dwExStyle
, cs
->style
, cs
->x
, cs
->y
, cs
->cx
, cs
->cy
,
2478 cs
->hwndParent
, cs
->hMenu
, cs
->hInstance
, cs
->lpCreateParams
);
2483 TRACE("cx=%d cy=%d\n", LOWORD(sp_e
->lParam
), HIWORD(sp_e
->lParam
));
2485 case WM_WINDOWPOSCHANGED
:
2487 case WM_WINDOWPOSCHANGING
:
2489 WINDOWPOS
*lpwp
= (WINDOWPOS
*)sp_e
->lParam
;
2490 TRACE("WINDOWPOS hwnd=%p, after=%p, at (%d,%d) w=%d h=%d, flags=0x%08x\n",
2491 lpwp
->hwnd
, lpwp
->hwndInsertAfter
, lpwp
->x
, lpwp
->y
,
2492 lpwp
->cx
, lpwp
->cy
, lpwp
->flags
);
2495 case WM_STYLECHANGED
:
2497 case WM_STYLECHANGING
:
2499 LPSTYLESTRUCT ss
= (LPSTYLESTRUCT
) sp_e
->lParam
;
2500 TRACE("STYLESTRUCT: StyleOld=0x%08x, StyleNew=0x%08x\n",
2501 ss
->styleOld
, ss
->styleNew
);
2507 RECT
*rc
= (RECT
*)sp_e
->lParam
;
2508 TRACE("Rect %s\n", wine_dbgstr_rect(rc
));
2512 NCCALCSIZE_PARAMS
*nc
= (NCCALCSIZE_PARAMS
*)sp_e
->lParam
;
2513 TRACE("Rects %s %s %s\n", wine_dbgstr_rect(nc
->rgrc
),
2514 wine_dbgstr_rect(nc
->rgrc
+ 1), wine_dbgstr_rect(nc
->rgrc
+ 2));
2516 TRACE("WINDOWPOS hwnd=%p, after=%p, at (%d,%d) w=%d h=%d, flags=0x%08x\n",
2517 nc
->lppos
->hwnd
, nc
->lppos
->hwndInsertAfter
, nc
->lppos
->x
, nc
->lppos
->y
,
2518 nc
->lppos
->cx
, nc
->lppos
->cy
, nc
->lppos
->flags
);
2522 /* if (!enter) break; */
2524 NMHDR
* pnmh
= (NMHDR
*) sp_e
->lParam
;
2526 const SPY_NOTIFY
*p
;
2527 WCHAR from_class
[60];
2530 p
= SPY_Bsearch_Notify( pnmh
->code
);
2532 TRACE("NMHDR hwndFrom=%p idFrom=0x%08lx code=%s<0x%08x>, extra=0x%x\n",
2533 pnmh
->hwndFrom
, pnmh
->idFrom
, p
->name
, pnmh
->code
, p
->len
);
2536 /* for CUSTOMDRAW, dump all the data for TOOLBARs */
2537 if (pnmh
->code
== NM_CUSTOMDRAW
) {
2538 /* save and restore error code over the next call */
2539 save_error
= GetLastError();
2540 GetClassNameW(pnmh
->hwndFrom
, from_class
,
2541 sizeof(from_class
)/sizeof(WCHAR
));
2542 SetLastError(save_error
);
2543 if (strcmpW(TOOLBARCLASSNAMEW
, from_class
) == 0)
2544 dumplen
= sizeof(NMTBCUSTOMDRAW
)-sizeof(NMHDR
);
2545 } else if ( pnmh
->code
>= HDN_ENDDRAG
2546 && pnmh
->code
<= HDN_ITEMCHANGINGA
) {
2547 dumplen
= sizeof(NMHEADERA
)-sizeof(NMHDR
);
2550 q
= (UINT
*)(pnmh
+ 1);
2551 SPY_DumpMem ("NM extra", q
, (INT
)dumplen
);
2555 TRACE("NMHDR hwndFrom=%p idFrom=0x%08lx code=0x%08x\n",
2556 pnmh
->hwndFrom
, pnmh
->idFrom
, pnmh
->code
);
2560 if (sp_e
->data_len
> 0)
2561 SPY_DumpMem ("MSG lParam", (UINT
*)sp_e
->lParam
, sp_e
->data_len
);
2567 /***********************************************************************
2570 static BOOL
spy_init(void)
2577 if (!TRACE_ON(message
)) return FALSE
;
2579 if (indent_tls_index
== TLS_OUT_OF_INDEXES
)
2581 DWORD index
= TlsAlloc();
2582 if (InterlockedCompareExchange( &indent_tls_index
, index
, TLS_OUT_OF_INDEXES
) != TLS_OUT_OF_INDEXES
)
2586 if (spy_exclude
) return TRUE
;
2587 exclude
= HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY
, SPY_MAX_MSGNUM
+ 2 );
2589 /* @@ Wine registry key: HKCU\Software\Wine\Debug */
2590 if(!RegOpenKeyA(HKEY_CURRENT_USER
, "Software\\Wine\\Debug", &hkey
))
2592 DWORD type
, count
= sizeof(buffer
);
2595 if (!RegQueryValueExA(hkey
, "SpyInclude", 0, &type
, (LPBYTE
) buffer
, &count
) &&
2596 strcmp( buffer
, "INCLUDEALL" ))
2598 TRACE("Include=%s\n", buffer
);
2599 for (i
= 0; i
<= SPY_MAX_MSGNUM
; i
++)
2600 exclude
[i
] = (MessageTypeNames
[i
] && !strstr(buffer
,MessageTypeNames
[i
]));
2603 count
= sizeof(buffer
);
2605 if (!RegQueryValueExA(hkey
, "SpyExclude", 0, &type
, (LPBYTE
) buffer
, &count
))
2607 TRACE("Exclude=%s\n", buffer
);
2608 if (!strcmp( buffer
, "EXCLUDEALL" ))
2609 for (i
= 0; i
<= SPY_MAX_MSGNUM
; i
++) exclude
[i
] = TRUE
;
2611 for (i
= 0; i
<= SPY_MAX_MSGNUM
; i
++)
2612 exclude
[i
] = (MessageTypeNames
[i
] && strstr(buffer
,MessageTypeNames
[i
]));
2615 count
= sizeof(buffer
);
2616 if(!RegQueryValueExA(hkey
, "SpyExcludeDWP", 0, &type
, (LPBYTE
) buffer
, &count
))
2617 exclude
[SPY_MAX_MSGNUM
+ 1] = atoi(buffer
);
2622 if (InterlockedCompareExchangePointer( (void **)&spy_exclude
, exclude
, NULL
))
2623 HeapFree( GetProcessHeap(), 0, exclude
);
2629 /***********************************************************************
2632 void SPY_EnterMessage( INT iFlag
, HWND hWnd
, UINT msg
,
2633 WPARAM wParam
, LPARAM lParam
)
2637 DWORD save_error
= GetLastError();
2639 if (!spy_init() || exclude_msg(msg
)) return;
2642 sp_e
.msg_hwnd
= hWnd
;
2643 sp_e
.lParam
= lParam
;
2644 sp_e
.wParam
= wParam
;
2645 SPY_GetWndName(&sp_e
);
2646 SPY_GetMsgStuff(&sp_e
);
2647 indent
= get_indent_level();
2649 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
2652 case SPY_DISPATCHMESSAGE
:
2653 TRACE("%*s(%p) %-16s [%04x] %s dispatched wp=%08lx lp=%08lx\n",
2654 indent
, "", hWnd
, debugstr_w(sp_e
.wnd_name
), msg
,
2655 sp_e
.msg_name
, wParam
, lParam
);
2658 case SPY_SENDMESSAGE
:
2661 DWORD tid
= GetWindowThreadProcessId( hWnd
, NULL
);
2663 if (tid
== GetCurrentThreadId()) strcpy( taskName
, "self" );
2664 else sprintf( taskName
, "tid %04x", GetCurrentThreadId() );
2666 TRACE("%*s(%p) %-16s [%04x] %s sent from %s wp=%08lx lp=%08lx\n",
2667 indent
, "", hWnd
, debugstr_w(sp_e
.wnd_name
), msg
,
2668 sp_e
.msg_name
, taskName
, wParam
, lParam
);
2669 SPY_DumpStructure(&sp_e
, TRUE
);
2673 case SPY_DEFWNDPROC
:
2674 if (exclude_dwp()) return;
2675 TRACE("%*s(%p) DefWindowProc:[%04x] %s wp=%08lx lp=%08lx\n",
2676 indent
, "", hWnd
, msg
, sp_e
.msg_name
, wParam
, lParam
);
2679 set_indent_level( indent
+ SPY_INDENT_UNIT
);
2680 SetLastError( save_error
);
2684 /***********************************************************************
2687 void SPY_ExitMessage( INT iFlag
, HWND hWnd
, UINT msg
, LRESULT lReturn
,
2688 WPARAM wParam
, LPARAM lParam
)
2692 DWORD save_error
= GetLastError();
2694 if (!TRACE_ON(message
) || exclude_msg(msg
) ||
2695 (exclude_dwp() && iFlag
== SPY_RESULT_DEFWND
))
2699 sp_e
.msg_hwnd
= hWnd
;
2700 sp_e
.lParam
= lParam
;
2701 sp_e
.wParam
= wParam
;
2702 SPY_GetWndName(&sp_e
);
2703 SPY_GetMsgStuff(&sp_e
);
2705 if ((indent
= get_indent_level()))
2707 indent
-= SPY_INDENT_UNIT
;
2708 set_indent_level( indent
);
2713 case SPY_RESULT_DEFWND
:
2714 TRACE(" %*s(%p) DefWindowProc: [%04x] %s returned %08lx\n",
2715 indent
, "", hWnd
, msg
, sp_e
.msg_name
, lReturn
);
2719 TRACE(" %*s(%p) %-16s [%04x] %s returned %08lx\n",
2720 indent
, "", hWnd
, debugstr_w(sp_e
.wnd_name
), msg
,
2721 sp_e
.msg_name
, lReturn
);
2722 SPY_DumpStructure(&sp_e
, FALSE
);
2725 SetLastError( save_error
);