Window Enumerator
A powerful Rust library for Windows window enumeration with advanced filtering, sorting, and selection capabilities.
Why Use Window Enumerator?
Features
- 🔍 Window Enumeration - Discover all visible windows on the system
- 🎯 Advanced Filtering - Filter by PID, title, class name, process name, and file path
- 📊 Multi-criteria Sorting - Sort by PID, title, or position with flexible ordering
- 🎮 Index Selection - Select specific windows using 1-based indices or ranges
- 🛡️ Safe API - Memory-safe wrapper around Windows API
- ⚡ Zero-cost Abstractions - Efficient Rust implementation
Installation
Add this to your Cargo.toml:
[]
= "0.4"
Or with specific features:
[]
= { = "0.4", = ["sorting", "selection"] }
Quick Start
use ;
Usage Examples
Basic Enumeration
use WindowEnumerator;
let mut enumerator = new;
enumerator.enumerate_all_windows?;
// Get all windows
let windows = enumerator.get_windows;
println!;
// Access window by index (1-based)
if let Some = enumerator.get_window_by_index
Advanced Filtering
use ;
let mut enumerator = new;
enumerator.enumerate_all_windows?;
// Filter by multiple criteria
let criteria = FilterCriteria ;
let filtered = enumerator.filter_windows;
println!;
Sorting (requires sorting feature)
use ;
let mut enumerator = new;
enumerator.enumerate_all_windows?;
// Sort by PID ascending, then title descending
let sort_criteria = SortCriteria ;
let sorted = enumerator.filter_and_sort_windows;
// Sort by position (X then Y coordinates)
let position_sort = parse_position_sort?;
let pos_sort_criteria = SortCriteria ;
let position_sorted = enumerator.filter_and_sort_windows;
Selection (requires selection feature)
use ;
let mut enumerator = new;
enumerator.enumerate_all_windows?;
// Select specific indices
let selection = parse_selection?;
let selected = enumerator.filter_windows_with_selection;
// Select range
let range_selection = parse_selection?;
let range_selected = enumerator.filter_windows_with_selection;
// Mixed selection
let mixed_selection = parse_selection?;
let mixed_selected = enumerator.filter_windows_with_selection;
Combined Filtering, Sorting and Selection
use ;
let mut enumerator = new;
enumerator.enumerate_all_windows?;
let criteria = FilterCriteria ;
let sort_criteria = SortCriteria ;
let selection = parse_selection?;
let results = enumerator.filter_sort_windows_with_selection;
println!;
API Overview
Main Types
WindowEnumerator- Main entry point for window operationsWindowInfo- Detailed information about a windowFilterCriteria- Criteria for filtering windowsSortCriteria- Criteria for sorting windows (withsortingfeature)Selection- Window selection specification (withselectionfeature)
Key Methods
enumerate_all_windows()- Discovers all visible windowsfilter_windows()- Filters windows based on criteriafilter_and_sort_windows()- Filters and sorts windowsfilter_windows_with_selection()- Filters and selects windowsprint_windows_with_indices()- Displays windows in a formatted table
Utility Functions
parse_selection()- Parses selection strings ("all", "1,2,3", "1-3")parse_position_sort()- Parses position sort strings ("x1", "y-1", "x1|y1")
Cargo Features
sorting- Enables window sorting capabilities (enabled by default)selection- Enables window selection by indices (enabled by default)
Platform Support
⚠️ Windows Only
This crate is specifically designed for Windows and uses Windows-specific APIs. It will not compile on other platforms.
Error Handling
All operations return window_enumerator::Result<T> which can contain various WindowError variants:
use ;
let mut enumerator = new;
match enumerator.enumerate_all_windows
Performance Notes
- Window enumeration is performed on-demand when
enumerate_all_windows()is called - Filtering and sorting operations work on the pre-enumerated list for efficiency
- The library uses zero-cost abstractions where possible
Contributing
Contributions are welcome! Please feel free to submit pull requests or open issues on GitHub.
License
This project is licensed under the MIT License - see the LICENSE file for details.