3

OLED panels are susceptible to burn-in. How can I make the taskbar/tray and quicklaunch icons/text (even if it makes the taskbar itself) darker? I know about the dark theme, but please understand that does not make the icons in the taskbar and quicklaunch bar darker, only the bar's background colour.

Please also note, I do NOT want to autohide the taskbar/tray, as I've heard a million people recommend that, but it's not for me.

Twinbee
  • 570

4 Answers4

2

You can use the free AutoHotkey.

The following AutoHotkey script will cover the taskbar with a semi-transparent window that is click-through, but will hide it when a window becomes full-screen:

SysGet, Monitor, Monitor                   ; Get monitor dimensions
SysGet, WorkArea, MonitorWorkArea          ; Get monitor work-area without taskbar
dimtop := % WorkAreaBottom + 1             ; taskbar is assumed to start below the work-area
Gui Color, 0,0                             ; Black color
Gui -Caption +ToolWindow +E0x20            ; No title bar, No taskbar button, Transparent for clicks
Gui Show, X0 Y%dimtop% W%MonitorRight% H63 ; Create a semi-transparent cover window
WinGet ID, ID, A                           ; Get its HWND/handle ID
Winset AlwaysOnTop,ON,ahk_id %ID%          ; Keep it always on the top
WinSet Transparent,99,ahk_id %ID%          ; Transparency 99/256
SetTimer, coverIt, 500                     ; Repeat setting it to be on top of the taskbar
return

coverIt: WinGet style, Style, A ; Get active window style and dimensions WinGetPos ,,,winW,winH, A ; 0x800000 is WS_BORDER. ; 0x20000000 is WS_MINIMIZE. ; check no border and not minimized isfull := ((style & 0x20800000) = 0 and winH >= A_ScreenHeight and winW >= A_ScreenWidth) if (isfull) { WinHide, ahk_id %ID% } else { WinShow, ahk_id %ID% Winset AlwaysOnTop,ON,ahk_id %ID% ; Ensure it is still on the top } return

After installing AutoHotKey, put the script in a .ahk file and double-click it to test. You may stop the script by right-click on the green H icon in the traybar and choosing Exit. To have it run on login, place it in the Startup group at C:\Users\USER-NAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.

harrymc
  • 498,455
2

Just wanted to update the script provided by @harrymc and asked by @ccrez. You can find it on my website here.

I made so that the script deactivate if you're on your primary monitor in full screen but not if it is an app in a secondary monitor that is in full screen.

Goal

  1. Auto-dim the taskbar to prevent burn in.
  2. Keep the dimming when an app is opened in full-screen on a second monitor.
  3. Stop the dimming if an app is opened full-screen on the primary monitor.

Sources

Script

SysGet, Monitor, Monitor                   ; Get monitor dimensions
SysGet, WorkArea, MonitorWorkArea          ; Get monitor work-area without taskbar
dimtop := % WorkAreaBottom + 1             ; taskbar is assumed to start below the work-area
Gui Color, 0,0                             ; Black color
Gui -Caption +ToolWindow +E0x20            ; No title bar, No taskbar button, Transparent for clicks
Gui Show, X0 Y%dimtop% W%MonitorRight% H63 ; Create a semi-transparent cover window
WinGet ID, ID, A                           ; Get its HWND/handle ID
Winset AlwaysOnTop,ON,ahk_id %ID%          ; Keep it always on the top
WinSet Transparent,99,ahk_id %ID%          ; Transparency 99/256
SetTimer, coverIt, 500                     ; Repeat setting it to be on top of the taskbar
return

GetCurrentMonitor() { SysGet, numberOfMonitors, MonitorCount WinGetPos, winX, winY, winWidth, winHeight, A winMidX := winX + winWidth / 2 winMidY := winY + winHeight / 2 Loop %numberOfMonitors% { SysGet, monArea, Monitor, %A_Index% if (winMidX > monAreaLeft && winMidX < monAreaRight && winMidY < monAreaBottom && winMidY > monAreaTop) return A_Index } SysGet, primaryMonitor, MonitorPrimary return "No Monitor Found" }

coverIt: WinGet style, Style, A ; Get active window style and dimensions WinGetPos ,,,winW,winH, A ; 0x800000 is WS_BORDER. ; 0x20000000 is WS_MINIMIZE. ; check no border and not minimized isfull := ((style & 0x20800000) = 0 and winH >= A_ScreenHeight and winW >= A_ScreenWidth) isPrimaryMonitor := (GetCurrentMonitor() = 1) if (isfull and isPrimaryMonitor) { WinHide, ahk_id %ID% } else { WinShow, ahk_id %ID% Winset AlwaysOnTop,ON,ahk_id %ID% ; Ensure it is still on the top } return

1

I took the script @harrymc provided and converted it for AutoHotkeys version 2. Had to add a try/catch block because in version 2 it would occasionally throw errors when opening the start menu. The catch block is empty, as there isn't anything to do in terms of error handling (just continue). There are probably better solutions to this, but it does work for me.

EDIT 13 MAY 2024: AUTOMATICALLY DETERMINE HEIGHT OF TASKBAR

; DIM TASKBAR FOR AUTOHOTKEYS V2
MonitorGet(, &MonitorLeft, &MonitorTop, &MonitorRight, &MonitorBottom)                   ; Get monitor dimensions
MonitorGetWorkArea(, &WorkAreaLeft, &WorkAreaTop, &WorkAreaRight, &WorkAreaBottom)          ; Get monitor work-area without taskbar
dimtop := WorkAreaBottom              ; taskbar is assumed to start below the work-area
dimheight := MonitorBottom - WorkAreaBottom ; determine height of taskbar
myGui := Gui()
myGui.BackColor := "0"                             ; Black color
myGui.Opt("-Caption +ToolWindow +E0x20")            ; No title bar, No taskbar button, Transparent for clicks
myGui.Show("X0 Y" . dimtop . " W" . MonitorRight . " H" . dimheight) ; Create a semi-transparent cover window
ID := WinGetID("A")                           ; Get its HWND/handle ID
WinSetAlwaysOnTop(1, "ahk_id " ID)          ; Keep it always on the top
WinSetTransparent(128, "ahk_id " ID)          ; Transparency 128/256 = 50%
SetTimer(coverIt,100)                     ; Repeat setting it to be on top of the taskbar
return

coverIt() { try { style := WinGetStyle("A") ; Get active window style and dimensions WinGetPos(, , &winW, &winH, "A") ; 0x800000 is WS_BORDER. ; 0x20000000 is WS_MINIMIZE. ; check no border and not minimized isfull := ((style & 0x20800000) = 0 and winH >= A_ScreenHeight and winW >= A_ScreenWidth) if (isfull) { WinHide("ahk_id " ID) } else { WinShow("ahk_id " ID) WinSetAlwaysOnTop(1, "ahk_id " ID) ; Ensure it is still on the top } } catch { ; NOOP } return }

HELIX
  • 11
0

If you do not want to set the taskbar to auto-hide, so it appears only when your cursor is upon it, which is the simplest and most effective solution, then you might try third-party software, such as free Open-Shell Menu.

Open-Shell Menu lets you set the transparency and color of the taskbar and the color of the text, though the icons themselves do not appear to be affected. To do so, you'd need to find or to create a custom icon for each item in the Start Menu, and to modify the executable to change its own icon.

Open-Shell Menu taskbar settings

If you find erratic taskbar behavior an issue in auto-hide mode, try another third-party tool, such as Taskbar Activate or an alternative.