That value changes an internal ID within the registry that seems to be pointing to the latest version of the start menu. The start menu was updated in the latest build, hence why the ID changed. I suspect that this value will need to be changed each time Microsoft makes updates to the start menu. Here's to hoping that Microsoft finally sees the light and the next update will include an option to remove the recommended section. Knowing them, I'm not holding my breath...
Here's the process that I followed to deduce that it was the ID within that script that needed to be updated, and how to figure out what value to use in the future. Note that it's dependent on a new version of ExplorerPatcher being released. Later, I'll see if I can search the registry to find other possible sources of that ID:
- Remove all start menu/taskbar customizations from your machine (make sure not to check the box to delete your license when uninstalling StartAllBack!)
- Install build 22621.1344
- Check the contents of %SystemRoot%\SystemApps\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\ and confirm that dxgi.dll is not present
- Install the latest version of ExplorerPatcher
- Enable the "Hide Recommended" feature, restart explorer, and confirm that it is working with the latest version of ExplorerPatcher
- Check the contents of %SystemRoot%\SystemApps\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\ and confirm that dxgi.dll is present
- Open the registry editor
- Go to HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ExplorerPatcher and verify that there's a REG_DWORD named StartDocked_DisableRecommendedSection with a value of 1
- Go to HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ExplorerPatcher\StartDocked and verify that there's a REG_DWORD named StartDocked::LauncherFrame::OnVisibilityChanged
- Make a note of the 7-digit number in parentheses in the Data column linked with StartDocked::LauncherFrame::OnVisibilityChanged, that's the ID to use in the script
- Update line 28 of the script from Reddit (11SM-recommended.bat) to align with the new value for StartDocked::LauncherFrame::OnVisibilityChanged
- Uninstall ExplorerPatcher
- Run 11SM-recommended.bat, and press 1 followed by enter to install
- Install StartAllBack
Yeah, it’s not any magic internal ID…
Programs consist of subroutines, pieces of instructions grouped together that do “something”. In our case, we are interested in “startdocked::LauncherFrame::OnVisibilityChanged”, which is the subroutine that is executed when the Windows 11 Start menu is displayed (side note: Windows 11 Start menu is called “StartDocked”, while the Windows 10 Start menu is called “StartUI” by Microsoft). For the code in ExplorerPatcher to be able to alter the layout and hide the recommended section, it needs to hook that subroutine, i.e. a piece of code that executes some of my own custom code that helps me do that and then lets the thing do the original code, aka a “hook”. ExplorerPatcher has code that allows it to install hooks (how to do that, there are a couple of methods, I think I explained with another occasion, not the point of this talk). All it requires is to know the address in memory (RAM) where that function is located, in order to know where to hook. That number represents the address it needs, the address of “…::OnVisibilityChanged” (I oversimplified the explanation, it’s not the address per se, but consider it is for the sake of having a coherent and understandable explanation).
Now, how do you get that number? Unfortunately, the DLL file (StartDocked.dll) does not contain that data, as it would make it much larger. Instead, information like this is stored in what is called a “symbol” file (
Symbols). ExplorerPatcher downloads the symbol file for StartDocked.dll, parses it, extracts the number from there and caches it in the registry.
If you want to create a proper script, my advice is to have it download, parse and extract the info directly, reproducing what ExplorerPatcher does. For this, I’d reference this:
Useful development tools/scripts/helpers · valinet/ExplorerPatcher · Discussion #183. With pdbdump, you can extract the address from the pdb (symbol file). PDBDownloader is a GUI tool which takes in a DLL and downloads its symbol file from Microsoft (the download URL is in the DLL file). I don’t know if it works from the command line, alternatively you can find some other utility that does via the command line or roll out your own. ExplorerPatcher contains code to parse a DLL file and extract the URL from there, so you can reference that:
libvalinet/pdb.h at master · valinet/libvalinet. Idk, investigate a bit. With those 2, you then just write the number you obtained to the registry and ExplorerPatcher will pick it up and do its thing when you load it in the Start menu (dxgi.dll present in the Start menu folder). Beware that it works for this, but other hooks (like enabling the Windows 10 Start menu) have to run earlier than the time something from dxgi is used, so ExplorerPatcher installs an earlier hook by impersonating wincorlib.dll as well. Yeah, complicated…
As usual, all of the above is documented via the source code, which performs exactly what I described. The knowledge is there, no need for guessing.