Skip to content

Instantly share code, notes, and snippets.

@ethanhs
Last active December 16, 2022 02:00
Show Gist options
  • Star 56 You must be signed in to star a gist
  • Fork 10 You must be signed in to fork a gist
  • Save ethanhs/0e157e4003812e99bf5bc7cb6f73459f to your computer and use it in GitHub Desktop.
Save ethanhs/0e157e4003812e99bf5bc7cb6f73459f to your computer and use it in GitHub Desktop.
#include <windows.h>
void SetWindowBlur(HWND hWnd)
{
const HINSTANCE hModule = LoadLibrary(TEXT("user32.dll"));
if (hModule)
{
struct ACCENTPOLICY
{
int nAccentState;
int nFlags;
int nColor;
int nAnimationId;
};
struct WINCOMPATTRDATA
{
int nAttribute;
PVOID pData;
ULONG ulDataSize;
};
typedef BOOL(WINAPI*pSetWindowCompositionAttribute)(HWND, WINCOMPATTRDATA*);
const pSetWindowCompositionAttribute SetWindowCompositionAttribute = (pSetWindowCompositionAttribute)GetProcAddress(hModule, "SetWindowCompositionAttribute");
if (SetWindowCompositionAttribute)
{
ACCENTPOLICY policy = { 3, 0, 0, 0 }; // ACCENT_ENABLE_BLURBEHIND=3...
WINCOMPATTRDATA data = { 19, &policy, sizeof(ACCENTPOLICY) }; // WCA_ACCENT_POLICY=19
SetWindowCompositionAttribute(hWnd, &data);
}
FreeLibrary(hModule);
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR pCmdLine, int nCmdShow)
{
HWND taskbar = FindWindow(L"Shell_TrayWnd", NULL);
while (true) {
SetWindowBlur(taskbar); Sleep((DWORD)10);
}
}
@AchoArnold
Copy link

Awesome 👍

@grebnetiew
Copy link

Cool! I'm a beginner at Windows programming, so I have a few questions ;)
Could you elaborate on why you have to re-run SetWindowBlur every 10 ms? Is there some mechanism that resets the taskbar window very often?
Also, I would have done most of the setup in your SetWindowBlur in WinMain (i.e. only once), and then only called SetWindowCompositionAttribute every 10 ms. Is there a reason that you load and unload the library every time you want to re-apply the composition attributes?
Thanks for your time and the very nice tweak, in any case :)

@akashmishra23
Copy link

You're da Real MVP...

@sadphi
Copy link

sadphi commented Jan 9, 2017

@grebnetiew It needs to refresh every 10 ms as opening the start button will make the blur go away.

Also, At line 40, is the L a mistype? It works without the L and it only gives errors.

@grebnetiew
Copy link

Ah I see. Thanks :)

@morganrpugh
Copy link

@ANDALACA
Copy link

Downloading your compiled exe from a link to your Google Drive reveals that it is infected with "Gen:Variant.Razy.110665".
What gives? Both Google and my own protection software catches it.

@olliecheng
Copy link

Probably a stupid question (I have pretty much no C++ experience), but why does your compiled exe make the taskbar completely transparent (and this code doesn't)? Also your image on Reddit shows a translucent taskbar, not a transparent one.

@jNizM
Copy link

jNizM commented Jan 10, 2017

@Eweol
Copy link

Eweol commented Jan 10, 2017

Is there a Chance to get the transparent taskbar on more than one monitor?

@sadphi
Copy link

sadphi commented Jan 10, 2017

@morganrpugh I see, thanks

@jNizM
Copy link

jNizM commented Jan 11, 2017

@Eweol For this information, follow my link I posted above =)

@link6155
Copy link

@jNizM I compiled your autohotkey script and it works for a few seconds before the script appears to crash.

@wbalbinot
Copy link

Waiting for the v2 :D

@marklk
Copy link

marklk commented Jan 13, 2017

So just exactly how would i instal this code? Does it come in a executable version?

@ethanhs
Copy link
Author

ethanhs commented Jun 3, 2017

A lot has happened since this was published. Please see https://github.com/TranslucentTB/TranslucentTB/ for more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment