2 * Message spying routines
4 * Copyright 1994, Bob Amstadt
18 #define SPY_MAX_MSGNUM WM_USER
19 #define SPY_INDENT_UNIT 4 /* 4 spaces */
21 static const char * const MessageTypeNames
[SPY_MAX_MSGNUM
+ 1] =
39 "WM_CLOSE", /* 0x10 */
55 "WM_SETCURSOR", /* 0x20 */
71 "WM_SETFONT", /* 0x30 */
83 "wm_otherwindowcreated",
84 "wm_otherwindowdestroyed",
85 "wm_activateshellwindow",
89 "wm_compacting", NULL
, NULL
,
90 "WM_COMMNOTIFY", NULL
,
91 "WM_WINDOWPOSCHANGING", /* 0x0046 */
92 "WM_WINDOWPOSCHANGED", /* 0x0047 */
95 "WM_CANCELJOURNAL", NULL
, NULL
, NULL
, NULL
,
98 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
99 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
102 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
103 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
106 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
107 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
110 "WM_NCCREATE", /* 0x0081 */
111 "WM_NCDESTROY", /* 0x0082 */
112 "WM_NCCALCSIZE", /* 0x0083 */
113 "WM_NCHITTEST", /* 0x0084 */
114 "WM_NCPAINT", /* 0x0085 */
115 "WM_NCACTIVATE", /* 0x0086 */
116 "WM_GETDLGCODE", /* 0x0087 */
118 "wm_synctask", NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
121 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
122 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
125 "WM_NCMOUSEMOVE", /* 0x00A0 */
126 "WM_NCLBUTTONDOWN", /* 0x00A1 */
127 "WM_NCLBUTTONUP", /* 0x00A2 */
128 "WM_NCLBUTTONDBLCLK", /* 0x00A3 */
129 "WM_NCRBUTTONDOWN", /* 0x00A4 */
130 "WM_NCRBUTTONUP", /* 0x00A5 */
131 "WM_NCRBUTTONDBLCLK", /* 0x00A6 */
132 "WM_NCMBUTTONDOWN", /* 0x00A7 */
133 "WM_NCMBUTTONUP", /* 0x00A8 */
134 "WM_NCMBUTTONDBLCLK", /* 0x00A9 */
135 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
137 /* 0x00B0 - Win32 Edit controls */
138 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
139 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
142 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
143 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
146 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
147 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
149 /* 0x00E0 - Win32 Scrollbars */
150 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
151 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
153 /* 0x00F0 - Win32 Buttons */
154 "BM_GETCHECK32", /* 0x00f0 */
155 "BM_SETCHECK32", /* 0x00f1 */
156 "BM_GETSTATE32", /* 0x00f2 */
157 "BM_SETSTATE32", /* 0x00f3 */
158 "BM_SETSTYLE32", /* 0x00f4 */
159 "BM_CLICK32", /* 0x00f5 */
160 "BM_GETIMAGE32", /* 0x00f6 */
161 "BM_SETIMAGE32", /* 0x00f7 */
162 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
164 "WM_KEYDOWN", /* 0x0100 */
165 "WM_KEYUP", /* 0x0101 */
166 "WM_CHAR", /* 0x0102 */
167 "WM_DEADCHAR", /* 0x0103 */
168 "WM_SYSKEYDOWN", /* 0x0104 */
169 "WM_SYSKEYUP", /* 0x0105 */
170 "WM_SYSCHAR", /* 0x0106 */
171 "WM_SYSDEADCHAR", /* 0x0107 */
172 "WM_KEYLAST", /* 0x0108 */
176 "WM_INTERIM", NULL
, NULL
, NULL
,
178 "WM_INITDIALOG", /* 0x0110 */
179 "WM_COMMAND", /* 0x0111 */
180 "WM_SYSCOMMAND", /* 0x0112 */
181 "WM_TIMER", /* 0x0113 */
182 "WM_HSCROLL", /* 0x0114 */
183 "WM_VSCROLL", /* 0x0115 */
184 "WM_INITMENU", /* 0x0116 */
185 "WM_INITMENUPOPUP", /* 0x0117 */
186 "WM_SYSTIMER", /* 0x0118 */
187 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
188 "WM_MENUSELECT", /* 0x011f */
190 "WM_MENUCHAR", /* 0x0120 */
191 "WM_ENTERIDLE", /* 0x0121 */
192 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
193 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
197 "wm_lbtrackpoint", /* 0x0131 */
198 "WM_CTLCOLORMSGBOX", /* 0x0132 */
199 "WM_CTLCOLOREDIT", /* 0x0133 */
200 "WM_CTLCOLORLISTBOX", /* 0x0134 */
201 "WM_CTLCOLORBTN", /* 0x0135 */
202 "WM_CTLCOLORDLG", /* 0x0136 */
203 "WM_CTLCOLORSCROLLBAR", /* 0x0137 */
204 "WM_CTLCOLORSTATIC", /* 0x0138 */
205 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
207 /* 0x0140 - Win32 Comboboxes */
208 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
209 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
212 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
213 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
216 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
217 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
219 /* 0x0170 - Win32 Static controls */
220 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
221 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
223 /* 0x0180 - Win32 Listboxes */
224 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
225 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
228 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
229 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
232 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
233 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
236 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
237 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
240 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
241 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
244 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
245 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
248 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
249 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
252 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
253 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
255 "WM_MOUSEMOVE", /* 0x0200 */
256 "WM_LBUTTONDOWN", /* 0x0201 */
257 "WM_LBUTTONUP", /* 0x0202 */
258 "WM_LBUTTONDBLCLK", /* 0x0203 */
259 "WM_RBUTTONDOWN", /* 0x0204 */
260 "WM_RBUTTONUP", /* 0x0205 */
261 "WM_RBUTTONDBLCLK", /* 0x0206 */
262 "WM_MBUTTONDOWN", /* 0x0207 */
263 "WM_MBUTTONUP", /* 0x0208 */
264 "WM_MBUTTONDBLCLK", /* 0x0209 */
265 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
267 "WM_PARENTNOTIFY", /* 0x0210 */
268 "WM_ENTERMENULOOP", /* 0x0211 */
269 "WM_EXITMENULOOP", /* 0x0212 */
270 "wm_nextmenu", /* 0x0213 */
271 NULL
, NULL
, NULL
, NULL
,
272 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
274 "WM_MDICREATE", /* 0x0220 */
275 "WM_MDIDESTROY", /* 0x0221 */
276 "WM_MDIACTIVATE", /* 0x0222 */
277 "WM_MDIRESTORE", /* 0x0223 */
278 "WM_MDINEXT", /* 0x0224 */
279 "WM_MDIMAXIMIZE", /* 0x0225 */
280 "WM_MDITILE", /* 0x0226 */
281 "WM_MDICASCADE", /* 0x0227 */
282 "WM_MDIICONARRANGE", /* 0x0228 */
283 "WM_MDIGETACTIVE", /* 0x0229 */
286 "wm_querydropobject",
293 "WM_MDISETMENU", /* 0x0230 */
294 "WM_ENTERSIZEMOVE", /* 0x0231 */
295 "WM_EXITSIZEMOVE", /* 0x0232 */
296 "WM_DROPFILES", /* 0x0233 */
297 "WM_MDIREFRESHMENU", NULL
, NULL
, NULL
,
299 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
302 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
303 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
306 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
307 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
310 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
311 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
312 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
313 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
316 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
317 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
318 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
319 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
321 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
322 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
323 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
324 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
327 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
328 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
329 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
330 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
332 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
333 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
334 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
335 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
337 "WM_CUT", /* 0x0300 */
343 "WM_RENDERALLFORMATS",
344 "WM_DESTROYCLIPBOARD",
347 "WM_VSCROLLCLIPBOARD",
349 "WM_ASKCBFORMATNAME",
351 "WM_HSCROLLCLIPBOARD",
352 "WM_QUERYNEWPALETTE", /* 0x030f*/
354 "WM_PALETTEISCHANGING",
356 "WM_HOTKEY", /* 0x0312 */
357 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
358 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
360 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
361 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
362 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
363 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
366 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
367 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
368 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
369 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
371 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
372 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
373 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
374 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
384 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
387 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
388 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
391 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
392 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
393 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
394 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
397 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
398 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
399 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
400 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
403 "WM_DDE_INITIATE", /* 0x3E0 */
404 "WM_DDE_TERMINATE", /* 0x3E1 */
405 "WM_DDE_ADVISE", /* 0x3E2 */
406 "WM_DDE_UNADVISE", /* 0x3E3 */
407 "WM_DDE_ACK", /* 0x3E4 */
408 "WM_DDE_DATA", /* 0x3E5 */
409 "WM_DDE_REQUEST", /* 0x3E6 */
410 "WM_DDE_POKE", /* 0x3E7 */
411 "WM_DDE_EXECUTE", /* 0x3E8 */
412 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
416 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
417 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
423 static BOOL SPY_Exclude
[SPY_MAX_MSGNUM
+1];
424 static int SPY_IndentLevel
= 0;
426 #define SPY_EXCLUDE(msg) \
427 (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)])
429 /***********************************************************************
432 static const char *SPY_GetMsgName( UINT msg
)
434 static char buffer
[20];
436 if (msg
<= SPY_MAX_MSGNUM
)
438 if (!MessageTypeNames
[msg
]) return "???";
439 return MessageTypeNames
[msg
];
441 sprintf( buffer
, "WM_USER+%04x", msg
- WM_USER
);
446 /***********************************************************************
449 void SPY_EnterMessage( INT32 iFlag
, HWND32 hWnd
, UINT32 msg
,
450 WPARAM32 wParam
, LPARAM lParam
)
452 if (!debugging_message
|| SPY_EXCLUDE(msg
)) return;
454 /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */
457 case SPY_DISPATCHMESSAGE16
:
458 dprintf_message(stddeb
,"%*s(%04x) message [%04x] %s dispatched wp=%04x lp=%08lx\n",
459 SPY_IndentLevel
, "", hWnd
, msg
, SPY_GetMsgName( msg
),
463 case SPY_DISPATCHMESSAGE32
:
464 dprintf_message(stddeb
,"%*s(%08x) message [%04x] %s dispatched wp=%08x lp=%08lx\n",
465 SPY_IndentLevel
, "", hWnd
, msg
, SPY_GetMsgName( msg
),
469 case SPY_SENDMESSAGE16
:
470 case SPY_SENDMESSAGE32
:
473 HTASK hTask
= GetWindowTask16(hWnd
);
474 if (hTask
== GetCurrentTask()) strcpy( taskName
, "self" );
475 else if (!hTask
) strcpy( taskName
, "Wine" );
476 else sprintf( taskName
, "task %04x %s",
477 hTask
, MODULE_GetModuleName( GetExePtr(hTask
) ) );
479 if (iFlag
== SPY_SENDMESSAGE16
)
480 dprintf_message(stddeb
,"%*s(%04x) message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
481 SPY_IndentLevel
, "", hWnd
, msg
,
482 SPY_GetMsgName( msg
), taskName
, wParam
,
485 dprintf_message(stddeb
,"%*s(%08x) message [%04x] %s sent from %s wp=%08x lp=%08lx\n",
486 SPY_IndentLevel
, "", hWnd
, msg
,
487 SPY_GetMsgName( msg
), taskName
, wParam
,
492 case SPY_DEFWNDPROC16
:
493 dprintf_message(stddeb
, "%*s(%04x) DefWindowProc: %s [%04x] wp=%04x lp=%08lx\n",
494 SPY_IndentLevel
, "", hWnd
, SPY_GetMsgName( msg
),
495 msg
, wParam
, lParam
);
498 case SPY_DEFWNDPROC32
:
499 dprintf_message(stddeb
, "%*s(%08x) DefWindowProc: %s [%04x] wp=%08x lp=%08lx\n",
500 SPY_IndentLevel
, "", hWnd
, SPY_GetMsgName( msg
),
501 msg
, wParam
, lParam
);
504 SPY_IndentLevel
+= SPY_INDENT_UNIT
;
508 /***********************************************************************
511 void SPY_ExitMessage( INT32 iFlag
, HWND32 hWnd
, UINT32 msg
, LRESULT lReturn
)
513 if (!debugging_message
|| SPY_EXCLUDE(msg
)) return;
514 if (SPY_IndentLevel
) SPY_IndentLevel
-= SPY_INDENT_UNIT
;
518 case SPY_RESULT_OK16
:
519 dprintf_message(stddeb
,"%*s(%04x) message [%04x] %s returned %08lx\n",
520 SPY_IndentLevel
, "", hWnd
, msg
,
521 SPY_GetMsgName( msg
), lReturn
);
523 case SPY_RESULT_OK32
:
524 dprintf_message(stddeb
,"%*s(%08x) message [%04x] %s returned %08lx\n",
525 SPY_IndentLevel
, "", hWnd
, msg
,
526 SPY_GetMsgName( msg
), lReturn
);
528 case SPY_RESULT_INVALIDHWND16
:
529 dprintf_message(stddeb
,"%*s(%04x) message [%04x] %s HAS INVALID HWND\n",
530 SPY_IndentLevel
, "", hWnd
, msg
,
531 SPY_GetMsgName( msg
) );
533 case SPY_RESULT_INVALIDHWND32
:
534 dprintf_message(stddeb
,"%*s(%08x) message [%04x] %s HAS INVALID HWND\n",
535 SPY_IndentLevel
, "", hWnd
, msg
,
536 SPY_GetMsgName( msg
) );
542 /***********************************************************************
550 PROFILE_GetWineIniString( "Spy", "Include", "", buffer
, sizeof(buffer
) );
551 if (buffer
[0] && strcmp( buffer
, "INCLUDEALL" ))
553 dprintf_message( stddeb
, "SpyInit: Include=%s\n", buffer
);
554 for (i
= 0; i
<= SPY_MAX_MSGNUM
; i
++)
555 SPY_Exclude
[i
] = (MessageTypeNames
[i
] && !strstr(buffer
,MessageTypeNames
[i
]));
558 PROFILE_GetWineIniString( "Spy", "Exclude", "", buffer
, sizeof(buffer
) );
561 dprintf_message( stddeb
, "SpyInit: Exclude=%s\n", buffer
);
562 if (!strcmp( buffer
, "EXCLUDEALL" ))
563 for (i
= 0; i
<= SPY_MAX_MSGNUM
; i
++) SPY_Exclude
[i
] = TRUE
;
565 for (i
= 0; i
<= SPY_MAX_MSGNUM
; i
++)
566 SPY_Exclude
[i
] = (MessageTypeNames
[i
] && strstr(buffer
,MessageTypeNames
[i
]));