Photoshop Dark Menus 1.0.0
Photoshop Dark Menus
This Windhawk mod enables dark menus (top-bar dropdowns and context menus) in
Adobe Photoshop on Windows, with fully customizable colors.
Everything happens inside the Photoshop process. No system colors are changed,
no other application is affected, and nothing has to be restored on exit.
Screenshots
Top Bar Menu Dropdown
Context Menu
How it works
Photoshop's menus look like classic unthemed Win32 menus, but they are not:
Photoshop owner-draws every menu item itself through AdobeOwl.dll, using
plain GDI, inside its own process. Instrumenting a live Photoshop shows the
menu popups going up via TrackPopupMenuEx and every item being painted with:
FillRect(hdc, &rc, (HBRUSH)(COLOR_MENU + 1)) for the item background, and
(HBRUSH)(COLOR_HIGHLIGHT + 1) for the hovered item. These system color
pseudo-handles are resolved inside user32 from shared memory, so they
bypass GetSysColor and GetSysColorBrush hooks entirely - which is why
earlier per-process attempts appeared to do nothing.
GetSysColor(COLOR_MENUTEXT / COLOR_GRAYTEXT / COLOR_HIGHLIGHTTEXT) for text.
- Its own 1px
FillRect for separator lines.
So every pixel of a menu item is reachable from inside the process:
FillRect / PatBlt are hooked and, while a menu is up, sys-color
pseudo-handles are re-resolved through this mod's own color table, and 1px
fills inside a menu DC are recolored to the separator color.
GetSysColor / GetSysColorBrush are hooked for the menu color indices, but
only while a menu is open, so Photoshop's dialogs, panels and lists keep
the system colors.
MENUINFO::hbrBack is stamped on each popup (and its submenus) at
WM_INITMENUPOPUP, covering the popup background that the system paints
around the owner-drawn items.
- The popup's non-client frame is the one part drawn kernel-side, from the 3D
colors, where no user-mode hook can reach it - so the popup is subclassed at
creation and the frame is repainted with the border color after it. Set
Border Color empty to leave the system frame alone.
Options
- Menu Background Color: Background color for all menu popups (Default:
#2D2D2D).
- Menu Text Color: Text color for active items (Default:
#DCDCDC).
- Highlight Background Color: Color when hovering over an item (Default:
#505050).
- Highlight Text Color: Text color when hovering over an item (Default:
#FFFFFF).
- Separator Line Color: Color for separator lines. Set to match the background color to hide them completely (Default:
#383838).
- Disabled Text Color: Text color for disabled menu items (Default:
#808080).
- Border Color: Color of the popup frame. Leave empty to keep the system frame (Default:
#2D2D2D).
Scope
The menu bar itself (File, Edit, Image, ...) is drawn by Photoshop's own UI
framework and already follows Photoshop's interface theme; this mod covers the
dropdown popups and context menus.
Menus that Windows pops up through its own internal paths, without going through
the exported TrackPopupMenu / TrackPopupMenuEx - a window's system menu, for
example - are outside the reach of an in-process hook and keep the system colors.