3 * Copyright 1994, Bob Amstadt
10 #include <X11/Xresource.h>
18 #define SPY_MAX_MSGNUM WM_USER
19 #define SPY_MAX_INDENTLEVEL 64
21 const char *MessageTypeNames
[SPY_MAX_MSGNUM
+ 1] =
39 "WM_CLOSE", /* 0x10 */
55 "WM_SETCURSOR", /* 0x20 */
71 "WM_SETFONT", /* 0x30 */
82 "WM_OTHERWINDOWCREATED",
83 "WM_OTHERWINDOWDESTROYED",
84 "WM_ACTIVATESHELLWINDOW", NULL
,
87 "WM_COMPACTING", NULL
, NULL
,
88 "WM_COMMNOTIFY", NULL
,
89 "WM_WINDOWPOSCHANGING", /* 0x0046 */
90 "WM_WINDOWPOSCHANGED", /* 0x0047 */
91 "WM_POWER", NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
94 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
95 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
98 NULL
, 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 "WM_NCCREATE", /* 0x0081 */
107 "WM_NCDESTROY", /* 0x0082 */
108 "WM_NCCALCSIZE", /* 0x0083 */
109 "WM_NCHITTEST", /* 0x0084 */
110 "WM_NCPAINT", /* 0x0085 */
111 "WM_NCACTIVATE", /* 0x0086 */
112 "WM_GETDLGCODE", /* 0x0087 */
114 "WM_SYNCTASK", NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
117 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
118 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
121 "WM_NCMOUSEMOVE", /* 0x00A0 */
122 "WM_NCLBUTTONDOWN", /* 0x00A1 */
123 "WM_NCLBUTTONUP", /* 0x00A2 */
124 "WM_NCLBUTTONDBLCLK", /* 0x00A3 */
125 "WM_NCRBUTTONDOWN", /* 0x00A4 */
126 "WM_NCRBUTTONUP", /* 0x00A5 */
127 "WM_NCRBUTTONDBLCLK", /* 0x00A6 */
128 "WM_NCMBUTTONDOWN", /* 0x00A7 */
129 "WM_NCMBUTTONUP", /* 0x00A8 */
130 "WM_NCMBUTTONDBLCLK", /* 0x00A9 */
131 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
134 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
135 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
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
,
150 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
151 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
153 "WM_KEYDOWN", /* 0x0100 */
154 "WM_KEYUP", /* 0x0101 */
155 "WM_CHAR", /* 0x0102 */
156 "WM_DEADCHAR", /* 0x0103 */
157 "WM_SYSKEYDOWN", /* 0x0104 */
158 "WM_SYSKEYUP", /* 0x0105 */
159 "WM_SYSCHAR", /* 0x0106 */
160 "WM_SYSDEADCHAR", /* 0x0107 */
161 "WM_KEYLAST", /* 0x0108 */
165 "WM_INTERIM", NULL
, NULL
, NULL
,
167 "WM_INITDIALOG", /* 0x0110 */
168 "WM_COMMAND", /* 0x0111 */
169 "WM_SYSCOMMAND", /* 0x0112 */
170 "WM_TIMER", /* 0x0113 */
171 "WM_HSCROLL", /* 0x0114 */
172 "WM_VSCROLL", /* 0x0115 */
173 "WM_INITMENU", /* 0x0116 */
174 "WM_INITMENUPOPUP", /* 0x0117 */
175 "WM_SYSTIMER", /* 0x0118 */
176 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
177 "WM_MENUSELECT", /* 0x011f */
179 "WM_MENUCHAR", /* 0x0120 */
180 "WM_ENTERIDLE", /* 0x0121 */
181 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
182 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
185 NULL
, "wm_lbtrackpoint",
186 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
187 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
190 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
191 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
194 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
195 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
198 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
199 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
202 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
203 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
206 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
207 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
210 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
211 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
214 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
215 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
218 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
219 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
222 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
223 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
226 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
227 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
230 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
231 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
234 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
235 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
237 "WM_MOUSEMOVE", /* 0x0200 */
238 "WM_LBUTTONDOWN", /* 0x0201 */
239 "WM_LBUTTONUP", /* 0x0202 */
240 "WM_LBUTTONDBLCLK", /* 0x0203 */
241 "WM_RBUTTONDOWN", /* 0x0204 */
242 "WM_RBUTTONUP", /* 0x0205 */
243 "WM_RBUTTONDBLCLK", /* 0x0206 */
244 "WM_MBUTTONDOWN", /* 0x0207 */
245 "WM_MBUTTONUP", /* 0x0208 */
246 "WM_MBUTTONDBLCLK", /* 0x0209 */
247 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
249 "WM_PARENTNOTIFY", /* 0x0210 */
250 "WM_ENTERMENULOOP", /* 0x0211 */
251 "WM_EXITMENULOOP", /* 0x0212 */
252 "WM_NEXTMENU", /* 0x0213 */
253 NULL
, NULL
, NULL
, NULL
,
254 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
256 "WM_MDICREATE", /* 0x0220 */
257 "WM_MDIDESTROY", /* 0x0221 */
258 "WM_MDIACTIVATE", /* 0x0222 */
259 "WM_MDIRESTORE", /* 0x0223 */
260 "WM_MDINEXT", /* 0x0224 */
261 "WM_MDIMAXIMIZE", /* 0x0225 */
262 "WM_MDITILE", /* 0x0226 */
263 "WM_MDICASCADE", /* 0x0227 */
264 "WM_MDIICONARRANGE", /* 0x0228 */
265 "WM_MDIGETACTIVE", /* 0x0229 */
268 "wm_querydropobject",
275 "WM_MDISETMENU", /* 0x0230 */
276 "WM_ENTERSIZEMOVE", /* 0x0231 */
277 "WM_EXITSIZEMOVE", /* 0x0232 */
278 "WM_DROPFILES", /* 0x0233 */
279 NULL
, NULL
, NULL
, NULL
,
281 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
284 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
285 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
288 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
289 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
292 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
293 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
294 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
295 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
298 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
299 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
300 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
301 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
303 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
304 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
305 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
306 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
309 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
,
314 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
315 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
,
319 "WM_CUT", /* 0x0300 */
325 "WM_RENDERALLFORMATS",
326 "WM_DESTROYCLIPBOARD",
329 "WM_VSCROLLCLIPBOARD",
331 "WM_ASKCBFORMATNAME",
333 "WM_HSCROLLCLIPBOARD",
334 "WM_QUERYNEWPALETTE", /* 0x030f*/
336 "WM_PALETTEISCHANGING",
337 "WM_PALETTECHANGED", /* 0x0311 */
338 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
339 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
341 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
342 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
343 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
344 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
347 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
348 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
349 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
350 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
352 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
353 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
354 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
355 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
358 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
359 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
362 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
363 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
,
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
,
375 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
378 "WM_DDE_INITIATE", /* 0x3E0 */
379 "WM_DDE_TERMINATE", /* 0x3E1 */
380 "WM_DDE_ADVISE", /* 0x3E2 */
381 "WM_DDE_UNADVISE", /* 0x3E3 */
382 "WM_DDE_ACK", /* 0x3E4 */
383 "WM_DDE_DATA", /* 0x3E5 */
384 "WM_DDE_REQUEST", /* 0x3E6 */
385 "WM_DDE_POKE", /* 0x3E7 */
386 "WM_DDE_EXECUTE", /* 0x3E8 */
387 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
,
397 static BOOL SpyFilters
[SPY_MAX_MSGNUM
+1];
398 static BOOL SpyIncludes
[SPY_MAX_MSGNUM
+1];
400 static int iSpyMessageIndentLevel
= 0;
401 static char lpstrSpyMessageIndent
[SPY_MAX_INDENTLEVEL
];
402 static char *lpstrSpyMessageFromWine
= "Wine";
403 static char lpstrSpyMessageFromTask
[10];
404 static char *lpstrSpyMessageFromSelf
= "self";
405 static char *lpstrSpyMessageFrom
= NULL
;
408 /**********************************************************************
411 void EnterSpyMessage(int iFlag
, HWND hWnd
, WORD msg
, WORD wParam
, LONG lParam
)
413 HTASK hTask
= GetWindowTask(hWnd
);
414 WORD wCheckMsg
= (msg
> WM_USER
)? WM_USER
: msg
;
416 if( !SpyIncludes
[wCheckMsg
] || SpyFilters
[wCheckMsg
]) return;
418 /* each SPY_SENDMESSAGE must be complemented by call to ExitSpyMessage */
421 case SPY_DISPATCHMESSAGE
:
424 if(MessageTypeNames
[msg
])
425 dprintf_message(stddeb
,"("NPFMT
") message [%04x] %s dispatched wp=%04x lp=%08lx\n",
426 hWnd
, msg
, MessageTypeNames
[msg
], wParam
, lParam
);
428 dprintf_message(stddeb
,"("NPFMT
") message [%04x] dispatched wp=%04x lp=%08lx\n",
429 hWnd
, msg
, wParam
, lParam
);
432 dprintf_message(stddeb
,"("NPFMT
") message [%04x] WM_USER+%04d dispatched wp=%04x lp=%08lx\n",
433 hWnd
, msg
, msg
-WM_USER
,wParam
,lParam
);
435 case SPY_SENDMESSAGE
:
436 if(hTask
== GetCurrentTask())
437 lpstrSpyMessageFrom
= lpstrSpyMessageFromSelf
;
438 else if(hTask
== NULL
)
439 lpstrSpyMessageFrom
= lpstrSpyMessageFromWine
;
442 sprintf(lpstrSpyMessageFromTask
, "task "NPFMT
, hTask
);
443 lpstrSpyMessageFrom
= lpstrSpyMessageFromTask
;
448 if(MessageTypeNames
[msg
])
449 dprintf_message(stddeb
,"%s("NPFMT
") message [%04x] %s sent from %s wp=%04x lp=%08lx\n",
450 lpstrSpyMessageIndent
,
451 hWnd
, msg
, MessageTypeNames
[msg
],
455 dprintf_message(stddeb
,"%s("NPFMT
") message [%04x] sent from %s wp=%04x lp=%08lx\n",
456 lpstrSpyMessageIndent
,
462 dprintf_message(stddeb
,"%s("NPFMT
") message [%04x] WM_USER+%04x sent from %s wp=%04x lp=%08lx\n",
463 lpstrSpyMessageIndent
,
464 hWnd
, msg
, msg
-WM_USER
,
468 if(SPY_MAX_INDENTLEVEL
> iSpyMessageIndentLevel
)
470 iSpyMessageIndentLevel
++;
471 lpstrSpyMessageIndent
[iSpyMessageIndentLevel
]='\0';
472 lpstrSpyMessageIndent
[iSpyMessageIndentLevel
-1] ='\t';
477 if(MessageTypeNames
[msg
])
478 dprintf_message(stddeb
, "%s("NPFMT
") DefWindowProc: %s [%04x] wp=%04x lp=%08lx\n",
479 lpstrSpyMessageIndent
,
480 hWnd
, MessageTypeNames
[msg
], msg
, wParam
, lParam
);
482 dprintf_message(stddeb
, "%s("NPFMT
") DefWindowProc: [%04x] wp=%04x lp=%08lx\n",
483 lpstrSpyMessageIndent
,
484 hWnd
, msg
, wParam
, lParam
);
486 dprintf_message(stddeb
, "%s("NPFMT
") DefWindowProc: WM_USER+%d [%04x] wp=%04x lp=%08lx\n",
487 lpstrSpyMessageIndent
,
488 hWnd
, msg
- WM_USER
, msg
, wParam
, lParam
);
495 /**********************************************************************
498 void ExitSpyMessage(int iFlag
, HWND hWnd
, WORD msg
, LONG lReturn
)
500 WORD wCheckMsg
= (msg
> WM_USER
)? WM_USER
: msg
;
502 if( !SpyIncludes
[wCheckMsg
] || SpyFilters
[wCheckMsg
]) return;
504 iSpyMessageIndentLevel
--;
505 lpstrSpyMessageIndent
[iSpyMessageIndentLevel
]='\0';
509 case SPY_RESULT_INVALIDHWND
:
510 dprintf_message(stddeb
,"%s("NPFMT
") message [%04x] HAS INVALID HWND\n",
511 lpstrSpyMessageIndent
, hWnd
, msg
);
514 dprintf_message(stddeb
,"%s("NPFMT
") message [%04x] returned %08lx\n",
515 lpstrSpyMessageIndent
, hWnd
, msg
, lReturn
);
521 /**********************************************************************
527 char lpstrBuffer
[512];
529 for(i
=0; i
<= SPY_MAX_MSGNUM
; i
++) SpyFilters
[i
] = SpyIncludes
[i
] = FALSE
;
531 PROFILE_GetWineIniString( "spy", "Exclude", "",
532 lpstrBuffer
, sizeof(lpstrBuffer
) );
533 dprintf_message(stddeb
,"SpyInit: Exclude=%s\n",lpstrBuffer
);
534 if( *lpstrBuffer
!= 0 )
535 if(strstr(lpstrBuffer
,"EXCLUDEALL"))
536 for(i
=0; i
<= SPY_MAX_MSGNUM
; i
++) SpyFilters
[i
] = TRUE
;
538 for(i
=0; i
<= SPY_MAX_MSGNUM
; i
++)
539 if(MessageTypeNames
[i
])
540 if(strstr(lpstrBuffer
,MessageTypeNames
[i
])) SpyFilters
[i
] = TRUE
;
542 PROFILE_GetWineIniString( "spy", "Include", "INCLUDEALL",
543 lpstrBuffer
, sizeof(lpstrBuffer
) );
544 dprintf_message(stddeb
,"SpyInit: Include=%s\n",lpstrBuffer
);
545 if( *lpstrBuffer
!= 0 )
546 if(strstr(lpstrBuffer
,"INCLUDEALL"))
547 for(i
=0; i
<= SPY_MAX_MSGNUM
; i
++) SpyIncludes
[i
] = TRUE
;
549 for(i
=0; i
<= SPY_MAX_MSGNUM
; i
++)
550 if(MessageTypeNames
[i
])
551 if(strstr(lpstrBuffer
,MessageTypeNames
[i
])) SpyIncludes
[i
] = TRUE
;