Don't check the checksum of the original echo request packet in the
[wine/dcerpc.git] / windows / spy.c
blobdc70c03e66d243cffd914480fe4b33b1828dcba9
1 /*
2 * Message spying routines
4 * Copyright 1994, Bob Amstadt
5 * 1995, Alex Korobka
6 */
8 #include <stdlib.h>
9 #include <string.h>
10 #include <stdio.h>
11 #include "windef.h"
12 #include "wingdi.h"
13 #include "winreg.h"
14 #include "wine/winuser16.h"
15 #include "wine/winbase16.h"
16 #include "wine/unicode.h"
17 #include "win.h"
18 #include "debugtools.h"
19 #include "spy.h"
20 #include "commctrl.h"
22 DEFAULT_DEBUG_CHANNEL(message);
24 #define SPY_MAX_MSGNUM WM_USER
25 #define SPY_INDENT_UNIT 4 /* 4 spaces */
27 static const char * const MessageTypeNames[SPY_MAX_MSGNUM + 1] =
29 "WM_NULL", /* 0x00 */
30 "WM_CREATE",
31 "WM_DESTROY",
32 "WM_MOVE",
33 "wm_sizewait",
34 "WM_SIZE",
35 "WM_ACTIVATE",
36 "WM_SETFOCUS",
37 "WM_KILLFOCUS",
38 "WM_SETVISIBLE",
39 "WM_ENABLE",
40 "WM_SETREDRAW",
41 "WM_SETTEXT",
42 "WM_GETTEXT",
43 "WM_GETTEXTLENGTH",
44 "WM_PAINT",
45 "WM_CLOSE", /* 0x10 */
46 "WM_QUERYENDSESSION",
47 "WM_QUIT",
48 "WM_QUERYOPEN",
49 "WM_ERASEBKGND",
50 "WM_SYSCOLORCHANGE",
51 "WM_ENDSESSION",
52 "wm_systemerror",
53 "WM_SHOWWINDOW",
54 "WM_CTLCOLOR",
55 "WM_WININICHANGE",
56 "WM_DEVMODECHANGE",
57 "WM_ACTIVATEAPP",
58 "WM_FONTCHANGE",
59 "WM_TIMECHANGE",
60 "WM_CANCELMODE",
61 "WM_SETCURSOR", /* 0x20 */
62 "WM_MOUSEACTIVATE",
63 "WM_CHILDACTIVATE",
64 "WM_QUEUESYNC",
65 "WM_GETMINMAXINFO",
66 "wm_unused3",
67 "wm_painticon",
68 "WM_ICONERASEBKGND",
69 "WM_NEXTDLGCTL",
70 "wm_alttabactive",
71 "WM_SPOOLERSTATUS",
72 "WM_DRAWITEM",
73 "WM_MEASUREITEM",
74 "WM_DELETEITEM",
75 "WM_VKEYTOITEM",
76 "WM_CHARTOITEM",
77 "WM_SETFONT", /* 0x30 */
78 "WM_GETFONT",
79 "WM_SETHOTKEY",
80 "WM_GETHOTKEY",
81 "wm_filesyschange",
82 "wm_isactiveicon",
83 "wm_queryparkicon",
84 "WM_QUERYDRAGICON",
85 "wm_querysavestate",
86 "WM_COMPAREITEM",
87 "wm_testing",
88 NULL,
89 "wm_otherwindowcreated",
90 "wm_otherwindowdestroyed",
91 "wm_activateshellwindow",
92 NULL,
94 NULL, /* 0x40 */
95 "wm_compacting", NULL, NULL,
96 "WM_COMMNOTIFY", NULL,
97 "WM_WINDOWPOSCHANGING", /* 0x0046 */
98 "WM_WINDOWPOSCHANGED", /* 0x0047 */
99 "WM_POWER", NULL,
100 "WM_COPYDATA",
101 "WM_CANCELJOURNAL", NULL, NULL,
102 "WM_NOTIFY", NULL,
104 /* 0x0050 */
105 "WM_INPUTLANGCHANGEREQUEST",
106 "WM_INPUTLANGCHANGE",
107 "WM_TCARD",
108 "WM_HELP",
109 "WM_USERCHANGED",
110 "WM_NOTIFYFORMAT", NULL, NULL,
111 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
113 /* 0x0060 */
114 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
115 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
117 /* 0x0070 */
118 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
119 NULL, NULL, NULL,
120 "WM_CONTEXTMENU",
121 "WM_STYLECHANGING",
122 "WM_STYLECHANGED",
123 "WM_DISPLAYCHANGE",
124 "WM_GETICON",
126 "WM_SETICON", /* 0x0080 */
127 "WM_NCCREATE", /* 0x0081 */
128 "WM_NCDESTROY", /* 0x0082 */
129 "WM_NCCALCSIZE", /* 0x0083 */
130 "WM_NCHITTEST", /* 0x0084 */
131 "WM_NCPAINT", /* 0x0085 */
132 "WM_NCACTIVATE", /* 0x0086 */
133 "WM_GETDLGCODE", /* 0x0087 */
134 "WM_SYNCPAINT",
135 "WM_SYNCTASK", NULL, NULL, NULL, NULL, NULL, NULL,
137 /* 0x0090 */
138 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
139 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
141 /* 0x00A0 */
142 "WM_NCMOUSEMOVE", /* 0x00A0 */
143 "WM_NCLBUTTONDOWN", /* 0x00A1 */
144 "WM_NCLBUTTONUP", /* 0x00A2 */
145 "WM_NCLBUTTONDBLCLK", /* 0x00A3 */
146 "WM_NCRBUTTONDOWN", /* 0x00A4 */
147 "WM_NCRBUTTONUP", /* 0x00A5 */
148 "WM_NCRBUTTONDBLCLK", /* 0x00A6 */
149 "WM_NCMBUTTONDOWN", /* 0x00A7 */
150 "WM_NCMBUTTONUP", /* 0x00A8 */
151 "WM_NCMBUTTONDBLCLK", /* 0x00A9 */
152 NULL, NULL, NULL, NULL, NULL, NULL,
154 /* 0x00B0 - Win32 Edit controls */
155 "EM_GETSEL", /* 0x00b0 */
156 "EM_SETSEL", /* 0x00b1 */
157 "EM_GETRECT", /* 0x00b2 */
158 "EM_SETRECT", /* 0x00b3 */
159 "EM_SETRECTNP", /* 0x00b4 */
160 "EM_SCROLL", /* 0x00b5 */
161 "EM_LINESCROLL", /* 0x00b6 */
162 "EM_SCROLLCARET", /* 0x00b7 */
163 "EM_GETMODIFY", /* 0x00b8 */
164 "EM_SETMODIFY", /* 0x00b9 */
165 "EM_GETLINECOUNT", /* 0x00ba */
166 "EM_LINEINDEX", /* 0x00bb */
167 "EM_SETHANDLE", /* 0x00bc */
168 "EM_GETHANDLE", /* 0x00bd */
169 "EM_GETTHUMB", /* 0x00be */
170 NULL, /* 0x00bf */
172 NULL, /* 0x00c0 */
173 "EM_LINELENGTH", /* 0x00c1 */
174 "EM_REPLACESEL", /* 0x00c2 */
175 NULL, /* 0x00c3 */
176 "EM_GETLINE", /* 0x00c4 */
177 "EM_LIMITTEXT", /* 0x00c5 */
178 "EM_CANUNDO", /* 0x00c6 */
179 "EM_UNDO", /* 0x00c7 */
180 "EM_FMTLINES", /* 0x00c8 */
181 "EM_LINEFROMCHAR", /* 0x00c9 */
182 NULL, /* 0x00ca */
183 "EM_SETTABSTOPS", /* 0x00cb */
184 "EM_SETPASSWORDCHAR", /* 0x00cc */
185 "EM_EMPTYUNDOBUFFER", /* 0x00cd */
186 "EM_GETFIRSTVISIBLELINE", /* 0x00ce */
187 "EM_SETREADONLY", /* 0x00cf */
189 "EM_SETWORDBREAKPROC", /* 0x00d0 */
190 "EM_GETWORDBREAKPROC", /* 0x00d1 */
191 "EM_GETPASSWORDCHAR", /* 0x00d2 */
192 "EM_SETMARGINS", /* 0x00d3 */
193 "EM_GETMARGINS", /* 0x00d4 */
194 "EM_GETLIMITTEXT", /* 0x00d5 */
195 "EM_POSFROMCHAR", /* 0x00d6 */
196 "EM_CHARFROMPOS", /* 0x00d7 */
197 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
199 /* 0x00E0 - Win32 Scrollbars */
200 "SBM_SETPOS", /* 0x00e0 */
201 "SBM_GETPOS", /* 0x00e1 */
202 "SBM_SETRANGE", /* 0x00e2 */
203 "SBM_GETRANGE", /* 0x00e3 */
204 "SBM_ENABLE_ARROWS", /* 0x00e4 */
205 NULL,
206 "SBM_SETRANGEREDRAW", /* 0x00e6 */
207 NULL, NULL,
208 "SBM_SETSCROLLINFO", /* 0x00e9 */
209 "SBM_GETSCROLLINFO", /* 0x00ea */
210 NULL, NULL, NULL, NULL, NULL,
212 /* 0x00F0 - Win32 Buttons */
213 "BM_GETCHECK", /* 0x00f0 */
214 "BM_SETCHECK", /* 0x00f1 */
215 "BM_GETSTATE", /* 0x00f2 */
216 "BM_SETSTATE", /* 0x00f3 */
217 "BM_SETSTYLE", /* 0x00f4 */
218 "BM_CLICK", /* 0x00f5 */
219 "BM_GETIMAGE", /* 0x00f6 */
220 "BM_SETIMAGE", /* 0x00f7 */
221 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
223 "WM_KEYDOWN", /* 0x0100 */
224 "WM_KEYUP", /* 0x0101 */
225 "WM_CHAR", /* 0x0102 */
226 "WM_DEADCHAR", /* 0x0103 */
227 "WM_SYSKEYDOWN", /* 0x0104 */
228 "WM_SYSKEYUP", /* 0x0105 */
229 "WM_SYSCHAR", /* 0x0106 */
230 "WM_SYSDEADCHAR", /* 0x0107 */
231 "WM_KEYLAST", /* 0x0108 */
232 NULL,
233 "WM_CONVERTREQUEST",
234 "WM_CONVERTRESULT",
235 "WM_INTERIM",
236 "WM_IME_STARTCOMPOSITION", /* 0x010d */
237 "WM_IME_ENDCOMPOSITION", /* 0x010e */
238 "WM_IME_COMPOSITION", /* 0x010f */
240 "WM_INITDIALOG", /* 0x0110 */
241 "WM_COMMAND", /* 0x0111 */
242 "WM_SYSCOMMAND", /* 0x0112 */
243 "WM_TIMER", /* 0x0113 */
244 "WM_HSCROLL", /* 0x0114 */
245 "WM_VSCROLL", /* 0x0115 */
246 "WM_INITMENU", /* 0x0116 */
247 "WM_INITMENUPOPUP", /* 0x0117 */
248 "WM_SYSTIMER", /* 0x0118 */
249 NULL, NULL, NULL, NULL, NULL, NULL,
250 "WM_MENUSELECT", /* 0x011f */
252 "WM_MENUCHAR", /* 0x0120 */
253 "WM_ENTERIDLE", /* 0x0121 */
255 "WM_MENURBUTTONUP", /* 0x0122 */
256 "WM_MENUDRAG", /* 0x0123 */
257 "WM_MENUGETOBJECT", /* 0x0124 */
258 "WM_UNINITMENUPOPUP", /* 0x0125 */
259 "WM_MENUCOMMAND", /* 0x0126 */
260 "WM_CHANGEUISTATE", /* 0x0127 */
261 "WM_UPDATEUISTATE", /* 0x0128 */
262 "WM_QUERYUISTATE", /* 0x0129 */
264 NULL, NULL, NULL, NULL, NULL, NULL,
266 /* 0x0130 */
267 NULL,
268 "WM_LBTRACKPOINT", /* 0x0131 */
269 "WM_CTLCOLORMSGBOX", /* 0x0132 */
270 "WM_CTLCOLOREDIT", /* 0x0133 */
271 "WM_CTLCOLORLISTBOX", /* 0x0134 */
272 "WM_CTLCOLORBTN", /* 0x0135 */
273 "WM_CTLCOLORDLG", /* 0x0136 */
274 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
275 "WM_CTLCOLORSTATIC", /* 0x0138 */
276 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
278 /* 0x0140 - Win32 Comboboxes */
279 "CB_GETEDITSEL", /* 0x0140 */
280 "CB_LIMITTEXT", /* 0x0141 */
281 "CB_SETEDITSEL", /* 0x0142 */
282 "CB_ADDSTRING", /* 0x0143 */
283 "CB_DELETESTRING", /* 0x0144 */
284 "CB_DIR", /* 0x0145 */
285 "CB_GETCOUNT", /* 0x0146 */
286 "CB_GETCURSEL", /* 0x0147 */
287 "CB_GETLBTEXT", /* 0x0148 */
288 "CB_GETLBTEXTLEN", /* 0x0149 */
289 "CB_INSERTSTRING", /* 0x014a */
290 "CB_RESETCONTENT", /* 0x014b */
291 "CB_FINDSTRING", /* 0x014c */
292 "CB_SELECTSTRING", /* 0x014d */
293 "CB_SETCURSEL", /* 0x014e */
294 "CB_SHOWDROPDOWN", /* 0x014f */
296 "CB_GETITEMDATA", /* 0x0150 */
297 "CB_SETITEMDATA", /* 0x0151 */
298 "CB_GETDROPPEDCONTROLRECT", /* 0x0152 */
299 "CB_SETITEMHEIGHT", /* 0x0153 */
300 "CB_GETITEMHEIGHT", /* 0x0154 */
301 "CB_SETEXTENDEDUI", /* 0x0155 */
302 "CB_GETEXTENDEDUI", /* 0x0156 */
303 "CB_GETDROPPEDSTATE", /* 0x0157 */
304 "CB_FINDSTRINGEXACT", /* 0x0158 */
305 "CB_SETLOCALE", /* 0x0159 */
306 "CB_GETLOCALE", /* 0x015a */
307 "CB_GETTOPINDEX", /* 0x015b */
308 "CB_SETTOPINDEX", /* 0x015c */
309 "CB_GETHORIZONTALEXTENT", /* 0x015d */
310 "CB_SETHORIZONTALEXTENT", /* 0x015e */
311 "CB_GETDROPPEDWIDTH", /* 0x015f */
313 "CB_SETDROPPEDWIDTH", /* 0x0160 */
314 "CB_INITSTORAGE", /* 0x0161 */
315 NULL, NULL, NULL, NULL, NULL, NULL,
316 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
318 /* 0x0170 - Win32 Static controls */
319 "STM_SETICON", /* 0x0170 */
320 "STM_GETICON", /* 0x0171 */
321 "STM_SETIMAGE", /* 0x0172 */
322 "STM_GETIMAGE", /* 0x0173 */
323 NULL, NULL, NULL, NULL,
324 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
326 /* 0x0180 - Win32 Listboxes */
327 "LB_ADDSTRING", /* 0x0180 */
328 "LB_INSERTSTRING", /* 0x0181 */
329 "LB_DELETESTRING", /* 0x0182 */
330 "LB_SELITEMRANGEEX", /* 0x0183 */
331 "LB_RESETCONTENT", /* 0x0184 */
332 "LB_SETSEL", /* 0x0185 */
333 "LB_SETCURSEL", /* 0x0186 */
334 "LB_GETSEL", /* 0x0187 */
335 "LB_GETCURSEL", /* 0x0188 */
336 "LB_GETTEXT", /* 0x0189 */
337 "LB_GETTEXTLEN", /* 0x018a */
338 "LB_GETCOUNT", /* 0x018b */
339 "LB_SELECTSTRING", /* 0x018c */
340 "LB_DIR", /* 0x018d */
341 "LB_GETTOPINDEX", /* 0x018e */
342 "LB_FINDSTRING", /* 0x018f */
344 "LB_GETSELCOUNT", /* 0x0190 */
345 "LB_GETSELITEMS", /* 0x0191 */
346 "LB_SETTABSTOPS", /* 0x0192 */
347 "LB_GETHORIZONTALEXTENT", /* 0x0193 */
348 "LB_SETHORIZONTALEXTENT", /* 0x0194 */
349 "LB_SETCOLUMNWIDTH", /* 0x0195 */
350 "LB_ADDFILE", /* 0x0196 */
351 "LB_SETTOPINDEX", /* 0x0197 */
352 "LB_GETITEMRECT", /* 0x0198 */
353 "LB_GETITEMDATA", /* 0x0199 */
354 "LB_SETITEMDATA", /* 0x019a */
355 "LB_SELITEMRANGE", /* 0x019b */
356 "LB_SETANCHORINDEX", /* 0x019c */
357 "LB_GETANCHORINDEX", /* 0x019d */
358 "LB_SETCARETINDEX", /* 0x019e */
359 "LB_GETCARETINDEX", /* 0x019f */
361 "LB_SETITEMHEIGHT", /* 0x01a0 */
362 "LB_GETITEMHEIGHT", /* 0x01a1 */
363 "LB_FINDSTRINGEXACT", /* 0x01a2 */
364 "LB_CARETON", /* 0x01a3 */
365 "LB_CARETOFF", /* 0x01a4 */
366 "LB_SETLOCALE", /* 0x01a5 */
367 "LB_GETLOCALE", /* 0x01a6 */
368 "LB_SETCOUNT", /* 0x01a7 */
369 "LB_INITSTORAGE", /* 0x01a8 */
370 "LB_ITEMFROMPOINT", /* 0x01a9 */
371 NULL, NULL, NULL, NULL, NULL, NULL,
373 /* 0x01B0 */
374 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
375 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
377 /* 0x01C0 */
378 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
379 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
381 /* 0x01D0 */
382 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
383 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
385 /* 0x01E0 */
386 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
387 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
389 /* 0x01F0 */
390 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
391 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
393 "WM_MOUSEMOVE", /* 0x0200 */
394 "WM_LBUTTONDOWN", /* 0x0201 */
395 "WM_LBUTTONUP", /* 0x0202 */
396 "WM_LBUTTONDBLCLK", /* 0x0203 */
397 "WM_RBUTTONDOWN", /* 0x0204 */
398 "WM_RBUTTONUP", /* 0x0205 */
399 "WM_RBUTTONDBLCLK", /* 0x0206 */
400 "WM_MBUTTONDOWN", /* 0x0207 */
401 "WM_MBUTTONUP", /* 0x0208 */
402 "WM_MBUTTONDBLCLK", /* 0x0209 */
403 "WM_MOUSEWHEEL", /* 0x020A */
404 NULL, NULL, NULL, NULL, NULL,
406 "WM_PARENTNOTIFY", /* 0x0210 */
407 "WM_ENTERMENULOOP", /* 0x0211 */
408 "WM_EXITMENULOOP", /* 0x0212 */
409 "WM_NEXTMENU", /* 0x0213 */
410 "WM_SIZING",
411 "WM_CAPTURECHANGED",
412 "WM_MOVING", NULL,
413 "WM_POWERBROADCAST",
414 "WM_DEVICECHANGE", NULL, NULL, NULL, NULL, NULL, NULL,
416 "WM_MDICREATE", /* 0x0220 */
417 "WM_MDIDESTROY", /* 0x0221 */
418 "WM_MDIACTIVATE", /* 0x0222 */
419 "WM_MDIRESTORE", /* 0x0223 */
420 "WM_MDINEXT", /* 0x0224 */
421 "WM_MDIMAXIMIZE", /* 0x0225 */
422 "WM_MDITILE", /* 0x0226 */
423 "WM_MDICASCADE", /* 0x0227 */
424 "WM_MDIICONARRANGE", /* 0x0228 */
425 "WM_MDIGETACTIVE", /* 0x0229 */
427 "WM_DROPOBJECT",
428 "WM_QUERYDROPOBJECT",
429 "WM_BEGINDRAG",
430 "WM_DRAGLOOP",
431 "WM_DRAGSELECT",
432 "WM_DRAGMOVE",
434 /* 0x0230*/
435 "WM_MDISETMENU", /* 0x0230 */
436 "WM_ENTERSIZEMOVE", /* 0x0231 */
437 "WM_EXITSIZEMOVE", /* 0x0232 */
438 "WM_DROPFILES", /* 0x0233 */
439 "WM_MDIREFRESHMENU", NULL, NULL, NULL,
440 /* 0x0238*/
441 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
443 /* 0x0240 */
444 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
445 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
447 /* 0x0250 */
448 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
449 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
451 /* 0x0260 */
452 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
453 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
454 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
455 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
457 /* 0x0280 */
458 NULL, "WM_IME_SETCONTEXT", "WM_IME_NOTIFY", "WM_IME_CONTROL", "WM_IME_COMPOSITIONFULL", "WM_IME_SELECT", "WM_IME_CHAR", NULL,
459 "WM_IME_REQUEST", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
460 "WM_IME_KEYDOWN", "WM_IME_KEYUP", NULL, NULL, NULL, NULL, NULL, NULL,
461 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
463 /* 0x02a0 */
464 NULL, "WM_MOUSEHOVER", NULL, "WM_MOUSELEAVE", NULL, NULL, NULL, NULL,
465 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
466 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
467 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
469 /* 0x02c0 */
470 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
471 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
472 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
473 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
475 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
476 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
477 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
478 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
480 "WM_CUT", /* 0x0300 */
481 "WM_COPY",
482 "WM_PASTE",
483 "WM_CLEAR",
484 "WM_UNDO",
485 "WM_RENDERFORMAT",
486 "WM_RENDERALLFORMATS",
487 "WM_DESTROYCLIPBOARD",
488 "WM_DRAWCLIPBOARD",
489 "WM_PAINTCLIPBOARD",
490 "WM_VSCROLLCLIPBOARD",
491 "WM_SIZECLIPBOARD",
492 "WM_ASKCBFORMATNAME",
493 "WM_CHANGECBCHAIN",
494 "WM_HSCROLLCLIPBOARD",
495 "WM_QUERYNEWPALETTE", /* 0x030f*/
497 "WM_PALETTEISCHANGING",
498 "WM_PALETTECHANGED",
499 "WM_HOTKEY", /* 0x0312 */
500 NULL, NULL, NULL, NULL,
501 "WM_PRINT",
502 "WM_PRINTCLIENT",
503 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 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
508 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
510 /* 0x0340 */
511 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
512 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
513 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
514 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
516 "WM_QUERYAFXWNDPROC", /* 0x0360 */
517 "WM_SIZEPARENT", /* 0x0361 */
518 "WM_SETMESSAGESTRING", /* 0x0362 */
519 "WM_IDLEUPDATECMDUI", /* 0x0363 */
520 "WM_INITIALUPDATE", /* 0x0364 */
521 "WM_COMMANDHELP", /* 0x0365 */
522 "WM_HELPHITTEST", /* 0x0366 */
523 "WM_EXITHELPMODE", /* 0x0367 */
524 "WM_RECALCPARENT", /* 0x0368 */
525 "WM_SIZECHILD", /* 0x0369 */
526 "WM_KICKIDLE", /* 0x036A */
527 "WM_QUERYCENTERWND", /* 0x036B */
528 "WM_DISABLEMODAL", /* 0x036C */
529 "WM_FLOATSTATUS", /* 0x036D */
530 "WM_ACTIVATETOPLEVEL", /* 0x036E */
531 "WM_QUERY3DCONTROLS", /* 0x036F */
532 NULL,NULL,NULL,
533 "WM_SOCKET_NOTIFY", /* 0x0373 */
534 "WM_SOCKET_DEAD", /* 0x0374 */
535 "WM_POPMESSAGESTRING", /* 0x0375 */
536 "WM_OCC_LOADFROMSTREAM", /* 0x0376 */
537 "WM_OCC_LOADFROMSTORAGE", /* 0x0377 */
538 "WM_OCC_INITNEW", /* 0x0378 */
539 "WM_QUEUE_SENTINEL", /* 0x0379 */
540 "WM_OCC_LOADFROMSTREAM_EX", /* 0x037A */
541 "WM_OCC_LOADFROMSTORAGE_EX", /* 0x037B */
543 NULL,NULL,NULL,NULL,
545 "WM_PENWINFIRST", /* 0x0380 */
546 "WM_RCRESULT", /* 0x0381 */
547 "WM_HOOKRCRESULT", /* 0x0382 */
548 "WM_GLOBALRCCHANGE", /* 0x0383 */
549 "WM_SKB", /* 0x0384 */
550 "WM_HEDITCTL", /* 0x0385 */
551 NULL, NULL,
552 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
553 "WM_PENWINLAST", /* 0x038F */
555 "WM_COALESCE_FIRST", /* 0x0390 */
556 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
557 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
558 "WM_COALESCE_LAST", /* 0x039F */
560 /* 0x03a0 */
561 "MM_JOY1MOVE",
562 "MM_JOY2MOVE",
563 "MM_JOY1ZMOVE",
564 "MM_JOY2ZMOVE",
565 NULL, NULL, NULL, NULL,
566 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
568 /* 0x03b0 */
569 NULL, NULL, NULL, NULL, NULL,
570 "MM_JOY1BUTTONDOWN",
571 "MM_JOY2BUTTONDOWN",
572 "MM_JOY1BUTTONUP",
573 "MM_JOY2BUTTONUP",
574 "MM_MCINOTIFY",
575 NULL,
576 "MM_WOM_OPEN",
577 "MM_WOM_CLOSE",
578 "MM_WOM_DONE",
579 "MM_WIM_OPEN",
580 "MM_WIM_CLOSE",
582 /* 0x03c0 */
583 "MM_WIM_DATA",
584 "MM_MIM_OPEN",
585 "MM_MIM_CLOSE",
586 "MM_MIM_DATA",
587 "MM_MIM_LONGDATA",
588 "MM_MIM_ERROR",
589 "MM_MIM_LONGERROR",
590 "MM_MOM_OPEN",
591 "MM_MOM_CLOSE",
592 "MM_MOM_DONE",
593 NULL, NULL, NULL, NULL, NULL, NULL,
594 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
595 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
597 /* 0x03e0 */
598 "WM_DDE_INITIATE", /* 0x3E0 */
599 "WM_DDE_TERMINATE", /* 0x3E1 */
600 "WM_DDE_ADVISE", /* 0x3E2 */
601 "WM_DDE_UNADVISE", /* 0x3E3 */
602 "WM_DDE_ACK", /* 0x3E4 */
603 "WM_DDE_DATA", /* 0x3E5 */
604 "WM_DDE_REQUEST", /* 0x3E6 */
605 "WM_DDE_POKE", /* 0x3E7 */
606 "WM_DDE_EXECUTE", /* 0x3E8 */
607 NULL, NULL, NULL, NULL, NULL, NULL, NULL,
610 /* 0x03f0 */
611 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
612 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
614 "WM_USER" /* 0x0400 */
618 #define SPY_MAX_LVMMSGNUM 140
619 static const char * const LVMMessageTypeNames[SPY_MAX_LVMMSGNUM + 1] =
621 "LVM_GETBKCOLOR", /* 1000 */
622 "LVM_SETBKCOLOR",
623 "LVM_GETIMAGELIST",
624 "LVM_SETIMAGELIST",
625 "LVM_GETITEMCOUNT",
626 "LVM_GETITEMA",
627 "LVM_SETITEMA",
628 "LVM_INSERTITEMA",
629 "LVM_DELETEITEM",
630 "LVM_DELETEALLITEMS",
631 "LVM_GETCALLBACKMASK",
632 "LVM_SETCALLBACKMASK",
633 "LVM_GETNEXTITEM",
634 "LVM_FINDITEMA",
635 "LVM_GETITEMRECT",
636 "LVM_SETITEMPOSITION",
637 "LVM_GETITEMPOSITION",
638 "LVM_GETSTRINGWIDTHA",
639 "LVM_HITTEST",
640 "LVM_ENSUREVISIBLE",
641 "LVM_SCROLL",
642 "LVM_REDRAWITEMS",
643 "LVM_ARRANGE",
644 "LVM_EDITLABELA",
645 "LVM_GETEDITCONTROL",
646 "LVM_GETCOLUMNA",
647 "LVM_SETCOLUMNA",
648 "LVM_INSERTCOLUMNA",
649 "LVM_DELETECOLUMN",
650 "LVM_GETCOLUMNWIDTH",
651 "LVM_SETCOLUMNWIDTH",
652 "LVM_GETHEADER",
653 NULL,
654 "LVM_CREATEDRAGIMAGE",
655 "LVM_GETVIEWRECT",
656 "LVM_GETTEXTCOLOR",
657 "LVM_SETTEXTCOLOR",
658 "LVM_GETTEXTBKCOLOR",
659 "LVM_SETTEXTBKCOLOR",
660 "LVM_GETTOPINDEX",
661 "LVM_GETCOUNTPERPAGE",
662 "LVM_GETORIGIN",
663 "LVM_UPDATE",
664 "LVM_SETITEMSTATE",
665 "LVM_GETITEMSTATE",
666 "LVM_GETITEMTEXTA",
667 "LVM_SETITEMTEXTA",
668 "LVM_SETITEMCOUNT",
669 "LVM_SORTITEMS",
670 "LVM_SETITEMPOSITION32",
671 "LVM_GETSELECTEDCOUNT",
672 "LVM_GETITEMSPACING",
673 "LVM_GETISEARCHSTRINGA",
674 "LVM_SETICONSPACING",
675 "LVM_SETEXTENDEDLISTVIEWSTYLE",
676 "LVM_GETEXTENDEDLISTVIEWSTYLE",
677 "LVM_GETSUBITEMRECT",
678 "LVM_SUBITEMHITTEST",
679 "LVM_SETCOLUMNORDERARRAY",
680 "LVM_GETCOLUMNORDERARRAY",
681 "LVM_SETHOTITEM",
682 "LVM_GETHOTITEM",
683 "LVM_SETHOTCURSOR",
684 "LVM_GETHOTCURSOR",
685 "LVM_APPROXIMATEVIEWRECT",
686 "LVM_SETWORKAREAS",
687 "LVM_GETSELECTIONMARK",
688 "LVM_SETSELECTIONMARK",
689 "LVM_SETBKIMAGEA",
690 "LVM_GETBKIMAGEA",
691 "LVM_GETWORKAREAS",
692 "LVM_SETHOVERTIME",
693 "LVM_GETHOVERTIME",
694 "LVM_GETNUMBEROFWORKAREAS",
695 "LVM_SETTOOLTIPS",
696 "LVM_GETITEMW",
697 "LVM_SETITEMW",
698 "LVM_INSERTITEMW",
699 "LVM_GETTOOLTIPS",
700 NULL,
701 NULL,
702 NULL,
703 NULL,
704 "LVM_FINDITEMW",
705 NULL,
706 NULL,
707 NULL,
708 "LVM_GETSTRINGWIDTHW",
709 NULL,
710 NULL,
711 NULL,
712 NULL,
713 NULL,
714 NULL,
715 NULL,
716 "LVM_GETCOLUMNW",
717 "LVM_SETCOLUMNW",
718 "LVM_INSERTCOLUMNW",
719 NULL,
720 NULL,
721 NULL,
722 NULL,
723 NULL,
724 NULL,
725 NULL,
726 NULL,
727 NULL,
728 NULL,
729 NULL,
730 NULL,
731 NULL,
732 NULL,
733 NULL,
734 NULL,
735 NULL,
736 "LVM_GETITEMTEXTW",
737 "LVM_SETITEMTEXTW",
738 "LVM_GETISEARCHSTRINGW",
739 "LVM_EDITLABELW",
740 NULL,
741 NULL,
742 NULL,
743 NULL,
744 NULL,
745 NULL,
746 NULL,
747 NULL,
748 NULL,
749 NULL,
750 NULL,
751 NULL,
752 NULL,
753 NULL,
754 NULL,
755 NULL,
756 NULL,
757 NULL,
758 NULL,
759 NULL,
760 "LVM_SETBKIMAGEW",
761 "LVM_GETBKIMAGEW" /* 0x108B */
765 #define SPY_MAX_TVMSGNUM 65
766 static const char * const TVMessageTypeNames[SPY_MAX_TVMSGNUM + 1] =
768 "TVM_INSERTITEMA", /* 1100 */
769 "TVM_DELETEITEM",
770 "TVM_EXPAND",
771 NULL,
772 "TVM_GETITEMRECT",
773 "TVM_GETCOUNT",
774 "TVM_GETINDENT",
775 "TVM_SETINDENT",
776 "TVM_GETIMAGELIST",
777 "TVM_SETIMAGELIST",
778 "TVM_GETNEXTITEM",
779 "TVM_SELECTITEM",
780 "TVM_GETITEMA",
781 "TVM_SETITEMA",
782 "TVM_EDITLABELA",
783 "TVM_GETEDITCONTROL",
784 "TVM_GETVISIBLECOUNT",
785 "TVM_HITTEST",
786 "TVM_CREATEDRAGIMAGE",
787 "TVM_SORTCHILDREN",
788 "TVM_ENSUREVISIBLE",
789 "TVM_SORTCHILDRENCB",
790 "TVM_ENDEDITLABELNOW",
791 "TVM_GETISEARCHSTRINGA",
792 "TVM_SETTOOLTIPS",
793 "TVM_GETTOOLTIPS",
794 "TVM_SETINSERTMARK",
795 "TVM_SETITEMHEIGHT",
796 "TVM_GETITEMHEIGHT",
797 "TVM_SETBKCOLOR",
798 "TVM_SETTEXTCOLOR",
799 "TVM_GETBKCOLOR",
800 "TVM_GETTEXTCOLOR",
801 "TVM_SETSCROLLTIME",
802 "TVM_GETSCROLLTIME",
803 "TVM_UNKNOWN35",
804 "TVM_UNKNOWN36",
805 "TVM_SETINSERTMARKCOLOR",
806 "TVM_GETINSERTMARKCOLOR",
807 "TVM_GETITEMSTATE",
808 "TVM_SETLINECOLOR",
809 "TVM_GETLINECOLOR",
810 NULL,
811 NULL,
812 NULL,
813 NULL,
814 NULL,
815 NULL,
816 NULL,
817 NULL,
818 "TVM_INSERTITEMW",
819 NULL,
820 NULL,
821 NULL,
822 NULL,
823 NULL,
824 NULL,
825 NULL,
826 NULL,
827 NULL,
828 NULL,
829 NULL,
830 "TVM_GETITEMW",
831 "TVM_SETITEMW",
832 "TVM_GETISEARCHSTRINGW",
833 "TVM_EDITLABELW"
837 #define SPY_MAX_HDMMSGNUM 19
838 static const char * const HDMMessageTypeNames[SPY_MAX_HDMMSGNUM + 1] =
840 "HDM_GETITEMCOUNT", /* 1200 */
841 "HDM_INSERTITEMA",
842 "HDM_DELETEITEM",
843 "HDM_GETITEMA",
844 "HDM_SETITEMA",
845 "HDM_LAYOUT",
846 "HDM_HITTEST",
847 "HDM_GETITEMRECT",
848 "HDM_SETIMAGELIST",
849 "HDM_GETIMAGELIST",
850 "HDM_INSERTITEMW",
851 "HDM_GETITEMW",
852 "HDM_SETITEMW",
853 NULL,
854 NULL,
855 "HDM_ORDERTOINDEX",
856 "HDM_CREATEDRAGIMAGE",
857 "GETORDERARRAYINDEX",
858 "SETORDERARRAYINDEX",
859 "SETHOTDIVIDER"
863 #define SPY_MAX_TCMMSGNUM 62
864 static const char * const TCMMessageTypeNames[SPY_MAX_TCMMSGNUM + 1] =
866 NULL, /* 1300 */
867 NULL,
868 "TCM_SETIMAGELIST",
869 "TCM_GETIMAGELIST",
870 "TCM_GETITEMCOUNT",
871 "TCM_GETITEMA",
872 "TCM_SETITEMA",
873 "TCM_INSERTITEMA",
874 "TCM_DELETEITEM",
875 "TCM_DELETEALLITEMS",
876 "TCM_GETITEMRECT",
877 "TCM_GETCURSEL",
878 "TCM_SETCURSEL",
879 "TCM_HITTEST",
880 "TCM_SETITEMEXTRA",
881 NULL,
882 NULL,
883 NULL,
884 NULL,
885 NULL,
886 NULL,
887 NULL,
888 NULL,
889 NULL,
890 NULL,
891 NULL,
892 NULL,
893 NULL,
894 NULL,
895 NULL,
896 NULL,
897 NULL,
898 NULL,
899 NULL,
900 NULL,
901 NULL,
902 NULL,
903 NULL,
904 NULL,
905 NULL,
906 "TCM_ADJUSTRECT",
907 "TCM_SETITEMSIZE",
908 "TCM_REMOVEIMAGE",
909 "TCM_SETPADDING",
910 "TCM_GETROWCOUNT",
911 "TCM_GETTOOLTIPS",
912 "TCM_SETTOOLTIPS",
913 "TCM_GETCURFOCUS",
914 "TCM_SETCURFOCUS",
915 "TCM_SETMINTABWIDTH",
916 "TCM_DESELECTALL",
917 "TCM_HIGHLIGHTITEM",
918 "TCM_SETEXTENDEDSTYLE",
919 "TCM_GETEXTENDEDSTYLE",
920 NULL,
921 NULL,
922 NULL,
923 NULL,
924 NULL,
925 NULL,
926 "TCM_GETITEMW",
927 "TCM_SETITEMW",
928 "TCM_INSERTITEMW"
931 #define SPY_MAX_PGMMSGNUM 13
932 static const char * const PGMMessageTypeNames[SPY_MAX_PGMMSGNUM + 1] =
934 NULL, /* 1400 */
935 "PGM_SETCHILD",
936 "PGM_RECALCSIZE",
937 "PGM_FORWARDMOUSE",
938 "PGM_SETBKCOLOR",
939 "PGM_GETBKCOLOR",
940 "PGM_SETBORDER",
941 "PGM_GETBORDER",
942 "PGM_SETPOS",
943 "PGM_GETPOS",
944 "PGM_SETBUTTONSIZE",
945 "PGM_GETBUTTONSIZE",
946 "PGM_GETBUTTONSTATE",
947 "PGM_GETDROPTARGET"
951 #define SPY_MAX_CCMMSGNUM 6
952 static const char * const CCMMessageTypeNames[SPY_MAX_CCMMSGNUM + 1] =
954 NULL, /* 0x2000 */
955 "CCM_SETBKCOLOR",
956 "CCM_SETCOLORSCHEME",
957 "CCM_GETCOLORSCHEME",
958 "CCM_GETDROPTARGET",
959 "CCM_SETUNICODEFORMAT",
960 "CCM_GETUNICODEFORMAT"
963 #define SPY_MAX_WINEMSGNUM 6
964 static const char * const WINEMessageTypeNames[SPY_MAX_WINEMSGNUM + 1] =
966 "WM_WINE_DESTROYWINDOW",
967 "WM_WINE_SETWINDOWPOS",
968 "WM_WINE_SHOWWINDOW",
969 "WM_WINE_SETPARENT",
970 "WM_WINE_SETWINDOWLONG",
971 "WM_WINE_ENABLEWINDOW"
974 /* Virtual key names */
975 #define SPY_MAX_VKKEYSNUM 255
976 static const char * const VK_KeyNames[SPY_MAX_VKKEYSNUM + 1] =
978 NULL, /* 0x00 */
979 "VK_LBUTTON", /* 0x01 */
980 "VK_RBUTTON", /* 0x02 */
981 "VK_CANCEL", /* 0x03 */
982 "VK_MBUTTON", /* 0x04 */
983 NULL, /* 0x05 */
984 NULL, /* 0x06 */
985 NULL, /* 0x07 */
986 "VK_BACK", /* 0x08 */
987 "VK_TAB", /* 0x09 */
988 NULL, /* 0x0A */
989 NULL, /* 0x0B */
990 "VK_CLEAR", /* 0x0C */
991 "VK_RETURN", /* 0x0D */
992 NULL, /* 0x0E */
993 NULL, /* 0x0F */
994 "VK_SHIFT", /* 0x10 */
995 "VK_CONTROL", /* 0x11 */
996 "VK_MENU", /* 0x12 */
997 "VK_PAUSE", /* 0x13 */
998 "VK_CAPITAL", /* 0x14 */
999 NULL, /* 0x15 */
1000 NULL, /* 0x16 */
1001 NULL, /* 0x17 */
1002 NULL, /* 0x18 */
1003 NULL, /* 0x19 */
1004 NULL, /* 0x1A */
1005 "VK_ESCAPE", /* 0x1B */
1006 NULL, /* 0x1C */
1007 NULL, /* 0x1D */
1008 NULL, /* 0x1E */
1009 NULL, /* 0x1F */
1010 "VK_SPACE", /* 0x20 */
1011 "VK_PRIOR", /* 0x21 */
1012 "VK_NEXT", /* 0x22 */
1013 "VK_END", /* 0x23 */
1014 "VK_HOME", /* 0x24 */
1015 "VK_LEFT", /* 0x25 */
1016 "VK_UP", /* 0x26 */
1017 "VK_RIGHT", /* 0x27 */
1018 "VK_DOWN", /* 0x28 */
1019 "VK_SELECT", /* 0x29 */
1020 "VK_PRINT", /* 0x2A */
1021 "VK_EXECUTE", /* 0x2B */
1022 "VK_SNAPSHOT", /* 0x2C */
1023 "VK_INSERT", /* 0x2D */
1024 "VK_DELETE", /* 0x2E */
1025 "VK_HELP", /* 0x2F */
1026 "VK_0", /* 0x30 */
1027 "VK_1", /* 0x31 */
1028 "VK_2", /* 0x32 */
1029 "VK_3", /* 0x33 */
1030 "VK_4", /* 0x34 */
1031 "VK_5", /* 0x35 */
1032 "VK_6", /* 0x36 */
1033 "VK_7", /* 0x37 */
1034 "VK_8", /* 0x38 */
1035 "VK_9", /* 0x39 */
1036 NULL, /* 0x3A */
1037 NULL, /* 0x3B */
1038 NULL, /* 0x3C */
1039 NULL, /* 0x3D */
1040 NULL, /* 0x3E */
1041 NULL, /* 0x3F */
1042 NULL, /* 0x40 */
1043 "VK_A", /* 0x41 */
1044 "VK_B", /* 0x42 */
1045 "VK_C", /* 0x43 */
1046 "VK_D", /* 0x44 */
1047 "VK_E", /* 0x45 */
1048 "VK_F", /* 0x46 */
1049 "VK_G", /* 0x47 */
1050 "VK_H", /* 0x48 */
1051 "VK_I", /* 0x49 */
1052 "VK_J", /* 0x4A */
1053 "VK_K", /* 0x4B */
1054 "VK_L", /* 0x4C */
1055 "VK_M", /* 0x4D */
1056 "VK_N", /* 0x4E */
1057 "VK_O", /* 0x4F */
1058 "VK_P", /* 0x50 */
1059 "VK_Q", /* 0x51 */
1060 "VK_R", /* 0x52 */
1061 "VK_S", /* 0x53 */
1062 "VK_T", /* 0x54 */
1063 "VK_U", /* 0x55 */
1064 "VK_V", /* 0x56 */
1065 "VK_W", /* 0x57 */
1066 "VK_X", /* 0x58 */
1067 "VK_Y", /* 0x59 */
1068 "VK_Z", /* 0x5A */
1069 "VK_LWIN", /* 0x5B */
1070 "VK_RWIN", /* 0x5C */
1071 "VK_APPS", /* 0x5D */
1072 NULL, /* 0x5E */
1073 NULL, /* 0x5F */
1074 "VK_NUMPAD0", /* 0x60 */
1075 "VK_NUMPAD1", /* 0x61 */
1076 "VK_NUMPAD2", /* 0x62 */
1077 "VK_NUMPAD3", /* 0x63 */
1078 "VK_NUMPAD4", /* 0x64 */
1079 "VK_NUMPAD5", /* 0x65 */
1080 "VK_NUMPAD6", /* 0x66 */
1081 "VK_NUMPAD7", /* 0x67 */
1082 "VK_NUMPAD8", /* 0x68 */
1083 "VK_NUMPAD9", /* 0x69 */
1084 "VK_MULTIPLY", /* 0x6A */
1085 "VK_ADD", /* 0x6B */
1086 "VK_SEPARATOR", /* 0x6C */
1087 "VK_SUBTRACT", /* 0x6D */
1088 "VK_DECIMAL", /* 0x6E */
1089 "VK_DIVIDE", /* 0x6F */
1090 "VK_F1", /* 0x70 */
1091 "VK_F2", /* 0x71 */
1092 "VK_F3", /* 0x72 */
1093 "VK_F4", /* 0x73 */
1094 "VK_F5", /* 0x74 */
1095 "VK_F6", /* 0x75 */
1096 "VK_F7", /* 0x76 */
1097 "VK_F8", /* 0x77 */
1098 "VK_F9", /* 0x78 */
1099 "VK_F10", /* 0x79 */
1100 "VK_F11", /* 0x7A */
1101 "VK_F12", /* 0x7B */
1102 "VK_F13", /* 0x7C */
1103 "VK_F14", /* 0x7D */
1104 "VK_F15", /* 0x7E */
1105 "VK_F16", /* 0x7F */
1106 "VK_F17", /* 0x80 */
1107 "VK_F18", /* 0x81 */
1108 "VK_F19", /* 0x82 */
1109 "VK_F20", /* 0x83 */
1110 "VK_F21", /* 0x84 */
1111 "VK_F22", /* 0x85 */
1112 "VK_F23", /* 0x86 */
1113 "VK_F24", /* 0x87 */
1114 NULL, /* 0x88 */
1115 NULL, /* 0x89 */
1116 NULL, /* 0x8A */
1117 NULL, /* 0x8B */
1118 NULL, /* 0x8C */
1119 NULL, /* 0x8D */
1120 NULL, /* 0x8E */
1121 NULL, /* 0x8F */
1122 "VK_NUMLOCK", /* 0x90 */
1123 "VK_SCROLL", /* 0x91 */
1124 NULL, /* 0x92 */
1125 NULL, /* 0x93 */
1126 NULL, /* 0x94 */
1127 NULL, /* 0x95 */
1128 NULL, /* 0x96 */
1129 NULL, /* 0x97 */
1130 NULL, /* 0x98 */
1131 NULL, /* 0x99 */
1132 NULL, /* 0x9A */
1133 NULL, /* 0x9B */
1134 NULL, /* 0x9C */
1135 NULL, /* 0x9D */
1136 NULL, /* 0x9E */
1137 NULL, /* 0x9F */
1138 "VK_LSHIFT", /* 0xA0 */
1139 "VK_RSHIFT", /* 0xA1 */
1140 "VK_LCONTROL", /* 0xA2 */
1141 "VK_RCONTROL", /* 0xA3 */
1142 "VK_LMENU", /* 0xA4 */
1143 "VK_RMENU", /* 0xA5 */
1144 NULL, /* 0xA6 */
1145 NULL, /* 0xA7 */
1146 NULL, /* 0xA8 */
1147 NULL, /* 0xA9 */
1148 NULL, /* 0xAA */
1149 NULL, /* 0xAB */
1150 NULL, /* 0xAC */
1151 NULL, /* 0xAD */
1152 NULL, /* 0xAE */
1153 NULL, /* 0xAF */
1154 NULL, /* 0xB0 */
1155 NULL, /* 0xB1 */
1156 NULL, /* 0xB2 */
1157 NULL, /* 0xB3 */
1158 NULL, /* 0xB4 */
1159 NULL, /* 0xB5 */
1160 NULL, /* 0xB6 */
1161 NULL, /* 0xB7 */
1162 NULL, /* 0xB8 */
1163 NULL, /* 0xB9 */
1164 "VK_OEM_1", /* 0xBA */
1165 "VK_OEM_PLUS", /* 0xBB */
1166 "VK_OEM_COMMA", /* 0xBC */
1167 "VK_OEM_MINUS", /* 0xBD */
1168 "VK_OEM_PERIOD", /* 0xBE */
1169 "VK_OEM_2", /* 0xBF */
1170 "VK_OEM_3", /* 0xC0 */
1171 NULL, /* 0xC1 */
1172 NULL, /* 0xC2 */
1173 NULL, /* 0xC3 */
1174 NULL, /* 0xC4 */
1175 NULL, /* 0xC5 */
1176 NULL, /* 0xC6 */
1177 NULL, /* 0xC7 */
1178 NULL, /* 0xC8 */
1179 NULL, /* 0xC9 */
1180 NULL, /* 0xCA */
1181 NULL, /* 0xCB */
1182 NULL, /* 0xCC */
1183 NULL, /* 0xCD */
1184 NULL, /* 0xCE */
1185 NULL, /* 0xCF */
1186 NULL, /* 0xD0 */
1187 NULL, /* 0xD1 */
1188 NULL, /* 0xD2 */
1189 NULL, /* 0xD3 */
1190 NULL, /* 0xD4 */
1191 NULL, /* 0xD5 */
1192 NULL, /* 0xD6 */
1193 NULL, /* 0xD7 */
1194 NULL, /* 0xD8 */
1195 NULL, /* 0xD9 */
1196 NULL, /* 0xDA */
1197 "VK_OEM_4", /* 0xDB */
1198 "VK_OEM_5", /* 0xDC */
1199 "VK_OEM_6", /* 0xDD */
1200 "VK_OEM_7", /* 0xDE */
1201 "VK_OEM_8", /* 0xDF */
1202 NULL, /* 0xE0 */
1203 "VK_OEM_AX", /* 0xE1 */
1204 "VK_OEM_102", /* 0xE2 */
1205 "VK_ICO_HELP", /* 0xE3 */
1206 "VK_ICO_00", /* 0xE4 */
1207 "VK_PROCESSKEY", /* 0xE5 */
1208 NULL, /* 0xE6 */
1209 NULL, /* 0xE7 */
1210 NULL, /* 0xE8 */
1211 NULL, /* 0xE9 */
1212 NULL, /* 0xEA */
1213 NULL, /* 0xEB */
1214 NULL, /* 0xEC */
1215 NULL, /* 0xED */
1216 NULL, /* 0xEE */
1217 NULL, /* 0xEF */
1218 NULL, /* 0xF0 */
1219 NULL, /* 0xF1 */
1220 NULL, /* 0xF2 */
1221 NULL, /* 0xF3 */
1222 NULL, /* 0xF4 */
1223 NULL, /* 0xF5 */
1224 "VK_ATTN", /* 0xF6 */
1225 "VK_CRSEL", /* 0xF7 */
1226 "VK_EXSEL", /* 0xF8 */
1227 "VK_EREOF", /* 0xF9 */
1228 "VK_PLAY", /* 0xFA */
1229 "VK_ZOOM", /* 0xFB */
1230 "VK_NONAME", /* 0xFC */
1231 "VK_PA1", /* 0xFD */
1232 "VK_OEM_CLEAR", /* 0xFE */
1233 NULL /* 0xFF */
1237 /************************************************************************/
1240 /* WM_USER+n message values for "common controls" */
1242 typedef struct
1244 const char *name; /* name of control message */
1245 UINT value; /* message number (0x0401-0x0fff */
1246 UINT len; /* length of space at lParam to dump */
1247 } USER_MSG;
1250 typedef struct
1252 const WCHAR *classname; /* class name to match */
1253 const USER_MSG *classmsg; /* pointer to first USER_MSG for class */
1254 USER_MSG *lastmsg; /* pointer to last USER_MSG for class */
1255 } CONTROL_CLASS;
1257 #define USM(a,b) { #a ,a,b}
1258 #define SZOF(a) sizeof(a)
1260 /* To dump memory at the lParam for any of these messages, */
1261 /* replace the "0" with a "SZOF(structure)", or with a */
1262 /* number. (First method prefered.) */
1264 static const USER_MSG rebar_array[] = {
1265 USM(RB_INSERTBANDA, 0),
1266 USM(RB_DELETEBAND, 0),
1267 USM(RB_GETBARINFO, 0),
1268 USM(RB_SETBARINFO, 0),
1269 USM(RB_GETBANDINFO, 0),
1270 USM(RB_SETBANDINFOA, 0),
1271 USM(RB_SETPARENT, 0),
1272 USM(RB_HITTEST, 0),
1273 USM(RB_GETRECT, 0),
1274 USM(RB_INSERTBANDW, 0),
1275 USM(RB_SETBANDINFOW, 0),
1276 USM(RB_GETBANDCOUNT, 0),
1277 USM(RB_GETROWCOUNT, 0),
1278 USM(RB_GETROWHEIGHT, 0),
1279 USM(RB_IDTOINDEX, 0),
1280 USM(RB_GETTOOLTIPS, 0),
1281 USM(RB_SETTOOLTIPS, 0),
1282 USM(RB_SETBKCOLOR, 0),
1283 USM(RB_GETBKCOLOR, 0),
1284 USM(RB_SETTEXTCOLOR, 0),
1285 USM(RB_GETTEXTCOLOR, 0),
1286 USM(RB_SIZETORECT, 0),
1287 USM(RB_BEGINDRAG, 0),
1288 USM(RB_ENDDRAG, 0),
1289 USM(RB_DRAGMOVE, 0),
1290 USM(RB_GETBARHEIGHT, 0),
1291 USM(RB_GETBANDINFOW, 0),
1292 USM(RB_GETBANDINFOA, 0),
1293 USM(RB_MINIMIZEBAND, 0),
1294 USM(RB_MAXIMIZEBAND, 0),
1295 USM(RB_GETBANDBORDERS, 0),
1296 USM(RB_SHOWBAND, 0),
1297 USM(RB_SETPALETTE, 0),
1298 USM(RB_GETPALETTE, 0),
1299 USM(RB_MOVEBAND, 0),
1300 {0,0,0} };
1302 static const USER_MSG toolbar_array[] = {
1303 USM(TB_ENABLEBUTTON ,0),
1304 USM(TB_CHECKBUTTON ,0),
1305 USM(TB_PRESSBUTTON ,0),
1306 USM(TB_HIDEBUTTON ,0),
1307 USM(TB_INDETERMINATE ,0),
1308 USM(TB_MARKBUTTON ,0),
1309 USM(TB_ISBUTTONENABLED ,0),
1310 USM(TB_ISBUTTONCHECKED ,0),
1311 USM(TB_ISBUTTONPRESSED ,0),
1312 USM(TB_ISBUTTONHIDDEN ,0),
1313 USM(TB_ISBUTTONINDETERMINATE ,0),
1314 USM(TB_ISBUTTONHIGHLIGHTED ,0),
1315 USM(TB_SETSTATE ,0),
1316 USM(TB_GETSTATE ,0),
1317 USM(TB_ADDBITMAP ,0),
1318 USM(TB_ADDBUTTONSA ,0),
1319 USM(TB_INSERTBUTTONA ,0),
1320 USM(TB_DELETEBUTTON ,0),
1321 USM(TB_GETBUTTON ,0),
1322 USM(TB_BUTTONCOUNT ,0),
1323 USM(TB_COMMANDTOINDEX ,0),
1324 USM(TB_SAVERESTOREA ,0),
1325 USM(TB_CUSTOMIZE ,0),
1326 USM(TB_ADDSTRINGA ,0),
1327 USM(TB_GETITEMRECT ,0),
1328 USM(TB_BUTTONSTRUCTSIZE ,0),
1329 USM(TB_SETBUTTONSIZE ,0),
1330 USM(TB_SETBITMAPSIZE ,0),
1331 USM(TB_AUTOSIZE ,0),
1332 USM(TB_GETTOOLTIPS ,0),
1333 USM(TB_SETTOOLTIPS ,0),
1334 USM(TB_SETPARENT ,0),
1335 USM(TB_SETROWS ,0),
1336 USM(TB_GETROWS ,0),
1337 USM(TB_GETBITMAPFLAGS ,0),
1338 USM(TB_SETCMDID ,0),
1339 USM(TB_CHANGEBITMAP ,0),
1340 USM(TB_GETBITMAP ,0),
1341 USM(TB_GETBUTTONTEXTA ,0),
1342 USM(TB_REPLACEBITMAP ,0),
1343 USM(TB_SETINDENT ,0),
1344 USM(TB_SETIMAGELIST ,0),
1345 USM(TB_GETIMAGELIST ,0),
1346 USM(TB_LOADIMAGES ,0),
1347 USM(TB_GETRECT ,0),
1348 USM(TB_SETHOTIMAGELIST ,0),
1349 USM(TB_GETHOTIMAGELIST ,0),
1350 USM(TB_SETDISABLEDIMAGELIST ,0),
1351 USM(TB_GETDISABLEDIMAGELIST ,0),
1352 USM(TB_SETSTYLE ,0),
1353 USM(TB_GETSTYLE ,0),
1354 USM(TB_GETBUTTONSIZE ,0),
1355 USM(TB_SETBUTTONWIDTH ,0),
1356 USM(TB_SETMAXTEXTROWS ,0),
1357 USM(TB_GETTEXTROWS ,0),
1358 USM(TB_GETOBJECT ,0),
1359 USM(TB_GETBUTTONINFOW ,0),
1360 USM(TB_SETBUTTONINFOW ,0),
1361 USM(TB_GETBUTTONINFOA ,0),
1362 USM(TB_SETBUTTONINFOA ,0),
1363 USM(TB_INSERTBUTTONW ,0),
1364 USM(TB_ADDBUTTONSW ,0),
1365 USM(TB_HITTEST ,0),
1366 USM(TB_SETDRAWTEXTFLAGS ,0),
1367 USM(TB_GETHOTITEM ,0),
1368 USM(TB_SETHOTITEM ,0),
1369 USM(TB_SETANCHORHIGHLIGHT ,0),
1370 USM(TB_GETANCHORHIGHLIGHT ,0),
1371 USM(TB_GETBUTTONTEXTW ,0),
1372 USM(TB_SAVERESTOREW ,0),
1373 USM(TB_ADDSTRINGW ,0),
1374 USM(TB_MAPACCELERATORA ,0),
1375 USM(TB_GETINSERTMARK ,0),
1376 USM(TB_SETINSERTMARK ,0),
1377 USM(TB_INSERTMARKHITTEST ,0),
1378 USM(TB_MOVEBUTTON ,0),
1379 USM(TB_GETMAXSIZE ,0),
1380 USM(TB_SETEXTENDEDSTYLE ,0),
1381 USM(TB_GETEXTENDEDSTYLE ,0),
1382 USM(TB_GETPADDING ,0),
1383 USM(TB_SETPADDING ,0),
1384 USM(TB_SETINSERTMARKCOLOR ,0),
1385 USM(TB_GETINSERTMARKCOLOR ,0),
1386 USM(TB_MAPACCELERATORW ,0),
1387 {0,0,0} };
1389 static const USER_MSG comboex_array[] = {
1390 USM(CBEM_INSERTITEMA ,0),
1391 USM(CBEM_SETIMAGELIST ,0),
1392 USM(CBEM_GETIMAGELIST ,0),
1393 USM(CBEM_GETITEMA ,0),
1394 USM(CBEM_SETITEMA ,0),
1395 USM(CBEM_GETCOMBOCONTROL ,0),
1396 USM(CBEM_GETEDITCONTROL ,0),
1397 USM(CBEM_SETEXSTYLE ,0),
1398 USM(CBEM_GETEXTENDEDSTYLE ,0),
1399 USM(CBEM_HASEDITCHANGED ,0),
1400 USM(CBEM_INSERTITEMW ,0),
1401 USM(CBEM_SETITEMW ,0),
1402 USM(CBEM_GETITEMW ,0),
1403 USM(CBEM_SETEXTENDEDSTYLE ,0),
1404 {0,0,0} };
1406 #undef SZOF
1407 #undef USM
1409 static CONTROL_CLASS cc_array[] = {
1410 {WC_COMBOBOXEXW, comboex_array, 0},
1411 {REBARCLASSNAMEW, rebar_array, 0},
1412 {TOOLBARCLASSNAMEW, toolbar_array, 0},
1413 {0, 0, 0} };
1416 /************************************************************************/
1419 /* WM_NOTIFY function codes display */
1421 typedef struct
1423 const char *name; /* name of notify message */
1424 UINT value; /* notify code value */
1425 UINT len; /* length of extra space to dump */
1426 } SPY_NOTIFY;
1428 #define SPNFY(a,b) { #a ,a,sizeof(b)-sizeof(NMHDR)}
1430 /* Array MUST be in descending order by the 'value' field */
1431 /* (since value is UNSIGNED, 0xffffffff is largest and */
1432 /* 0xfffffffe is smaller). A binary search is used to */
1433 /* locate the correct 'value'. */
1434 static const SPY_NOTIFY spnfy_array[] = {
1435 /* common 0U to 0U-99U */
1436 SPNFY(NM_OUTOFMEMORY, NMHDR),
1437 SPNFY(NM_CLICK, NMHDR),
1438 SPNFY(NM_DBLCLK, NMHDR),
1439 SPNFY(NM_RETURN, NMHDR),
1440 SPNFY(NM_RCLICK, NMHDR),
1441 SPNFY(NM_RDBLCLK, NMHDR),
1442 SPNFY(NM_SETFOCUS, NMHDR),
1443 SPNFY(NM_KILLFOCUS, NMHDR),
1444 SPNFY(NM_CUSTOMDRAW, NMCUSTOMDRAW),
1445 SPNFY(NM_HOVER, NMHDR),
1446 SPNFY(NM_NCHITTEST, NMMOUSE),
1447 SPNFY(NM_KEYDOWN, NMKEY),
1448 SPNFY(NM_RELEASEDCAPTURE, NMHDR),
1449 SPNFY(NM_SETCURSOR, NMMOUSE),
1450 SPNFY(NM_CHAR, NMCHAR),
1451 SPNFY(NM_TOOLTIPSCREATED, NMTOOLTIPSCREATED),
1452 /* Listview 0U-100U to 0U-199U */
1453 SPNFY(LVN_ITEMCHANGING, NMLISTVIEW),
1454 SPNFY(LVN_ITEMCHANGED, NMLISTVIEW),
1455 SPNFY(LVN_INSERTITEM, NMLISTVIEW),
1456 SPNFY(LVN_DELETEITEM, NMLISTVIEW),
1457 SPNFY(LVN_DELETEALLITEMS, NMLISTVIEW),
1458 SPNFY(LVN_BEGINLABELEDITA, NMLVDISPINFOA),
1459 SPNFY(LVN_ENDLABELEDITA, NMLVDISPINFOA),
1460 SPNFY(LVN_COLUMNCLICK, NMLISTVIEW),
1461 SPNFY(LVN_BEGINDRAG, NMLISTVIEW),
1462 SPNFY(LVN_BEGINRDRAG, NMLISTVIEW),
1463 SPNFY(LVN_ODCACHEHINT, NMLVCACHEHINT),
1464 SPNFY(LVN_ITEMACTIVATE, NMITEMACTIVATE),
1465 SPNFY(LVN_ODSTATECHANGED, NMLVODSTATECHANGE),
1466 SPNFY(LVN_HOTTRACK, NMLISTVIEW),
1467 SPNFY(LVN_GETDISPINFOA, NMLVDISPINFOA),
1468 SPNFY(LVN_SETDISPINFOA, NMLVDISPINFOA),
1469 SPNFY(LVN_ODFINDITEMA, NMLVFINDITEM),
1470 SPNFY(LVN_KEYDOWN, NMLVKEYDOWN),
1471 SPNFY(LVN_MARQUEEBEGIN, NMLISTVIEW),
1472 SPNFY(LVN_GETINFOTIPA, NMLVGETINFOTIPA),
1473 SPNFY(LVN_GETINFOTIPW, NMLVGETINFOTIPW),
1474 SPNFY(LVN_BEGINLABELEDITW, NMLVDISPINFOW),
1475 SPNFY(LVN_ENDLABELEDITW, NMLVDISPINFOW),
1476 SPNFY(LVN_GETDISPINFOW, NMLVDISPINFOW),
1477 SPNFY(LVN_SETDISPINFOW, NMLVDISPINFOW),
1478 SPNFY(LVN_ODFINDITEMW, NMLVFINDITEM),
1479 /* Header 0U-300U to 0U-399U */
1480 SPNFY(HDN_ITEMCHANGINGA, NMHDR),
1481 SPNFY(HDN_ITEMCHANGEDA, NMHDR),
1482 SPNFY(HDN_ITEMCLICKA, NMHDR),
1483 SPNFY(HDN_ITEMDBLCLICKA, NMHDR),
1484 SPNFY(HDN_DIVIDERDBLCLICKA, NMHDR),
1485 SPNFY(HDN_BEGINTRACKA, NMHDR),
1486 SPNFY(HDN_ENDTRACKA, NMHDR),
1487 SPNFY(HDN_GETDISPINFOA, NMHDR),
1488 SPNFY(HDN_BEGINDRAG, NMHDR),
1489 SPNFY(HDN_ENDDRAG, NMHDR),
1490 SPNFY(HDN_ITEMCHANGINGW, NMHDR),
1491 SPNFY(HDN_ITEMCHANGEDW, NMHDR),
1492 SPNFY(HDN_ITEMCLICKW, NMHDR),
1493 SPNFY(HDN_ITEMDBLCLICKW, NMHDR),
1494 SPNFY(HDN_DIVIDERDBLCLICKW, NMHDR),
1495 SPNFY(HDN_BEGINTRACKW, NMHDR),
1496 SPNFY(HDN_ENDTRACKW, NMHDR),
1497 SPNFY(HDN_GETDISPINFOW, NMHDR),
1498 /* Treeview 0U-400U to 0U-499U */
1499 SPNFY(TVN_SELCHANGINGA, NMHDR),
1500 SPNFY(TVN_SELCHANGEDA, NMHDR),
1501 SPNFY(TVN_GETDISPINFOA, NMHDR),
1502 SPNFY(TVN_SETDISPINFOA, NMHDR),
1503 SPNFY(TVN_ITEMEXPANDINGA, NMHDR),
1504 SPNFY(TVN_ITEMEXPANDEDA, NMHDR),
1505 SPNFY(TVN_BEGINDRAGA, NMHDR),
1506 SPNFY(TVN_BEGINRDRAGA, NMHDR),
1507 SPNFY(TVN_DELETEITEMA, NMHDR),
1508 SPNFY(TVN_BEGINLABELEDITA, NMHDR),
1509 SPNFY(TVN_ENDLABELEDITA, NMHDR),
1510 SPNFY(TVN_KEYDOWN, NMHDR),
1511 SPNFY(TVN_SELCHANGINGW, NMHDR),
1512 SPNFY(TVN_SELCHANGEDW, NMHDR),
1513 SPNFY(TVN_GETDISPINFOW, NMHDR),
1514 SPNFY(TVN_SETDISPINFOW, NMHDR),
1515 SPNFY(TVN_ITEMEXPANDINGW, NMHDR),
1516 SPNFY(TVN_ITEMEXPANDEDW, NMHDR),
1517 SPNFY(TVN_BEGINDRAGW, NMHDR),
1518 SPNFY(TVN_BEGINRDRAGW, NMHDR),
1519 SPNFY(TVN_DELETEITEMW, NMHDR),
1520 SPNFY(TVN_BEGINLABELEDITW, NMHDR),
1521 SPNFY(TVN_ENDLABELEDITW, NMHDR),
1522 /* Tooltips 0U-520U to 0U-549U */
1523 /* Tab 0U-550U to 0U-580U */
1524 SPNFY(TCN_KEYDOWN, NMHDR),
1525 SPNFY(TCN_SELCHANGE, NMHDR),
1526 SPNFY(TCN_SELCHANGING, NMHDR),
1527 SPNFY(TCN_GETOBJECT, NMHDR),
1528 /* Common Dialog 0U-601U to 0U-699U */
1529 /* Toolbar 0U-700U to 0U-720U */
1530 SPNFY(TBN_GETBUTTONINFOA, NMTOOLBARA),
1531 SPNFY(TBN_BEGINDRAG, NMTOOLBARA),
1532 SPNFY(TBN_ENDDRAG, NMTOOLBARA),
1533 SPNFY(TBN_BEGINADJUST, NMHDR),
1534 SPNFY(TBN_ENDADJUST, NMHDR),
1535 SPNFY(TBN_RESET, NMHDR),
1536 SPNFY(TBN_QUERYINSERT, NMTOOLBARA),
1537 SPNFY(TBN_QUERYDELETE, NMTOOLBARA),
1538 SPNFY(TBN_TOOLBARCHANGE, NMHDR),
1539 SPNFY(TBN_CUSTHELP, NMHDR),
1540 SPNFY(TBN_DROPDOWN, NMTOOLBARA),
1541 SPNFY(TBN_GETOBJECT, NMOBJECTNOTIFY),
1542 SPNFY(TBN_HOTITEMCHANGE, NMTBHOTITEM),
1543 SPNFY(TBN_DRAGOUT, NMTOOLBARA),
1544 SPNFY(TBN_DELETINGBUTTON, NMTOOLBARA),
1545 SPNFY(TBN_GETDISPINFOA, NMTBDISPINFOA),
1546 SPNFY(TBN_GETDISPINFOW, NMTBDISPINFOW),
1547 SPNFY(TBN_GETINFOTIPA, NMTBGETINFOTIPA),
1548 SPNFY(TBN_GETINFOTIPW, NMTBGETINFOTIPW),
1549 SPNFY(TBN_GETBUTTONINFOW, NMTOOLBARW),
1550 /* Up/Down 0U-721U to 0U-740U */
1551 /* Month Calendar 0U-750U to 0U-759U */
1552 /* Date/Time 0U-760U to 0U-799U */
1553 /* ComboBoxEx 0U-800U to 0U-830U */
1554 SPNFY(CBEN_GETDISPINFOA, NMCOMBOBOXEXA),
1555 SPNFY(CBEN_INSERTITEM, NMCOMBOBOXEXA),
1556 SPNFY(CBEN_DELETEITEM, NMCOMBOBOXEXA),
1557 SPNFY(CBEN_BEGINEDIT, NMHDR),
1558 SPNFY(CBEN_ENDEDITA, NMCBEENDEDITA),
1559 SPNFY(CBEN_ENDEDITW, NMCBEENDEDITW),
1560 SPNFY(CBEN_GETDISPINFOW, NMCOMBOBOXEXW),
1561 SPNFY(CBEN_DRAGBEGINA, NMCBEDRAGBEGINA),
1562 SPNFY(CBEN_DRAGBEGINW, NMCBEDRAGBEGINW),
1563 /* Rebar 0U-831U to 0U-859U */
1564 SPNFY(RBN_HEIGHTCHANGE, NMHDR),
1565 SPNFY(RBN_GETOBJECT, NMOBJECTNOTIFY),
1566 SPNFY(RBN_LAYOUTCHANGED, NMHDR),
1567 SPNFY(RBN_AUTOSIZE, NMRBAUTOSIZE),
1568 SPNFY(RBN_BEGINDRAG, NMREBAR),
1569 SPNFY(RBN_ENDDRAG, NMREBAR),
1570 SPNFY(RBN_DELETINGBAND, NMREBAR),
1571 SPNFY(RBN_DELETEDBAND, NMREBAR),
1572 SPNFY(RBN_CHILDSIZE, NMREBARCHILDSIZE),
1573 /* IP Adderss 0U-860U to 0U-879U */
1574 /* Status bar 0U-880U to 0U-899U */
1575 /* Pager 0U-900U to 0U-950U */
1576 SPNFY(PGN_SCROLL, NMPGSCROLL),
1577 SPNFY(PGN_CALCSIZE, NMPGCALCSIZE),
1578 {0,0,0}};
1579 static const SPY_NOTIFY *end_spnfy_array; /* ptr to last good entry in array */
1580 #undef SPNFY
1583 static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1];
1584 static BOOL16 SPY_ExcludeDWP = 0;
1586 #define SPY_EXCLUDE(msg) \
1587 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
1590 typedef struct
1592 UINT msgnum; /* message number */
1593 HWND msg_hwnd; /* window handle for message */
1594 WPARAM wParam; /* message parameter */
1595 LPARAM lParam; /* message parameter */
1596 INT data_len; /* length of data to dump */
1597 char msg_name[60]; /* message name (see SPY_GetMsgName) */
1598 WCHAR wnd_class[60]; /* window class name (full) */
1599 WCHAR wnd_name[16]; /* window name for message */
1600 } SPY_INSTANCE;
1602 /* This is defined so that the external entry point can return the addr */
1603 static SPY_INSTANCE ext_sp_e;
1605 static int indent_tls_index;
1607 /***********************************************************************
1608 * get_indent_level
1610 inline static int get_indent_level(void)
1612 return (int)TlsGetValue( indent_tls_index );
1616 /***********************************************************************
1617 * set_indent_level
1619 inline static void set_indent_level( int level )
1621 TlsSetValue( indent_tls_index, (void *)level );
1625 /***********************************************************************
1626 * SPY_GetMsgInternal
1628 static const char *SPY_GetMsgInternal( UINT msg )
1630 static char msg_buffer[20];
1632 if (msg <= SPY_MAX_MSGNUM)
1634 if (!MessageTypeNames[msg]) return "???";
1635 return MessageTypeNames[msg];
1638 if (msg >= LVM_FIRST && msg <= LVM_FIRST + SPY_MAX_LVMMSGNUM)
1640 if (!LVMMessageTypeNames[msg-LVM_FIRST]) return "LVM_?";
1641 return LVMMessageTypeNames[msg-LVM_FIRST];
1644 if (msg >= TV_FIRST && msg <= TV_FIRST + SPY_MAX_TVMSGNUM)
1646 if (!TVMessageTypeNames[msg-TV_FIRST]) return "TV_?";
1647 return TVMessageTypeNames[msg-TV_FIRST];
1650 if (msg >= HDM_FIRST && msg <= HDM_FIRST + SPY_MAX_HDMMSGNUM)
1652 if (!HDMMessageTypeNames[msg-HDM_FIRST]) return "HDM_?";
1653 return HDMMessageTypeNames[msg-HDM_FIRST];
1656 if (msg >= TCM_FIRST && msg <= TCM_FIRST + SPY_MAX_TCMMSGNUM)
1658 if (!TCMMessageTypeNames[msg-TCM_FIRST]) return "TCM_?";
1659 return TCMMessageTypeNames[msg-TCM_FIRST];
1662 if (msg >= PGM_FIRST && msg <= PGM_FIRST + SPY_MAX_PGMMSGNUM)
1664 if (!PGMMessageTypeNames[msg-PGM_FIRST]) return "PGM_?";
1665 return PGMMessageTypeNames[msg-PGM_FIRST];
1668 if (msg >= CCM_FIRST && msg <= CCM_FIRST + SPY_MAX_CCMMSGNUM)
1670 if (!CCMMessageTypeNames[msg-CCM_FIRST]) return "???";
1671 return CCMMessageTypeNames[msg-CCM_FIRST];
1674 if (msg >= WM_WINE_DESTROYWINDOW && msg <= WM_WINE_DESTROYWINDOW + SPY_MAX_WINEMSGNUM)
1676 if (!WINEMessageTypeNames[msg-WM_WINE_DESTROYWINDOW]) return "???";
1677 return WINEMessageTypeNames[msg-WM_WINE_DESTROYWINDOW];
1680 sprintf( msg_buffer, "WM_USER+%04x", msg - WM_USER );
1681 return msg_buffer;
1684 /***********************************************************************
1685 * SPY_Bsearch_Msg
1687 const USER_MSG *SPY_Bsearch_Msg( const USER_MSG *first, const USER_MSG *last, UINT code)
1689 INT count;
1690 const USER_MSG *test;
1692 while (last >= first) {
1693 count = 1 + last - first;
1694 if (count < 3) {
1695 /* TRACE("code=%d, f-value=%d, f-name=%s, l-value=%d, l-name=%s, l-len=%d,\n",
1696 code, first->value, first->name, last->value, last->name, last->len); */
1697 if (first->value == code) return first;
1698 if (last->value == code) return last;
1699 return NULL;
1701 count = count / 2;
1702 test = first + count;
1703 /* TRACE("first=%p, last=%p, test=%p, t-value=%d, code=%d, count=%d\n",
1704 first, last, test, test->value, code, count); */
1705 if (test->value == code) return test;
1706 if (test->value > code)
1707 last = test - 1;
1708 else
1709 first = test + 1;
1711 return NULL;
1714 /***********************************************************************
1715 * SPY_GetMsgStuff
1717 * Get message name and other information for dumping
1719 static void SPY_GetMsgStuff( SPY_INSTANCE *sp_e )
1721 const USER_MSG *p;
1723 sp_e->msg_name[sizeof(sp_e->msg_name)-1] = 0;
1724 strncpy (sp_e->msg_name, SPY_GetMsgInternal( sp_e->msgnum ),
1725 sizeof(sp_e->msg_name)-1);
1727 sp_e->data_len = 0;
1728 if (strncmp(sp_e->msg_name, "WM_USER+", 8) == 0) {
1729 INT i = 0;
1731 /* TRACE("looking class %s\n", sp_e->wnd_class); */
1733 while (cc_array[i].classname &&
1734 strcmpW(cc_array[i].classname, sp_e->wnd_class) !=0) i++;
1736 if (!cc_array[i].classname) return;
1737 /* TRACE("process class %s, first %p, last %p\n",
1738 debugstr_w(cc_array[i].classname), cc_array[i].classmsg,
1739 cc_array[i].lastmsg); */
1740 p = SPY_Bsearch_Msg (cc_array[i].classmsg, cc_array[i].lastmsg,
1741 sp_e->msgnum);
1742 if (p) {
1743 strncpy (sp_e->msg_name, p->name, sizeof(sp_e->msg_name)-1);
1744 sp_e->data_len = p->len;
1749 /***********************************************************************
1750 * SPY_GetWndName
1752 * Sets the value of "wnd_name" and "wnd_class" members of the
1753 * instance structure.
1756 void SPY_GetWndName( SPY_INSTANCE *sp_e )
1758 DWORD save_error;
1759 INT len;
1761 /* save and restore error code over the next call */
1762 save_error = GetLastError();
1763 GetClassNameW(sp_e->msg_hwnd, sp_e->wnd_class, sizeof(sp_e->wnd_class)/sizeof(WCHAR));
1764 SetLastError(save_error);
1766 len = InternalGetWindowText(sp_e->msg_hwnd, sp_e->wnd_name, sizeof(sp_e->wnd_name)/sizeof(WCHAR));
1767 if(!len) /* get class name */
1769 LPWSTR dst = sp_e->wnd_name;
1770 LPWSTR src = sp_e->wnd_class;
1771 int n = sizeof(sp_e->wnd_name)/sizeof(WCHAR) - 3;
1772 *dst++ = '{';
1773 while ((n-- > 0) && *src) *dst++ = *src++;
1774 *dst++ = '}';
1775 *dst = 0;
1779 /***********************************************************************
1780 * SPY_GetMsgName
1782 * **** External function ****
1784 * Get message name
1786 const char *SPY_GetMsgName( UINT msg, HWND hWnd )
1788 ext_sp_e.msgnum = msg;
1789 ext_sp_e.msg_hwnd = hWnd;
1790 ext_sp_e.lParam = 0;
1791 ext_sp_e.wParam = 0;
1792 SPY_GetWndName(&ext_sp_e);
1793 SPY_GetMsgStuff(&ext_sp_e);
1794 return ext_sp_e.msg_name;
1797 /***********************************************************************
1798 * SPY_GetVKeyName
1800 const char *SPY_GetVKeyName(WPARAM wParam)
1802 const char *vk_key_name;
1804 if(wParam <= SPY_MAX_VKKEYSNUM && VK_KeyNames[wParam])
1805 vk_key_name = VK_KeyNames[wParam];
1806 else
1807 vk_key_name = "VK_???";
1809 return vk_key_name;
1812 /***********************************************************************
1813 * SPY_Bsearch_Notify
1815 const SPY_NOTIFY *SPY_Bsearch_Notify( const SPY_NOTIFY *first, const SPY_NOTIFY *last, UINT code)
1817 INT count;
1818 const SPY_NOTIFY *test;
1820 while (last >= first) {
1821 count = 1 + last - first;
1822 if (count < 3) {
1823 /* TRACE("code=%d, f-value=%d, f-name=%s, l-value=%d, l-name=%s, l-len=%d,\n",
1824 code, first->value, first->name, last->value, last->name, last->len); */
1825 if (first->value == code) return first;
1826 if (last->value == code) return last;
1827 return NULL;
1829 count = count / 2;
1830 test = first + count;
1831 /* TRACE("first=%p, last=%p, test=%p, t-value=%d, code=%d, count=%d\n",
1832 first, last, test, test->value, code, count); */
1833 if (test->value == code) return test;
1834 if (test->value < code)
1835 last = test - 1;
1836 else
1837 first = test + 1;
1839 return NULL;
1842 /***********************************************************************
1843 * SPY_DumpMem
1845 void SPY_DumpMem (LPSTR header, UINT *q, INT len)
1847 int i;
1849 for(i=0; i<len-12; i+=16) {
1850 TRACE("%s [%04x] %08x %08x %08x %08x\n",
1851 header, i, *q, *(q+1), *(q+2), *(q+3));
1852 q += 4;
1854 switch (len - i) {
1855 case 12:
1856 TRACE("%s [%04x] %08x %08x %08x\n",
1857 header, i, *q, *(q+1), *(q+2));
1858 break;
1859 case 8:
1860 TRACE("%s [%04x] %08x %08x\n",
1861 header, i, *q, *(q+1));
1862 break;
1863 case 4:
1864 TRACE("%s [%04x] %08x\n",
1865 header, i, *q);
1866 break;
1867 default:
1868 break;
1872 /***********************************************************************
1873 * SPY_DumpStructure
1875 void SPY_DumpStructure (SPY_INSTANCE *sp_e, BOOL enter)
1877 switch (sp_e->msgnum)
1879 case WM_DRAWITEM:
1880 if (!enter) break;
1882 DRAWITEMSTRUCT *lpdis = (DRAWITEMSTRUCT*) sp_e->lParam;
1883 TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
1884 lpdis->CtlType, lpdis->CtlID);
1885 TRACE("itemID=0x%08x itemAction=0x%08x itemState=0x%08x\n",
1886 lpdis->itemID, lpdis->itemAction, lpdis->itemState);
1887 TRACE("hWnd=0x%04x hDC=0x%04x (%d,%d)-(%d,%d) itemData=0x%08lx\n",
1888 lpdis->hwndItem, lpdis->hDC, lpdis->rcItem.left,
1889 lpdis->rcItem.top, lpdis->rcItem.right,
1890 lpdis->rcItem.bottom, lpdis->itemData);
1892 break;
1893 case WM_MEASUREITEM:
1895 MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) sp_e->lParam;
1896 TRACE("MEASUREITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
1897 lpmis->CtlType, lpmis->CtlID);
1898 TRACE("itemID=0x%08x itemWidth=0x%08x itemHeight=0x%08x\n",
1899 lpmis->itemID, lpmis->itemWidth, lpmis->itemHeight);
1900 TRACE("itemData=0x%08lx\n", lpmis->itemData);
1902 break;
1903 case WM_WINDOWPOSCHANGED:
1904 if (!enter) break;
1905 case WM_WINDOWPOSCHANGING:
1907 WINDOWPOS *lpwp = (WINDOWPOS *)sp_e->lParam;
1908 TRACE("WINDOWPOS hwnd=0x%04x, after=0x%04x, at (%d,%d) w=%d h=%d, flags=0x%08x\n",
1909 lpwp->hwnd, lpwp->hwndInsertAfter, lpwp->x, lpwp->y,
1910 lpwp->cx, lpwp->cy, lpwp->flags);
1912 break;
1913 case WM_STYLECHANGED:
1914 if (!enter) break;
1915 case WM_STYLECHANGING:
1917 LPSTYLESTRUCT ss = (LPSTYLESTRUCT) sp_e->lParam;
1918 TRACE("STYLESTRUCT: StyleOld=0x%08lx, StyleNew=0x%08lx\n",
1919 ss->styleOld, ss->styleNew);
1921 break;
1922 case WM_NCCALCSIZE:
1924 RECT *rc = (RECT *)sp_e->lParam;
1925 TRACE("Rect (%d,%d)-(%d,%d)\n",
1926 rc->left, rc->top, rc->right, rc->bottom);
1928 break;
1929 case WM_NOTIFY:
1930 if (!enter) break;
1932 NMHDR * pnmh = (NMHDR*) sp_e->lParam;
1933 UINT *q;
1934 const SPY_NOTIFY *p;
1936 p = SPY_Bsearch_Notify (&spnfy_array[0], end_spnfy_array,
1937 pnmh->code);
1938 if (p) {
1939 TRACE("NMHDR hwndFrom=0x%08x idFrom=0x%08x code=%s<0x%08x>, extra=0x%x\n",
1940 pnmh->hwndFrom, pnmh->idFrom, p->name, pnmh->code, p->len);
1941 if (p->len > 0) {
1942 q = (UINT *)(pnmh + 1);
1943 SPY_DumpMem ("NM extra", q, (INT)p->len);
1946 else
1947 TRACE("NMHDR hwndFrom=0x%08x idFrom=0x%08x code=0x%08x\n",
1948 pnmh->hwndFrom, pnmh->idFrom, pnmh->code);
1950 default:
1951 if (sp_e->data_len > 0)
1952 SPY_DumpMem ("MSG lParam", (UINT *)sp_e->lParam, sp_e->data_len);
1953 break;
1957 /***********************************************************************
1958 * SPY_EnterMessage
1960 void SPY_EnterMessage( INT iFlag, HWND hWnd, UINT msg,
1961 WPARAM wParam, LPARAM lParam )
1963 SPY_INSTANCE sp_e;
1964 int indent;
1966 if (!TRACE_ON(message) || SPY_EXCLUDE(msg)) return;
1968 sp_e.msgnum = msg;
1969 sp_e.msg_hwnd = hWnd;
1970 sp_e.lParam = lParam;
1971 sp_e.wParam = wParam;
1972 SPY_GetWndName(&sp_e);
1973 SPY_GetMsgStuff(&sp_e);
1974 indent = get_indent_level();
1976 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
1977 switch(iFlag)
1979 case SPY_DISPATCHMESSAGE16:
1980 TRACE("%*s(%04x) %-16s message [%04x] %s dispatched wp=%04x lp=%08lx\n",
1981 indent, "", WIN_Handle16(hWnd),
1982 debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name, wParam, lParam);
1983 break;
1985 case SPY_DISPATCHMESSAGE:
1986 TRACE("%*s(%08x) %-16s message [%04x] %s dispatched wp=%08x lp=%08lx\n",
1987 indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg,
1988 sp_e.msg_name, wParam, lParam);
1989 break;
1991 case SPY_SENDMESSAGE16:
1992 case SPY_SENDMESSAGE:
1994 char taskName[30];
1995 HTASK16 hTask = GetWindowTask16( WIN_Handle16(hWnd) );
1997 if (hTask == GetCurrentTask()) strcpy( taskName, "self" );
1998 else if (!hTask) strcpy( taskName, "Wine" );
1999 else
2001 sprintf( taskName, "task %04x ???", hTask );
2002 GetModuleName16( hTask, taskName + 10, sizeof(taskName) - 10 );
2005 if (iFlag == SPY_SENDMESSAGE16)
2006 TRACE("%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
2007 indent, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg,
2008 sp_e.msg_name, taskName, wParam, lParam );
2009 else
2010 { TRACE("%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
2011 indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg,
2012 sp_e.msg_name, taskName, wParam, lParam );
2013 SPY_DumpStructure(&sp_e, TRUE);
2016 break;
2018 case SPY_DEFWNDPROC16:
2019 if( SPY_ExcludeDWP ) return;
2020 TRACE("%*s(%04x) DefWindowProc16: %s [%04x] wp=%04x lp=%08lx\n",
2021 indent, "", WIN_Handle16(hWnd), sp_e.msg_name, msg, wParam, lParam );
2022 break;
2024 case SPY_DEFWNDPROC:
2025 if( SPY_ExcludeDWP ) return;
2026 TRACE("%*s(%08x) DefWindowProc32: %s [%04x] wp=%08x lp=%08lx\n",
2027 indent, "", hWnd, sp_e.msg_name,
2028 msg, wParam, lParam );
2029 break;
2031 set_indent_level( indent + SPY_INDENT_UNIT );
2035 /***********************************************************************
2036 * SPY_ExitMessage
2038 void SPY_ExitMessage( INT iFlag, HWND hWnd, UINT msg, LRESULT lReturn,
2039 WPARAM wParam, LPARAM lParam )
2041 SPY_INSTANCE sp_e;
2042 int indent;
2044 if (!TRACE_ON(message) || SPY_EXCLUDE(msg) ||
2045 (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND)) )
2046 return;
2048 sp_e.msgnum = msg;
2049 sp_e.msg_hwnd = hWnd;
2050 sp_e.lParam = lParam;
2051 sp_e.wParam = wParam;
2052 SPY_GetWndName(&sp_e);
2053 SPY_GetMsgStuff(&sp_e);
2055 if ((indent = get_indent_level()))
2057 indent -= SPY_INDENT_UNIT;
2058 set_indent_level( indent );
2061 switch(iFlag)
2063 case SPY_RESULT_DEFWND16:
2064 TRACE(" %*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n",
2065 indent, "", WIN_Handle16(hWnd), sp_e.msg_name, msg, lReturn );
2066 break;
2068 case SPY_RESULT_DEFWND:
2069 TRACE(" %*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n",
2070 indent, "", hWnd, sp_e.msg_name, msg, lReturn );
2071 break;
2073 case SPY_RESULT_OK16:
2074 TRACE(" %*s(%04x) %-16s message [%04x] %s returned %08lx\n",
2075 indent, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg,
2076 sp_e.msg_name, lReturn );
2077 break;
2079 case SPY_RESULT_OK:
2080 TRACE(" %*s(%08x) %-16s message [%04x] %s returned %08lx\n",
2081 indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg,
2082 sp_e.msg_name, lReturn );
2083 SPY_DumpStructure(&sp_e, FALSE);
2084 break;
2086 case SPY_RESULT_INVALIDHWND16:
2087 WARN(" %*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n",
2088 indent, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name );
2089 break;
2091 case SPY_RESULT_INVALIDHWND:
2092 WARN(" %*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n",
2093 indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg,
2094 sp_e.msg_name );
2095 break;
2100 /***********************************************************************
2101 * SPY_Init
2103 int SPY_Init(void)
2105 int i, j;
2106 char buffer[1024];
2107 const SPY_NOTIFY *p;
2108 const USER_MSG *q;
2109 HKEY hkey;
2111 if (!TRACE_ON(message)) return TRUE;
2113 indent_tls_index = TlsAlloc();
2114 buffer[0] = 0;
2115 if(!RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Spy", &hkey))
2117 DWORD type, count = sizeof(buffer);
2118 RegQueryValueExA(hkey, "Include", 0, &type, buffer, &count);
2119 RegCloseKey(hkey);
2121 if (buffer[0] && strcmp( buffer, "INCLUDEALL" ))
2123 TRACE("Include=%s\n", buffer );
2124 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
2125 SPY_Exclude[i] = (MessageTypeNames[i] && !strstr(buffer,MessageTypeNames[i]));
2128 buffer[0] = 0;
2129 if(!RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Spy", &hkey))
2131 DWORD type, count = sizeof(buffer);
2132 RegQueryValueExA(hkey, "Exclude", 0, &type, buffer, &count);
2133 RegCloseKey(hkey);
2135 if (buffer[0])
2137 TRACE("Exclude=%s\n", buffer );
2138 if (!strcmp( buffer, "EXCLUDEALL" ))
2139 for (i = 0; i <= SPY_MAX_MSGNUM; i++) SPY_Exclude[i] = TRUE;
2140 else
2141 for (i = 0; i <= SPY_MAX_MSGNUM; i++)
2142 SPY_Exclude[i] = (MessageTypeNames[i] && strstr(buffer,MessageTypeNames[i]));
2145 SPY_ExcludeDWP = 0;
2146 if(!RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Spy", &hkey))
2148 DWORD type, count = sizeof(buffer);
2149 if(!RegQueryValueExA(hkey, "ExcludeDWP", 0, &type, buffer, &count))
2150 SPY_ExcludeDWP = atoi(buffer);
2151 RegCloseKey(hkey);
2154 /* find last good entry in spy notify array and save addr for b-search */
2155 p = &spnfy_array[0];
2156 j = 0xffffffff;
2157 while (p->name) {
2158 if ((UINT)p->value > (UINT)j) {
2159 ERR("Notify message array out of order\n");
2160 ERR(" between values [%08x] %s and [%08x] %s\n",
2161 j, (p-1)->name, p->value, p->name);
2162 break;
2164 j = p->value;
2165 p++;
2167 p--;
2168 end_spnfy_array = p;
2170 /* find last good entry in each common control message array
2171 * and save addr for b-search.
2173 i = 0;
2174 while (cc_array[i].classname) {
2176 j = 0x0400; /* minimum entry in array */
2177 q = cc_array[i].classmsg;
2178 while(q->name) {
2179 if (q->value <= j) {
2180 ERR("Class message array out of order for class %s\n",
2181 debugstr_w(cc_array[i].classname));
2182 ERR(" between values [%04x] %s and [%04x] %s\n",
2183 j, (q-1)->name, q->value, q->name);
2184 break;
2186 j = q->value;
2187 q++;
2189 q--;
2190 cc_array[i].lastmsg = (USER_MSG *)q;
2192 i++;
2195 return 1;