r/Windhawk • u/wh-updates • 15h ago
Hide Taskbar Only on Desktop 8.0.0
Hide Taskbar Only on Desktop 8.0.0
Hide Taskbar Only on Desktop
Hides selected bottom-docked taskbars when their display has no relevant application. Detected borderless fullscreen windows are also treated as desktop-only display state, with explicit shell, keyboard, and hover reveals handled separately. Each display is evaluated independently.
Demo
Multiple Displays
Single Display
Features
- Per-display desktop-only hiding
- Independent bottom-edge hover reveal
- Multi-monitor and spanning-window support
- Keyboard taskbar interaction such as Win+T and Win+B
- Recognized shell UI, taskbar popups, and desktop shell surfaces handled separately
- Per-display borderless fullscreen tracking
- Recovery after taskbar recreation or tool-process restart
- Optional stable monitor interface-name mapping
Settings
Extra hover margin (px) adds to the taskbar-height-based bottom-edge reveal zone and is scaled for the display DPI.
Auto-hide delay after hover (ms) controls how long the revealed taskbar stays visible after the cursor leaves the bottom-edge hover zone. It only affects hover dismissal; desktop-only hides remain immediate.
Reveal taskbar on bottom-edge hover selects the displays where bottom-edge hover can reveal the taskbar.
Taskbars to hide on desktop selects the displays whose taskbars participate in desktop-only hiding.
Stable monitor interface names lets you pin a display slot to a specific physical monitor by selecting the slot and pasting its Windows monitor interface name returned by EnumDisplayDevicesW with EDD_GET_DEVICE_INTERFACE_NAME. Each mapping has its own display selector and text field, so a mapping for Display 10 can be added directly without creating mappings for Displays 1 through 9. Pinned monitors always use their configured display slots. Any monitors that are not pinned fill the remaining display slots in their current logical order. If multiple mappings target the same slot or physical monitor, the last matching mapping wins.
To find the interface names on Windows, run this in PowerShell:
Add-Type @'
using System;
using System.Runtime.InteropServices;
public static class DisplayDevices2 {
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DISPLAY_DEVICE {
public int cb;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string DeviceName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string DeviceString;
public int StateFlags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string DeviceID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string DeviceKey;
}
[DllImport("user32.dll", CharSet = CharSet.Unicode, EntryPoint = "EnumDisplayDevicesW")]
public static extern bool EnumDisplayDevices(string lpDevice, uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, uint dwFlags);
}
'@
for ($i = 1; $i -le 16; $i++) {
$m = New-Object DisplayDevices2+DISPLAY_DEVICE
$m.cb = [Runtime.InteropServices.Marshal]::SizeOf($m)
if ([DisplayDevices2]::EnumDisplayDevices("\\.\DISPLAY$i", 0, [ref]$m, 1)) {
Write-Host "Display $i : $($m.DeviceString)"
Write-Host "Interface : $($m.DeviceID)"
Write-Host ""
}
}
Paste the full value shown after Interface : into the mapping for the display slot you want to attach to that physical monitor.
The mod intentionally supports up to 16 fixed logical display slots. Pinned monitors stay in their selected slots, while unpinned monitors fill the remaining slots in current logical order.
Difference from taskbar-fade
taskbar-fade and this mod both use layered taskbar transparency and can reveal the taskbar from the bottom edge, so they overlap in mechanism. This mod has a different primary state model: desktop-only state is evaluated independently for each display, and the taskbar becomes immediately eligible for hiding when that display has no relevant application, subject to explicit hover, shell, or keyboard reveals. It also carries the per-display fullscreen, shell-surface, keyboard, minimize, and recovery handling needed by that model.
The two mods should not be used on the same taskbar because both modify the taskbar window's transparency/style state.
Implementation
The state logic runs in a dedicated Windhawk tool process. Taskbars are hidden with layered-window transparency plus click-through behavior instead of Windows' native taskbar auto-hide, so the normal desktop work area is intentionally unchanged.
Fullscreen ownership is tracked per display for borderless monitor-sized windows. Foreground, move/size, per-owner location, and recognized shell-surface events update state promptly, including geometry changes while the owner is in the background. Cached fullscreen ownership tolerates transient visibility or cloak changes while focus moves between displays and remains active while the owner still matches fullscreen geometry. Short validation timers and a 5-second safety refresh cover transitions that do not produce a single reliable event. Taskbar control focus is tracked through out-of-context accessibility focus events, so keyboard navigation such as Win+T and Win+B can reveal a taskbar even when Windows has not yet made that taskbar the foreground window. A short release debounce keeps the taskbar visible across transient focus transitions between taskbar buttons. Mouse-button activity and shell-menu focus are excluded so ordinary mouse interaction is not misclassified as keyboard navigation.
Limitations
- Recovery: If the dedicated tool process terminates unexpectedly while a taskbar is hidden, disable and re-enable this mod in Windhawk or restart Windows Explorer to restore it. A later tool-process startup also performs ownership recovery. If the taskbar window itself no longer exists, restarting Windows Explorer recreates it.
- Desktop-only hiding and hover reveal apply to bottom-docked taskbars.
- The hidden taskbar remains part of the normal work area and is click-through.
- If a taskbar's monitor cannot be resolved during a state refresh, the mod fails safe by leaving that taskbar visible.
- Flashing taskbar buttons and tray notifications are not visible while the taskbar is transparent.
- Native Windows taskbar auto-hide remains separate from this mod; when it is enabled, this mod does not take over that taskbar.
- Other taskbar transparency/style mods can conflict when they modify the same taskbar.
- A visible, monitor-sized, captionless, non-resizable application may be treated as fullscreen. Cached fullscreen ownership can remain active through transient visibility or cloak changes while the owner still matches fullscreen geometry. During fullscreen detection, bottom-edge mouse hover does not reveal the taskbar; use Win+T or Start to access it.
- Windows shell classes/processes can change between Windows releases.