The main purpose of Spy++ is to log messages that are being passed around in Windows.
Parts adapted from Pat Brenner's Spy++ Internals posting on the Visual C++ Team Blog, and the MSDN documentation on Spy++.
Spy++ (aka SpyXX, as the main binary is SpyXX.EXE) shows you a parented hierarchy of all Windows in your system.
For each Window, you can see the Windows messages handled by it, and the Windows properties associated with it.
Spy++ ships with the retail (not express!) versions of Visual Studio.
It is a native Win32 utility that also runs on x64 of Windows.
Spy++ usually is installed in %ProgramFiles%Microsoft Visual Studio ##.#\Common#\Tools\
(where the # depend on your Visual Studio version). On x64 systems it will be using %ProgramFiles(x86)%
as base.
Spy++ is based on these files:
- spyxx.exe - Microsoft Spy++ Toolbar
- spyxxhk.dll - Microsoft Spy++ Hook
- spyxxui.dll - Microsoft Spy++ Resources
- spyxx.chm - help file for spyxx.exe
Note that on various systems, the binary DLL version numbers and textual version numbers do not always match (in Visual Studio 2010, the binary versions indicate 10, but the text versions in the DLL indicate 9).
Pat Brenner wrote large portions of Spy++. Though he is not the original author, he owned it from 1993 to 2003, and owns it since 2007.
From Pat's blog post:
Spy++ is made to be an observer (and not a modifier) of the system around it. [...] the main purpose of Spy++ is to log messages that are being passed around in Windows. Spy++ accomplishes this by the use of three global message hooks: a WH_GETMESSAGE hook, which hooks a message posted to a window (via PostMessage); a WH_CALLWNDPROC hook, which hooks a message sent to a window (via SendMessage); and a WH_CALLWNDPROCRET hook, which hooks the return of a message sent to a window (via SendMessage).
--jeroen