Create a gist now

Instantly share code, notes, and snippets.

#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

Awesome 👍

@grebnetiew

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

You're da Real MVP...

@sadphi
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

Ah I see. Thanks :)

@ohemb
ohemb commented Jan 10, 2017

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.

@olliethepikachu

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.

@Eweol
Eweol commented Jan 10, 2017

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

@sadphi
sadphi commented Jan 10, 2017

@morganrpugh I see, thanks

@jNizM
jNizM commented Jan 11, 2017 edited

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

@link6155

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

@wbalbinot

Waiting for the v2 :D

@jNizM
jNizM commented Jan 12, 2017 edited

@link6155 It does not crash. SetWindowBlur() set the blur effect and after 5 seconds SetWindowBlur(false) remove the blur effect and after this the script exit's. Its just an example how to use it =) For more questions visit here https://autohotkey.com/boards/viewtopic.php?f=6&t=26752

@marklk
marklk commented Jan 13, 2017

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

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