WinInspector - Real-Time Windows Inspection Tool for Delphi Developers
Quick Answer: WinInspector is a free, portable Windows inspection tool that shows real-time information about any window under your mouse cursor. It identifies VCL components, enumerates DLLs, detects Delphi versions, and provides a color picker. Press Ctrl+F12 to freeze inspection. No installation required - just run the executable.
What is WinInspector?
WinInspector is a free, open-source Windows inspection utility designed for developers who need to analyze windows, processes, and UI components in real-time. Originally developed as TDWinInfo in 2001, WinInspector is a complete rewrite that maintains the original spirit while adding modern capabilities.
WinInspector is particularly valuable for Delphi and C++Builder developers because it can:
- Identify VCL component types and extract their properties cross-process
- Detect which Delphi version built any application by analyzing loaded BPL packages
- Show the complete window hierarchy from any control to the root window
- Enumerate all loaded DLLs with real file paths (bypassing WOW64 redirection)
Key Features
Window Inspection
- Real-time updates - Information refreshes every 500ms as you move the mouse
- Complete window details - Handle, class name, title, position, size, visibility
- Window styles - Both standard and extended styles with human-readable flags
- Process information - PID, TID, executable name and path
- Responsiveness check - Detects hung/unresponsive windows
- Window hierarchy - Full parent chain from any control to root window
VCL Component Inspector
- Component identification - Recognizes TForm, TButton, TEdit, TMemo, TPanel, TListBox, TComboBox, TCheckBox, TRadioButton, and more
- Cross-process property extraction - Uses Windows messages to read properties from external applications
- Properties detected:
- Caption/Text content
- Enabled/Disabled state
- ReadOnly, MultiLine, PasswordChar (for edit controls)
- Checked/Unchecked/Indeterminate state (for checkboxes)
- Items.Count and ItemIndex (for lists and combos)
- Parent container information
DLL/Library Inspector
- Complete DLL enumeration - Lists all loaded modules with full paths
- WOW64 bypass - Shows real paths for 32-bit processes on 64-bit Windows
- BPL package detection - Identifies Delphi runtime packages
- Delphi version detection - Automatic version identification from BPL naming patterns
- Version information - File version for all DLLs when available
- Lazy loading - DLL information only loaded when tab is active (performance optimization)
Usability Features
- Global hotkey (Ctrl+F12) - Freeze/unfreeze inspection from anywhere
- Auto-pause - Automatically pauses when mouse is over WinInspector window
- Color picker - Real-time pixel color in HEX and RGB format
- Inspection history - Tracks last 50 inspected windows with timestamps
- Copy to clipboard - One-click export of window info or DLL lists
- Always on top - Window stays visible while inspecting other applications
Supported Delphi Versions (Detection)
WinInspector can detect applications built with:
| Version | Package Pattern | Year |
|---|---|---|
| Delphi 13 Florence | *370.bpl |
2025 |
| Delphi 12 Athens | *290.bpl |
2023 |
| Delphi 11 Alexandria | *280.bpl |
2021 |
| Delphi 10.4 Sydney | *270.bpl |
2020 |
| Delphi 10.3 Rio | *260.bpl |
2018 |
| Delphi 10.2 Tokyo | *250.bpl |
2017 |
| Delphi 10.1 Berlin | *240.bpl |
2016 |
| Delphi 10 Seattle | *230.bpl |
2015 |
| Delphi XE8 | *220.bpl |
2015 |
| Delphi XE7 | *210.bpl |
2014 |
| Delphi XE6 | *200.bpl |
2014 |
| Delphi XE5 | *190.bpl |
2013 |
| Delphi XE4 | *180.bpl |
2013 |
| Delphi XE3 | *170.bpl |
2012 |
| Delphi XE2 | *160.bpl |
2011 |
Use Cases
For Delphi/C++Builder Developers
- UI debugging - Inspect window properties, styles, and hierarchy
- Component validation - Verify VCL component behavior in production
- Cross-process inspection - Analyze components in external applications
For System Administrators
- Deployment troubleshooting - Identify missing DLLs and version mismatches
- DLL hell debugging - Find conflicting runtime library versions
- Application analysis - Understand application dependencies
For QA Engineers
- State verification - Confirm component states during testing
- Automation support - Get window handles and class names for test scripts
- Bug documentation - Capture detailed window information for bug reports
For Competitive Analysis
- Technology identification - Discover which Delphi version competitors use
- Architecture insights - Analyze loaded packages and dependencies
How It Works
WinInspector uses pure Windows API without any code injection or hooks:
Window Information
GetCursorPos() → WindowFromPoint() → GetClassName() / GetWindowText()
GetWindowLongPtr(GWL_STYLE) → GetWindowRect() → GetWindowThreadProcessId()
VCL Component Detection
1. Check class name pattern (starts with 'T', contains 'Form', 'Button', etc.)
2. Use SendMessage() with control-specific messages:
- BM_GETCHECK for checkboxes/radios
- LB_GETCOUNT / LB_GETCURSEL for listboxes
- CB_GETCOUNT / CB_GETCURSEL for comboboxes
- ES_READONLY / ES_MULTILINE for edit controls
DLL Enumeration
CreateToolhelp32Snapshot(TH32CS_SNAPMODULE) → Module32First/Next()
GetModuleFileNameEx() → GetFileVersionInfo() → VerQueryValue()
Installation
Option 1: Download Release
- Go to GitHub Releases
- Download
WinInspector.exe - Run - no installation required
Option 2: Build from Source
- Clone the repository:
git clone https://github.com/danieleteti/wininspector - Open
WinInspector.dprojin Delphi IDE - Build (Ctrl+F9) or Run (F9)
- Executable is output to
bin/WinInspector.exe
System Requirements
- Operating System: Windows 7/8/10/11 (32-bit and 64-bit)
- No dependencies: Pure Windows API, no runtime libraries required
- Portable: Single executable, no installation needed
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
| Ctrl+F12 | Freeze/Unfreeze inspection (global hotkey) |
| Alt+F12 | Alternative freeze hotkey (if Ctrl+F12 unavailable) |
| Pause | Alternative freeze hotkey (if others unavailable) |
Screenshots
Window Information Tab
Shows real-time details about the window under cursor:
- Mouse position
- Window handle, class, title
- Position and size
- Process information
- Window styles
- Complete parent hierarchy
- VCL component properties (if applicable)
DLL/Libraries Tab
Lists all loaded modules:
- Delphi/C++Builder packages (BPLs) with version detection
- Standard DLLs with file versions
- Full file paths (real paths, not WOW64 redirected)
History Tab
Tracks inspection history:
- Timestamp for each entry
- Window class and title
- Process name and PID
- Handle, position, size
- Pixel color at cursor
The TDWinInfo Legacy
WinInspector is the spiritual successor to TDWinInfo, a Windows debugging tool originally developed by Daniele Teti in 2001. TDWinInfo became known in the Delphi community for helping developers analyze application behaviors and “unmask” Delphi-built applications through window class name analysis.
After more than 20 years, WinInspector brings the same philosophy to modern Windows development:
“A simple, direct tool that solves real problems without frills”
What’s new compared to TDWinInfo:
- VCL component property extraction
- Delphi version detection from BPL packages
- Complete window hierarchy visualization
- Global hotkey freeze functionality
- Color picker
- Inspection history
- Modern UI with tabbed interface
Related Tools
| Tool | Description | Use Case |
|---|---|---|
| Spy++ | Microsoft’s window inspector | General Windows debugging |
| WinSpy++ | Open-source Spy++ alternative | Window hierarchy analysis |
| Process Explorer | Sysinternals process tool | Process and DLL analysis |
| WinInspector | Delphi-focused inspector | VCL component inspection, Delphi version detection |
WinInspector is specifically designed for Delphi developers and provides capabilities that generic tools like Spy++ don’t offer, such as VCL component identification and Delphi version detection.
FAQ: Frequently Asked Questions
What is WinInspector used for?
WinInspector is a real-time Windows inspection tool for developers. It shows detailed information about any window under your mouse cursor, including window properties, styles, process info, VCL component properties, and loaded DLLs. It’s particularly useful for Delphi developers debugging UI issues or analyzing external applications.
How do I identify which Delphi version built an application?
Open WinInspector, move your mouse over the target application, and switch to the “DLL/Libraries” tab. WinInspector will list all loaded BPL packages and show the detected Delphi version (e.g., “Delphi 11 Alexandria” for packages like rtl280.bpl).
Can WinInspector inspect VCL components in other applications?
Yes! WinInspector uses Windows API messages to extract VCL component properties from any running Delphi application. It can detect component types, read Caption/Text, check Enabled state, and more - all without code injection.
What is the difference between WinInspector and Spy++?
Spy++ is a general-purpose Windows inspection tool from Microsoft. WinInspector is specifically designed for Delphi developers and offers:
- VCL component type identification
- Cross-process property extraction via Windows messages
- Delphi version detection from BPL packages
- Real-time updates (500ms) vs. manual refresh
- Global hotkey to freeze inspection
How do I freeze the inspection?
Press Ctrl+F12 (global hotkey) to freeze the current inspection. The status bar will show “FROZEN” and all information will remain static. Press Ctrl+F12 again to resume. Alternative hotkeys: Alt+F12 or Pause key.
Does WinInspector work with 64-bit applications?
WinInspector is a 32-bit application that can inspect both 32-bit and 64-bit processes. However, DLL enumeration works best with 32-bit target processes. For 64-bit processes, basic window information is still available.
Is WinInspector safe to use?
Yes. WinInspector uses only standard Windows API functions. It does not inject code, install hooks, or modify other processes. It’s a read-only inspection tool.
Why can’t I see VCL properties for some windows?
VCL property extraction works only for Delphi/C++Builder applications with recognizable VCL class names (TForm, TButton, TEdit, etc.). Non-VCL applications or heavily customized components may not be detected.
Can I use WinInspector for automated testing?
While WinInspector is primarily an interactive tool, you can use the Copy to Clipboard feature to capture window information for documentation. For automated testing, consider using the Windows Automation API or UI frameworks like TestComplete or Ranorex.
Links
- GitHub: github.com/danieleteti/wininspector
- Releases: Download latest version
- Issues: Report bugs or request features
- Author: Daniele Teti
WinInspector - Real-time Windows inspection for Delphi developers. VCL component analysis. Delphi version detection. Open-source.
Comments
comments powered by Disqus