winguake is a lightweight tool for Windows that allows you to show, hide, or launch (almost) any application window using hotkeys, as well as switch between multiple windows of different applications or multiple windows of the same application. It is essentially an AutoHotkey v2 script.
- Use hotkeys to show, hide, or launch (almost) any application window
- Use hotkeys to switch between multiple applications or multiple windows of the same application
- Automatically maximize windows when launching applications for optimal screen utilization
During development, we often need to use a terminal and switch between different applications and the terminal using Ctrl+Tab
or Ctrl+Shift+Tab
. However, as more applications are opened, this can become cumbersome. If you've used guake on GNOME, you will be impressed by its drop-down terminal experience, though it is limited to the GNOME desktop environment. While developing on Windows, I attempted to replicate this experience and found:
-
The Windows Terminal has a built-in show/hide Quake window feature. You can find it under Settings - Actions, but as of today (π July 9, 2025), it's somewhat basic, e.g., lacking tabs and titles, making it hard to distinguish multiple quake windows, no resize options for the drop-down window, etc. It's usable but far from ideal.
-
windows-terminal-quake is a tool that not only manages terminal windows in a drop-down manner but can also manage other application windows. Initially, WTQ v1 was released as a companion program for Windows Terminal (the Quake window in Windows Terminal may have used WTQ code), and it was later updated to v2 to support other applications. However, as of today (π July 9, 2025), the project is still under development, and bugs like poor drop-down support for other applications and frequent interface freezes impact the user experience.
Neither of these fully satisfied my needs, so I implemented this solution based on AutoHotkey.
There are two options for installation:
From the releases page, download the latest winguake.exe
file.
AHK scripts can also be compiled into a standalone executable (.exe) file by combining the AHK script with the AutoHotkey binary. The EXE version provided in this project is based on this method, for users who do not want to install AutoHotkey separately.
Download and install AutoHotkey v2, then download the winguake.ahk
script from this project. You can run it with AutoHotkey just like running Python scripts with python
, or simply double-click the winguake.ahk
script if your system is set to open .ahk
files with AutoHotkey.
winguake has hotkey configurations for the following applications by default. You can modify these in the winguake.ahk
script or the external winguake.ini
configuration file (see Configuration). By default, some applications (like VSCode, Chrome) have automatic window maximization enabled on launch.
- F3 - Windows Terminal (with auto-maximize)
- F4 - VSCode (with auto-maximize)
- F5 - Chrome (with auto-maximize)
You can modify or override these hotkey configurations in the winguake.ini
file.
For more help, you can access it from the tray menu under Help.
winguake will automatically read the winguake.ini
configuration file located in the same directory as winguake.ahk
or winguake.exe
. If the file does not exist, it will be skipped.
ποΈ 1. If you're launching winguake from a shortcut, it will also navigate to the folder where the actual
winguake
file is stored. ποΈ 2. Right-click on the winguake tray icon and selectOpen Configuration file
to navigate to the configuration file.
The configuration file uses the INI format, with each section representing an application. The format is as follows:
Required Keywords:
hotkey
: The hotkey to bindexe
: The process name (can be found through Task Manager after running the application)launchCmd
: The command to run the application, with optional argumentsname
: The application namelaunchPaths
: The application path(s), separated by|
, with the leftmost path having the highest priority
Optional Keywords:
disable
: Whether to disable the application. This can be used to override the default configuration.maximize
: Whether to maximize the window when launching the application (default: false)cycleContinuous
: Multi-window cycling behavior (default: true)true
: Continuously cycle through windows without minimizing (AβBβCβAβBβC...)false
: Minimize all windows when reaching the last window
β οΈ Note: Do not add comments at the end of a line. If you want to add a comment, do so on the previous line.
Example:
[Notepad]
hotkey=F7
exe=notepad.exe
launchCmd=notepad
name=Notepad
launchPaths=notepad.exe|C:\Windows\System32\notepad.exe
maximize=true
cycleContinuous=false
; set disable=false if you want to register this app
disable=true
winguake supports two different cycling behaviors when managing multiple windows of the same application:
Continuous Cycling Mode (cycleContinuous=true
, default):
- Windows cycle continuously: A β B β C β A β B β C...
- No interruption by minimizing all windows
- Ideal for applications where you frequently switch between multiple windows
Traditional Mode (cycleContinuous=false
):
- Windows cycle with reset: A β B β C β (minimize all) β A β B β C...
- After reaching the last window, all windows are minimized
- Similar to traditional window management behavior
Configuration:
Add cycleContinuous=true/false
to any application section in your winguake.ini
:
[VSCode]
hotkey=F4
exe=Code.exe
launchCmd=code
name=Visual Studio Code
maximize=true
cycleContinuous=true
[Chrome]
hotkey=F5
exe=chrome.exe
launchCmd=chrome
name=Google Chrome
maximize=true
cycleContinuous=false
winguake supports automatically maximizing application windows when they are launched for the first time. This feature uses Windows' native window launch parameters for optimal compatibility and performance.
How it works:
- When
maximize=true
is set for an application, it will be launched usingRun(path, , "Max")
- This directly starts the application in maximized state without needing to wait
- If the application doesn't support launch-time maximization, a backup method will attempt to maximize the window 2 seconds after launch
Configuration:
Add maximize=true
to any application section in your winguake.ini
:
[VSCode]
hotkey=F4
exe=Code.exe
launchCmd=code
name=Visual Studio Code
maximize=true
[Chrome]
hotkey=F5
exe=chrome.exe
launchCmd=chrome
name=Google Chrome
maximize=true
cycleContinuous=true
Behavior:
- New launches: Applications with
maximize=true
will start maximized - Switching to existing windows: Window states are preserved (no forced maximization)
- Minimized windows: Will be restored but not forced to maximize unless they were already maximized
You can use the following modifier symbols to define hotkeys:
Symbol | Description | Example |
---|---|---|
# | Win (Windows logo key). Hotkeys that include Win (e.g. #a) will wait for Win to be released before sending any text containing an L keystroke. This prevents usages of Send within such a hotkey from locking the PC. This behavior applies to all sending modes except SendPlay (which doesn't need it), blind mode and text mode. | #S : Win+S |
! | Alt Note: Pressing a hotkey which includes Alt may result in extra simulated keystrokes (Ctrl by default). See A_MenuMaskKey. | !S : Alt+S |
^ | Ctrl | ^S : Ctrl+S |
+ | Shift | ^+S : Ctrl+Shift+S |
For more hotkey symbol, see Autohotkey Symbols.
The easiest method to enable auto-start is by placing a shortcut to the script in the Startup
folder.
The Startup
path (replace <UserName>
with your actual username) is:
C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup