-
-
Save Joehuu/2eef8cedcd92ff04e4fb080c03d6dacb to your computer and use it in GitHub Desktop.
Rainmeter plugin for making taskbar translucent. http://arkenthera.deviantart.com/art/TranslucentTaskbar-1-0-656402039
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Windows.h> | |
#include "../../API/RainmeterAPI.h" | |
struct ACCENTPOLICY { | |
int nAccentState; | |
int nFlags; | |
int nColor; | |
int nAnimationId; | |
}; | |
struct WINCOMPATTRDATA { | |
int nAttribute; | |
PVOID pData; | |
ULONG ulDataSize; | |
}; | |
enum AccentTypes { | |
ACCENT_DISABLE = 0, | |
ACCENT_ENABLE_GRADIENT = 1, | |
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2, | |
ACCENT_ENABLE_BLURBEHIND = 3 | |
}; | |
bool IsWindows10() { | |
OSVERSIONINFOA info; | |
ZeroMemory(&info, sizeof(OSVERSIONINFOA)); | |
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); | |
GetVersionExA(&info); | |
return info.dwMajorVersion == 10; | |
} | |
void SetBlurBehind(HWND hwnd, AccentTypes desiredType) { | |
if (IsWindows10()) { | |
const HINSTANCE hModule = LoadLibrary(TEXT("user32.dll")); | |
if (hModule) { | |
typedef BOOL(WINAPI*pSetWindowCompositionAttribute)(HWND, | |
WINCOMPATTRDATA*); | |
const pSetWindowCompositionAttribute | |
SetWindowCompositionAttribute = | |
(pSetWindowCompositionAttribute)GetProcAddress( | |
hModule, | |
"SetWindowCompositionAttribute"); | |
// Only works on Win10 | |
if (SetWindowCompositionAttribute) { | |
ACCENTPOLICY policy = | |
{ desiredType | |
,0,desiredType == (ACCENT_ENABLE_TRANSPARENTGRADIENT) ? 255 : 0,0 }; | |
WINCOMPATTRDATA data = { 19,&policy,sizeof(ACCENTPOLICY) }; | |
SetWindowCompositionAttribute(hwnd, &data); | |
} | |
FreeLibrary(hModule); | |
} | |
} | |
else { | |
//Nothing | |
} | |
} | |
HWND TaskbarHandle = FindWindow(L"Shell_TrayWnd", NULL); | |
HWND SecondaryTaskbar = FindWindow(L"Shell_SecondaryTrayWnd", NULL); | |
struct Measure | |
{ | |
AccentTypes State; | |
Measure() : State(ACCENT_ENABLE_BLURBEHIND) {} | |
}; | |
PLUGIN_EXPORT void Initialize(void** data, void* rm) | |
{ | |
Measure* measure = new Measure; | |
*data = measure; | |
} | |
PLUGIN_EXPORT void Reload(void* data, void* rm, double* maxValue) | |
{ | |
Measure* measure = (Measure*)data; | |
LPCWSTR value = RmReadString(rm, L"AccentState", L""); | |
if (_wcsicmp(value, L"0") == 0) | |
{ | |
measure->State = ACCENT_DISABLE; | |
} | |
else if (_wcsicmp(value, L"1") == 0) | |
{ | |
measure->State = ACCENT_ENABLE_GRADIENT; | |
} | |
else if (_wcsicmp(value, L"2") == 0) | |
{ | |
measure->State = ACCENT_ENABLE_TRANSPARENTGRADIENT; | |
} | |
else if (_wcsicmp(value, L"3") == 0) | |
{ | |
measure->State = ACCENT_ENABLE_BLURBEHIND; | |
} | |
else | |
{ | |
measure->State = ACCENT_ENABLE_BLURBEHIND; | |
} | |
} | |
PLUGIN_EXPORT double Update(void* data) | |
{ | |
Measure* measure = (Measure*)data; | |
SetBlurBehind(TaskbarHandle, measure->State); | |
SetBlurBehind(SecondaryTaskbar, measure->State); | |
SecondaryTaskbar = FindWindow(L"Shell_SecondaryTrayWnd", NULL); | |
// Just in case | |
int GuardCounter = 0; | |
while (SecondaryTaskbar = FindWindowEx(0, SecondaryTaskbar, L"Shell_SecondaryTrayWnd", L"")) | |
{ | |
if (GuardCounter > 8) | |
break; | |
SetBlurBehind(SecondaryTaskbar, measure->State); | |
GuardCounter++; | |
} | |
return 0.0; | |
} | |
PLUGIN_EXPORT void Finalize(void* data) | |
{ | |
Measure* measure = (Measure*)data; | |
SetBlurBehind(TaskbarHandle, ACCENT_DISABLE); | |
SetBlurBehind(SecondaryTaskbar, ACCENT_DISABLE); | |
SecondaryTaskbar = FindWindow(L"Shell_SecondaryTrayWnd", NULL); | |
int GuardCounter = 0; | |
while (SecondaryTaskbar = FindWindowEx(0, SecondaryTaskbar, L"Shell_SecondaryTrayWnd", L"")) | |
{ | |
if (GuardCounter > 8) | |
break; | |
SetBlurBehind(SecondaryTaskbar, ACCENT_DISABLE); | |
GuardCounter++; | |
} | |
delete measure; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment