This utility returns the full glass effect to the window frame, just like glass8 did.
Note
Currently only the following official versions of Windows are supported.
- Windows 10 20H2
- Windows 10 21H2
- Windows 10 22H2
- Windows 11 21H2
- Windows 11 22H2
- Windows 11 23H2
- Windows 11 24H2
Important
This software is intended for advanced users only. If you are a beginner and you do not have deeper knowledge of Windows (such as registry editing etc.) you should not install this software.
For the average users, you should consider using DWMBlurGlass.
- Extract the files from the Release page to
C:\, better not put it in any other location. Important thing is that you must place all files in writable location (i.e. not inProgram Files), because DWM process does not run under user's credential. If you don't do this, OpenGlass will not be able to download symbols or create debug logs! If you worry about the security, you can change the permission of OpenGlass.dll files to be writable by Administrators group only and leave it read-only to others. - Run
install.cmdas administrator, this will create a scheduled task for you to run the OpenGlass host process which will inject DLL into DWM for you and also maintains that user settings are correctly loaded. - Run
startup.cmdas administrator, this will run the host process manually. - When you use it for the first time or just after updating your system, OpenGlass will try to download the symbol files and you will see its symbol downloading dialog, just be patient for about 15s. When the symbol files are ready, enjoy!
- When you want to stop using OpenGlass or update the version of OpenGlass, running
shutdown.cmdwill remove the effects of OpenGlass for you and exit the host process. At this time, you can either replace the OpenGlass files or continue to rununinstall.cmdand manually delete the remaining files to complete the uninstallation. - When you experience a crash, OpenGlass is supposed to generate a large memory dump file in the
dumpsdirectory of the folder where it is located, please submit it to the developer if possible, this can help fix known or potential issues.
What are the DWM symbols and where to get them?
I see "Your DWM is incompatible" message. What to do?
OpenGlass works by injecting re-implemented code into several DWM functions. This can be achieved only when the absolute location of each function is known. These locations are described in special files called "program database" and you can recognize them by their .PDB extension. They contain set of all public DWM variables and functions (which are called symbols) together with their memory offsets (relative locations) and other information. OpenGlass is able to load these files from "symbols" directory stored in your OpenGlass installation directory, find appropriate symbol and compute absolute memory location.
Since the DWM functions are in different locations for each version of Windows, OpenGlass has to load their location from the external program databases. The best practice to know more and to get symbol files is reading Microsoft's documentation (you will need symbol files for dwmcore.dll and udwm.dll). The most important thing is that the version of the program database must correspond to the used DWM library version.
This can be easily done using the Windows Registry Editor in the branch HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\DWM. You can find there already existing values with name ColorizationXXX (where XXX represents an individual settable component) intended for active windows. If you create same values with suffix Inactive (i.e. ColorizationXXXInactive), such settings will be applied to inactive windows.
But remember that colorization of the frame is also influenced by used theme. Majority of the themes have set opacity of inactive frames to 20%.
You can change the settings of OpenGlass via editing the Windows registry.
Important
Unless specified, the options below are stored in HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\DWM (per-user) and HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\DWM (global). OpenGlass prefers to read the settings in the HKCU.
| Key Name | Type | Description |
|---|---|---|
| ColorizationColor ColorizationColorInactive |
DWORD | ARGB color used for the glass effect, alpha value is ignored. ℹ️ ColorizationColorInactive is only used when GlassType=0x0 |
| ColorizationColorOverride | DWORD | Same as ColorizationColor, but OpenGlass prefers to use this item. |
| ColorizationAfterglow ColorizationColorBalance ColorizationAfterglowBalance ColorizationBlurBalance |
DWORD | Composition parameters for aero shader effect. ℹ️ Only used when GlassType=0x1 |
| ColorizationAfterglowOverride ColorizationColorBalanceOverride ColorizationAfterglowBalanceOverride ColorizationBlurBalanceOverride |
DWORD | Same as above, but OpenGlass prefers to use these. |
| GlassOpacity GlassOpacityInactive |
DWORD | The intensity of the color (0-100%). ℹ️ Only used when GlassType=0x0 |
| ColorizationColorCaption ColorizationColorCaptionInactive |
DWORD | Color used for drawing window titles. Format is 0xBBGGRR. ℹ️ Only valid in Win10 |
| ColorizationOpaqueBlend | DWORD | Controls the transparency of glass effect. |
| ColorizationOpaqueBlendColor | DWORD | ARGB base color used for opaque blending, alpha value is ignored. |
| Key Name | Type | Description |
|---|---|---|
| GlassType | DWORD | The type of glass effect.
|
| GlassOverrideAccent | DWORD | Overrides surfaces with accent blur with OpenGlass effects, I.E: the taskbar. |
| CustomThemeReflection | String | path to PNG file which will be used as overlay image to simulate reflection (Aero stripes) effect |
| ColorizationGlassReflectionIntensity ColorizationGlassReflectionIntensityInactive |
DWORD | The intensity of reflection effect (0-100%). Default value is 0%. |
| ColorizationGlassReflectionParallaxIntensity | DWORD | The parallax intensity of the reflection effect (I.E when moving the windows side to side). Default value is 13%. |
| ColorizationGlassReflectionPolicy | DWORD | Controls where reflections should be rendered.
|
| BlurDeviation | DWORD | Standard deviation for gaussian blur, default=30 (which means σ=3.0) Value 0 results in non-blurred transparency. |
| BlurOptimization | DWORD | Quality of gaussian blur
|
| RoundRectRadius | DWORD | The radius of glass geometry, Win8=0, Win7=12 |
| Key Name | Type | Description |
|---|---|---|
| CenterCaption | DWORD | Controls how title bar text is aligned.
ℹ️ Only valid in Win10 |
| TextGlowMode | DWORD | Specifies how window caption glow effect will be rendered
ℹ️ Only valid in Win10 |
| CustomThemeAtlas | String | path to PNG file with theme resource (bitmap must have exactly the same layout as msstyle theme you are using!) |
| DisableModernBorders | DWORD | Disable modern rounded window borders.
ℹ️ Only valid in Win11 |
The following registry items are located only in HKLM\Software\Microsoft\Windows\DWM, you should NOT change the settings in this section unless you know what you are doing.
| Key Name | Type | Description |
|---|---|---|
| DisableGlassOnBattery | DWORD |
|
| DisableMemoryDump | DWORD |
|
| DisabledHooks | DWORD | Controls which module's hooks are disabled, which will also control the availability of features.
|
When Desktop Windows Manager wants to draw frame controls (such as minimize/maximize/close buttons, frame shadow etc.), it uses images which are stored in your current theme. Normally, you would need to edit your theme and install UxTheme patch to be able to change the appearance of windows frames. OpenGlass comes with a feature that you can change these images directly without editing the theme. Just provide custom *.png image, point to it with CustomThemeAtlas registry settings and restart DWM.EXE process. The windows frames will be drawn using your custom image now. Just beware that the layout of theme resource depends on the current system theme. If you do not keep this layout, your frames will be rendered incorrectly.
Starting with the version 2.0, you can provide additional layout data by supplying a *.png.layout file in the folder where *.png atlas image is stored. OpenGlass will then ignore current theme layout and use data in this file. The description of the file format is:
- each line has format "x;y;z=a,b,c,d"
- x, y, z specify the part, its state and the property respectively
- a, b, c, d specify position rectangle in atlas image (for z = 8002) or the part sizing/content margins (for z = 3601/3602)
- see example layout file for description of individual part identifiers
- see MSDN documentation of GetThemeRect and GetThemeMargins function for further information
- line "CaptionHeight=n" allows you to change the size of caption buttons to "n" pixels
- everything after # is considered to be the comment and is ignored
Why is there no blur effect in the region/window/etc.?
Is it possible to enable the blur effect on the taskbar (Alt-Tab window, any other window etc.) ?
Remember that DWM is the rendering engine only and OpenGlass is the extension for it. It will apply glass effect only on the regions which are marked to have blur behind. It does not alter any region behavior on its own. If some application wants to have glass effect somewhere, it must enable it explicitly. The taskbar belongs to Windows Explorer shell, thus you must enable blur behind on your own by calling DWM API function DwmEnableBlurBehindWindow. Blur effect will also apply tint of glass color.
Windows 8+ Desktop Window Manager contains new feature called accent. It is a kind of effect which makes whole window fully transparent with tint of glass color. This effect is enabled on the taskbar by default. If you enable blur behind the taskbar but don't disable accent effect (using SetWindowCompositionAttribute API function), you may notice that it will be much more colorized, because the color of both effects will be simply added together.
If you are not familiar with DWM programming API, you can use any of the existing tools that have option to call the DwmEnableBlurBehindWindow function, such as OpenShell, StartIsBack or StartAllBack.
Also remember that taskbar appearance is influenced by used theme where texture used for the taskbar is different from the atlas texture used for windows frames rendering.
OpenGlass does not provide any GUI nor commands to explicitly reload the configuration, you may consider using glass8's heritage AeroGlassGUI.exe to refresh some of the settings.
However, it's actually quite easy to do so in C/C++.
PostMessage(FindWindow(TEXT("Dwm"), nullptr), WM_THEMECHANGED, 0, 0); // refresh part of the settings related to theme
PostMessage(FindWindow(TEXT("Dwm"), nullptr), WM_DWMCOLORIZATIONCHANGED, 0, 0); // refresh part of the settings related to color/backdropTip
It is better to refresh only the corresponding part of the registry items, otherwise it will slow down the system.
Provided by @aubymori
Wallpaper: metalheart jawn #2 by @kfh83
Specifies the Remote Desktop Protocol: Composited Remoting V2, which displays the contents of the Windows-based desktop running on one machine on a second machine connected to the first via a network.
From there I can get a glimpse of how udwm and dwmcore interact in Windows 7 and how the relevant data structures are defined.
Detours is a software package for monitoring and instrumenting API calls on Windows.
VC-LTL is an open source CRT library based on the MS VCRT that reduce program binary size and say goodbye to Microsoft runtime DLLs, such as msvcr120.dll, api-ms-win-crt-time-l1-1-0.dll and other dependencies.
The Windows Implementation Libraries (WIL) is a header-only C++ library created to make life easier for developers on Windows through readable type-safe C++ interfaces for common Windows coding patterns.
Saved me some decompiling and reverse engineering time thanks to ADeltaX's blog!
