You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Openshell's taskbar doesn't properly show on latest version of Windows 11 (ExplorerPatcher) #2094
On Windows 11 24H2 the taskbar texture does not properly show with Explorer patcher's Windows 10 (explorerpatcher) settings which is the only way to make Openshell show it's start icon and taskbar correctly but in the new update it made the taskbar show like the image above. When I changed the taskbar skins or configured the settings the bug is still present. Please let me know if it's my fault, explorer patcher's fault, Windows's fault or try and fix it for the next versions. Thank you!
Area of issue
Taskbar
To reproduce
Have Windows 24H2
Have explorer patcher and has it settings on Windows 10 (Explorer patcher)
changed the title [-]Openshell's taskbar doesn't properly show on latest version of Windows 11[/-][+]Openshell's taskbar doesn't properly show on latest version of Windows 11 (ExplorerPatcher)[/+]on Jan 6, 2025
This is because ExplorerPatcher's taskbar implementation differs from original Win10 taskbar.
Win10 uses SHFillRectClr export (ordinal 197 from shlwapi.dll) to paint background of tasklist window. Open-Shell hooks that one and ignores it (so it won't overwrite background of task bar).
ExplorerPatcher (ep_taskbar.5.dll) uses it own implementation of that API, so we cannot hook it.
The implementation calls ExtTextOutW to fill background, so we can hook this API.
Hi, developer of the reimplemented taskbar here, sorry for just responding to this now. I've been packed with RE adventures on the very overengineered and architected 8.1 start screen.
So yeah I know that this is a problem and I've dismissed two issues in EP's repo related to this. First I would admit that I looked at the XP code while doing the reimplementation. Because I know that function is private, exported by ordinal, and not in the public .lib files, I had to do dynamic linking or some other trick that would make it link statically to shlwapi.dll by ordinal. And then I looked at its code in the XP code, found out that the body is very simple (undoubtedly simpler than the excerpt below) so without knowing that Open-Shell or any other program makes use of it for their features, I decided to copy paste it into my codebase. Which works for unmodded, but won't be able to be made to work easily with your program.
I have several things that I can do in mind:
Export my own SHFillRectClr and mark it as noinline. You can perform GetProcAddress on my taskbar module (it can be ep_taskbar.<anything>.dll) and then you can hook it.
Perform dynamic linking to the private SHFillRectClr by its ordinal. Much like this:
Find a way to statically link to that function so you only need to change the DLL handle to be targeting the custom taskbar.
I'm not really familiar with Open-Shell's codebase, so apologies if some things are not feasible. I'm planning for a new EP release next week, so I hope we can find an agreement soon. Thanks!
Please let me know if it's my fault, explorer patcher's fault, Windows's fault
Not your fault (though honestly some will say that it's your fault for listening to Microsoft and using 24H2 despite the bugs and problems it has as well as compatibility with customization software such as this an EP).
ExplorerPatcher's fault for not being aware to how Open-Shell implements the taskbar texturing feature.
Windows's fault for nuking the classic taskbar in 24H2 so I had to reimplement the classic taskbar.
Because I know that function is private, exported by ordinal, and not in the public .lib files, I had to do dynamic linking or some other trick that would make it link statically to shlwapi.dll by ordinal.
True that. Didn't realize it is not quite easy to statically import such undocumented function by ordinal.
Export my own SHFillRectClr and mark it as noinline.
Perform dynamic linking to the private SHFillRectClr by its ordinal.
This won't work because we don't do inline hooking (patch code). We do IAT (import address table) hooking instead, where we change address of resolved API in given module we are hooking (ep_taskbar.5.dll in your case).
So we can hook only directly imported API.
Find a way to statically link to that function so you only need to change the DLL handle to be targeting the custom taskbar.
Then there is other option, to hook ExtTextOutW that you are using in your implementation.
I have PoC for that (I guess I'll share PR soon).
I guess I'm fine with that (it will be done only in case of ExplorePatcher's taskbar, so hopefully it will be safe), though it would be better if we can hook just the same API as with original taskbar.
Anyways, thank you for your insights and your hard work on taskbar reimplementation.
Build from #2107 PR should make taskbar texturing work with ExplorerPatcher.
Anyone, feel free to test.
I will wait for @Amrsatrio regarding static import of SHFillRectClr. And if that turns to be not feasible for them, I guess we can go with changes proposed in the PR.
Static importing SHFillRectClr would require me making a dummy "shlwapi.dll" project. But if the ExtTextOutW hook works for you I guess we can settle with it. Make sure you check options to be ETO_OPAQUE, lpString to be nullptr, c to be 0, and lpDx to be nullptr for extra safety.
Static importing SHFillRectClr would require me making a dummy "shlwapi.dll" project.
Actually you just need to create dummy shlwapi.lib file once.
First create shlwapi.def:
LIBRARY shlwapi
EXPORTS
SHFillRectClr @197 NONAME
Then convert it to shlwapi.lib using: lib /DEF:shlwapi.def /MACHINE:x64
Then you just need to add the library to the list of additional dependencies in your project and create declaration of the API like this: extern "C" WINGDIAPI void WINAPI SHFillRectClr( HDC hdc, const RECT *pRect, COLORREF color );
Imo it is rather simple, though ofc it is up to you whether to use it or not,
Please, let us know if that version fixes the issue for you.
This worked for me! I am on Windows 24H2 (because I am dumb). I was following a tutorial that used Explorer Patcher and Open Shell to make Windows 11 look like windows 7 when I discovered I had this bug. After downloading the posted version, The texture now goes all the way across the taskbar. Amazing 😭 thank you!
@ge0rdi
Hi, been a while, sorry for bumping. I have figured out how to statically link to private functions exported by ordinal. I will make ep_taskbar call SHFillRectClr instead of having its own implementation, so that you can use the original 10 taskbar hooking code on ep_taskbar
Activity
[-]Openshell's taskbar doesn't properly show on latest version of Windows 11[/-][+]Openshell's taskbar doesn't properly show on latest version of Windows 11 (ExplorerPatcher)[/+]ge0rdi commentedon Jan 6, 2025
This is because
ExplorerPatcher's taskbar implementation differs from original Win10 taskbar.Win10 uses
SHFillRectClrexport (ordinal197fromshlwapi.dll) to paint background of tasklist window.Open-Shellhooks that one and ignores it (so it won't overwrite background of task bar).ExplorerPatcher(ep_taskbar.5.dll) uses it own implementation of that API, so we cannot hook it.The implementation calls
ExtTextOutWto fill background, so we can hook this API.TehEpikBoi commentedon Jan 8, 2025
Thanks for the reply.
Amrsatrio commentedon Jan 19, 2025
Hi, developer of the reimplemented taskbar here, sorry for just responding to this now. I've been packed with RE adventures on the very overengineered and architected 8.1 start screen.
So yeah I know that this is a problem and I've dismissed two issues in EP's repo related to this. First I would admit that I looked at the XP code while doing the reimplementation. Because I know that function is private, exported by ordinal, and not in the public .lib files, I had to do dynamic linking or some other trick that would make it link statically to shlwapi.dll by ordinal. And then I looked at its code in the XP code, found out that the body is very simple (undoubtedly simpler than the excerpt below) so without knowing that Open-Shell or any other program makes use of it for their features, I decided to copy paste it into my codebase. Which works for unmodded, but won't be able to be made to work easily with your program.
I have several things that I can do in mind:
I'm not really familiar with Open-Shell's codebase, so apologies if some things are not feasible. I'm planning for a new EP release next week, so I hope we can find an agreement soon. Thanks!
Amrsatrio commentedon Jan 19, 2025
ge0rdi commentedon Jan 19, 2025
@Amrsatrio
Thank you for reaching out 👍
True that. Didn't realize it is not quite easy to statically import such undocumented function by ordinal.
This won't work because we don't do inline hooking (patch code). We do IAT (import address table) hooking instead, where we change address of resolved API in given module we are hooking (
ep_taskbar.5.dllin your case).So we can hook only directly imported API.
This would work for us, though not sure if that will be feasible for you. Here is some info about importing by ordinal:
https://stackoverflow.com/questions/48047497/how-to-statically-link-to-a-dll-function-that-is-exported-by-an-ordinal
In theory you will need to create
.libfrom.deffile and link with that. Though I didn't try that, so not sure what it involves exactly.Then there is other option, to hook
ExtTextOutWthat you are using in your implementation.I have PoC for that (I guess I'll share PR soon).
I guess I'm fine with that (it will be done only in case of
ExplorePatcher's taskbar, so hopefully it will be safe), though it would be better if we can hook just the same API as with original taskbar.Anyways, thank you for your insights and your hard work on taskbar reimplementation.
[ExplorerPatcher] Fix taskbar texturing
ge0rdi commentedon Jan 19, 2025
Build from #2107 PR should make taskbar texturing work with
ExplorerPatcher.Anyone, feel free to test.
I will wait for @Amrsatrio regarding static import of
SHFillRectClr. And if that turns to be not feasible for them, I guess we can go with changes proposed in the PR.Amrsatrio commentedon Jan 19, 2025
Static importing SHFillRectClr would require me making a dummy "shlwapi.dll" project. But if the ExtTextOutW hook works for you I guess we can settle with it. Make sure you check
optionsto be ETO_OPAQUE,lpStringto be nullptr,cto be 0, andlpDxto be nullptr for extra safety.[ExplorerPatcher] Fix taskbar texturing
ge0rdi commentedon Jan 26, 2025
Actually you just need to create dummy
shlwapi.libfile once.First create
shlwapi.def:Then convert it to
shlwapi.libusing:lib /DEF:shlwapi.def /MACHINE:x64Then you just need to add the library to the list of additional dependencies in your project and create declaration of the API like this:
extern "C" WINGDIAPI void WINAPI SHFillRectClr( HDC hdc, const RECT *pRect, COLORREF color );Imo it is rather simple, though ofc it is up to you whether to use it or not,
MOON-STARDUST commentedon Mar 12, 2025
Hi, i'm a beginer and i don't know where do i go to fix this, can someone explain to me like i'm 5yo?
[ExplorerPatcher] Fix taskbar texturing
ge0rdi commentedon Mar 13, 2025
The change is not yet in official
Open-Shellbuild.Though if you want to test it, feel free to use installer from PR build:
https://ci.appveyor.com/project/passionate-coder/open-shell-menu/builds/51687136/artifacts
Please, let us know if that version fixes the issue for you.
MOON-STARDUST commentedon Mar 13, 2025
It didn't work, but thanks for helping :)
jcegan92 commentedon Apr 3, 2025
This worked for me! I am on Windows 24H2 (because I am dumb). I was following a tutorial that used Explorer Patcher and Open Shell to make Windows 11 look like windows 7 when I discovered I had this bug. After downloading the posted version, The texture now goes all the way across the taskbar. Amazing 😭 thank you!
ge0rdi commentedon Apr 4, 2025
@jcegan92
Thank you for letting us know.
I think I'll merge those changes to master, so that they will be present in next official version.
Amrsatrio commentedon Aug 3, 2025
@ge0rdi
Hi, been a while, sorry for bumping. I have figured out how to statically link to private functions exported by ordinal. I will make ep_taskbar call SHFillRectClr instead of having its own implementation, so that you can use the original 10 taskbar hooking code on ep_taskbar
ge0rdi commentedon Aug 3, 2025
@Amrsatrio
That's good to hear.
When do you plan to release such version?
And out of curiosity, how did you manage that?
Amrsatrio commentedon Aug 3, 2025
Did it:


Can't give you an ETA at the moment. I kept finding out bugs here and there.
Basically asked ChatGPT for an edit into my .vcxproj and corrected it myself.
Add this to vcxproj:
defs\Win64\shlwapip.def:
defs\Win32\shlwapip.def: