A lightweight window manager for Windows that provides:
- Alt+Drag - Move any window by holding Alt + left-click drag (like Linux/KDE)
- Minimize Hotkey - Global hotkey to minimize the active window (default: Ctrl+Shift+Space)
- Windows 10/11
- Python 3.9+
- PySide6 6.9.0
- pywin32
- PySide6 6.9.0 - Tested and working
- PySide6 6.10.x - Not tested, may work but not guaranteed
Download ninjamove.exe from the dist/ folder - no Python required.
pip install -r requirements.txt# Normal start
python ninjamove.py
# With debug logging enabled
python ninjamove.py --debug
# Run without console window (background)
pythonw ninjamove.py
# or use: run_silent.batHold the Alt key (or custom modifier) and left-click drag any window to move it. Configurable modifiers: Ctrl, Shift, Alt.
Default: Ctrl+Shift+Space - Minimizes the active window. Fully customizable.
- App runs in system tray
- Left-click tray icon to open settings
- Right-click for quick menu (enable/disable features, exit)
Two-level debug system:
- Debug Mode - Logs hotkey triggers, window moves, settings changes
- Alt+Drag Verbose - Logs every poll cycle (for debugging Alt+drag issues)
Settings are stored in config.json:
{
"minimize_hotkey": {"modifiers": ["ctrl", "shift"], "key": "space"},
"drag_modifiers": ["alt"],
"enable_minimize_hotkey": true,
"enable_alt_drag": true,
"auto_start": false,
"start_minimized": true,
"debug_mode": false,
"debug_altdrag_verbose": false,
"window_x": 100,
"window_y": 100,
"window_width": 400,
"window_height": 480
}Window position and size are remembered between sessions.
This app does NOT require admin to run. However:
- Normal windows: Full control (move, resize, minimize, etc.)
- Admin/elevated windows: Cannot be moved or controlled
If you need to move admin windows, run NinjaMove as administrator using Run as admin button in the NinjaMove interface.
ninjamove/
ninjamove.py # Entry point
app.py # Qt application, system tray
config/
settings.py # JSON settings manager
autostart.py # Windows startup registry
core/
win32_utils.py # Win32 API wrappers
window_mover.py # Alt+drag thread
hotkey_manager.py# Global hotkeys
gui/
styles.py # Dark theme
main_window.py # Settings UI
debug/
logger.py # Two-level logging
- Enable debug mode in settings
- Enable "Alt+Drag verbose logging"
- Check
ninjamove_debug.logfor details - Common causes:
- Another app intercepting Alt key (Game Bar, etc.)
- Target window is elevated (admin)
- DPI scaling issues
- Error 1408: Another app has registered the same hotkey combination
- Try a different key combination in Settings
- Common conflicts: Ctrl+Shift+Space may be used by screen capture tools, game overlays, etc.
To build your own executable:
pip install pyinstaller
build_win11.batThe exe will be created in dist/ninjamove.exe.
MIT License - See LICENSE file for details.