Skip to main content

Windows admin and security tool for discovering, recovering, and managing hidden or inaccessible windows

Project description

wingather

PyPI Release Date Python 3.8+ License: GPL v3 GitHub Discussions Platform

Windows admin and security tool for discovering, recovering, and managing hidden or inaccessible windows.

Finds hidden, minimized, off-screen, and obscured windows -- restores them and centers them on your chosen monitor. Useful for:

  • Security investigation -- surface suspicious hidden dialogs or message boxes
  • Window rescue -- recover windows lost off-screen after monitor disconnect
  • Desktop cleanup -- quickly gather all windows to one spot (including from other desktops)

Installation

# From PyPI (coming soon)
pip install wingather

# From source
git clone https://github.com/DazzleTools/wingather.git
cd wingather
pip install -e .

Usage

# Find and surface suspicious windows (default: only acts on flagged windows)
wingather --dry-run

# Gather ALL windows to center of primary monitor
wingather --all

# List what's out there without taking action
wingather --list-only

# Reveal suspicious hidden windows (with educational banner)
wingather --show-hidden
wingather --show-hidden --all   # reveal ALL hidden windows (use with caution)
wingather --undo                # re-hide them (see docs/hidden-windows.md)

# Center on a specific monitor (0=primary, 1=secondary, etc.)
wingather --monitor 1

# Filter by window title or process name (fnmatch patterns)
wingather --filter "*chrome*"
wingather --exclude "*spotify*"

# JSON output for scripting
wingather --json

# Verbose logging
wingather -v

See docs/parameters.md for the full CLI reference with all options, filtering, trust configuration, and output modes.

Running as Administrator

For best results, run as Administrator. Without elevation, windows belonging to elevated processes (e.g., Task Manager, Process Explorer) cannot be moved.

What It Does

  1. Sets DPI awareness for accurate multi-monitor coordinate handling
  2. Enumerates all top-level windows via Win32 EnumWindows
  3. Identifies window state: normal, minimized, hidden, off-screen, cloaked (virtual desktop)
  4. Scores windows for suspicious indicators (off-screen, shrunk, dialog, cloaked)
  5. By default, only acts on suspicious windows (use --all for everything)
  6. Restores, shows, and centers affected windows on the target monitor
  7. Reports what was found and what action was taken

Window States

State Description Default Action
normal Visible, on-screen Skip (use --all to center)
minimized In taskbar Restore + Center (if suspicious)
maximized Full-screen normal Skip (use --all to center)
hidden WS_VISIBLE not set Skip (use --show-hidden)
off-screen Beyond monitor bounds Center (flagged suspicious)
cloaked On another virtual desktop Skip (OS limitation)

Suspicious Window Detection

wingather flags windows that exhibit suspicious behavior using a weighted concern scoring system:

Level Label Example Triggers Action
[!1] ALERT Off-screen + dialog, trust verification failed Centered + foreground
[!2] ALERT Off-screen window Centered + foreground
[!3] CONCERN Heavily shrunk window Centered + foreground
[!4] NOTE Dialog, partially off-screen Centered + foreground
[!5] NOTE Cloaked on another desktop Centered + foreground

See docs/parameters.md for indicator weights and scoring details.

Trust Verification

Built-in trusted processes (explorer.exe, etc.) are verified by checking their file path and Microsoft Authenticode signature before suppressing flags. A process masquerading as a trusted name but failing verification triggers an immediate level 1 ALERT.

# Bypass default trust list -- flag everything
wingather --no-default-trust --dry-run

# Trust additional processes
wingather -tp myapp.exe -tp "custom*"

Cross-Platform

Designed with a platform abstraction layer. Currently implemented for Windows only. macOS and Linux stubs are in place for future development. See docs/platform-support.md for details, requirements, and how to help.

Platform Status
Windows Implemented
macOS Stub (PyObjC/Quartz planned)
Linux/X11 Stub (python-xlib/wmctrl planned)
Linux/Wayland Not feasible (compositor security model)

Requirements

  • Python 3.8+
  • Windows: pywin32, psutil

Related Tools

  • process-delta -- Process and service snapshot comparison tool
  • NirCmd -- win center alltop does partial centering (no hidden/minimized restore)
  • GUIPropView -- GUI window inspector with manual center action

Contributing

Contributions welcome! See CONTRIBUTING.md.

Like the project?

"Buy Me A Coffee"

License

wingather, Copyright (C) 2026 Dustin Darcy

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wingather-0.2.3a1.tar.gz (48.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wingather-0.2.3a1-py3-none-any.whl (43.5 kB view details)

Uploaded Python 3

File details

Details for the file wingather-0.2.3a1.tar.gz.

File metadata

  • Download URL: wingather-0.2.3a1.tar.gz
  • Upload date:
  • Size: 48.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for wingather-0.2.3a1.tar.gz
Algorithm Hash digest
SHA256 1ae841344dcefb12d16d48e5215ba365fa34f2e8c01750fff591846f8f26a78e
MD5 4d24ed2a6a7dca7674453dc6eb2e4f0f
BLAKE2b-256 1651d32d45480609167a9f2832c3a8701ab7ff57370ad0ae16c3d9520be42980

See more details on using hashes here.

Provenance

The following attestation bundles were made for wingather-0.2.3a1.tar.gz:

Publisher: release.yml on DazzleTools/wingather

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wingather-0.2.3a1-py3-none-any.whl.

File metadata

  • Download URL: wingather-0.2.3a1-py3-none-any.whl
  • Upload date:
  • Size: 43.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for wingather-0.2.3a1-py3-none-any.whl
Algorithm Hash digest
SHA256 cca073ee1dcc2d1acd3240c98bed60d2549bf329529fc7304d58ee59520b72d5
MD5 28ad47ce07031d6aa407e9652d472153
BLAKE2b-256 0e63598b8cb5f7fa72d124fa7ef5f93e4ae80e5347ac997e5edf479ae741a75e

See more details on using hashes here.

Provenance

The following attestation bundles were made for wingather-0.2.3a1-py3-none-any.whl:

Publisher: release.yml on DazzleTools/wingather

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page