Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hobbica98/2513e48622f9da637f688b5fe743a0f2 to your computer and use it in GitHub Desktop.
Save hobbica98/2513e48622f9da637f688b5fe743a0f2 to your computer and use it in GitHub Desktop.
Rainmeter plugin for making taskbar translucent. http://arkenthera.deviantart.com/art/TranslucentTaskbar-1-0-656402039
#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