-
Notifications
You must be signed in to change notification settings - Fork 7.5k
New+ Feature - Option to hide the built-in New context menu (37545 and 37946) #39843
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
New+ Feature - Option to hide the built-in New context menu (37545 and 37946) #39843
Conversation
Tested on Windows 11 x64
…ption-to-disable-existing-new
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR implements the option to hide the built-in New context menu by adding registry update logic in the settings UI and ensuring the original context menu is restored on uninstall.
- Updates the NewPlusViewModel with new registry read/write functions and properties to manage the built-in New context menu status.
- Adds a new toggle and elevation warning InfoBar in the settings UI (NewPlusPage.xaml).
- Extends the installer with a custom action to restore the built-in New context menu upon uninstallation.
Reviewed Changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/settings-ui/Settings.UI/ViewModels/NewPlusViewModel.cs | New registry logic, properties, and methods to enable/disable the built-in New menu |
| src/settings-ui/Settings.UI/Strings/en-us/Resources.resw | Added localized strings for the new toggle and elevation warning |
| src/settings-ui/Settings.UI/SettingsXAML/Views/NewPlusPage.xaml | New toggle and InfoBar controls for managing the built-in New context menu |
| installer/PowerToysSetupCustomActions/CustomAction.def | Added an export entry for the custom action |
| installer/PowerToysSetupCustomActions/CustomAction.cpp | Implementation of the custom action to restore the built-in New context menu |
| installer/PowerToysSetup/Product.wxs | Integrated the custom action into the installer sequence |
Co-authored-by: Copilot <[email protected]>
|
Updated property notification per feedback |
This comment has been minimized.
This comment has been minimized.
…ption-to-disable-existing-new
|
Hi @shuaiyuanxx and @moooyo Wanted to check-in and see if you had any ideas or feedback? Kind regards, |
|
I have no idea on this toy...I didn't touch this part before, any suggestion? @shuaiyuanxx |
|
I will trigger a official build for per-user installer and test it, I afraid if the per-user installer could restore as expect as the per-user will not have UAC popup |
| auto regDeleter = [](HKEY* regKeyHandle) { if (regKeyHandle && *regKeyHandle) RegCloseKey(*regKeyHandle); delete regKeyHandle; }; | ||
| std::unique_ptr<HKEY, decltype(regDeleter)> regKeyHandle(new HKEY(nullptr), regDeleter); | ||
|
|
||
| const LONG openStatus = RegOpenKeyExW(HKEY_CLASSES_ROOT, builtInNewRegistryPath.c_str(), 0, KEY_READ | KEY_WRITE, regKeyHandle.get()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could we separate the machine-level and per-user installers? I confirmed that the built-in New context menu is only in HKLM, but HKCU can override it. So the machine-level installer only needs to write to HKLM, and the per-user installer only needs to write to HKCU — both will work and can stay clean when uninstalled.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you have code example how to know it is per-machine vs per-user installation here to make the right decision?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we could check the msi InstallScope, in installer, we could do like this
hr = WcaGetProperty(L"InstallScope", ¤tScope);
if (std::wstring{currentScope} == L"perUser")
| private NewPlusSettings Settings { get; set; } | ||
|
|
||
| private const string ModuleName = NewPlusSettings.ModuleName; | ||
| private const string BuiltInNewRegistryPath = @"HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\New"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you have code example how to know it is per-machine vs per-user installation here to make the right decision?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
setting-ui, we can use GetCurrentInstallScope()
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @lei9444 and thanks for the feedback
I'm happy to make these changes but I don't see any "New" registry key under HKEY_CURRENT_USER\Software\Classes\Directory\Background\shellex\ContextMenuHandlers
Question:
Do any of you see a key there (HKEY_CURRENT_USER\Software\Classes\Directory\Background\shellex\ContextMenuHandlers\New)?
Alternative implementation:
Based on GetCurrentInstallScope() I could check
If PerMachine
HKEY_CURRENT_USER\Software\Classes\Directory\Background\shellex\ContextMenuHandlers\New AND
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shellex\ContextMenuHandlers\New
If PerUser
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shellex\ContextMenuHandlers\New
But not sure if this is an actual scenario? Any hints on how to reproduce so that I can verify?
Kind regards,
Christian
…ption-to-disable-existing-new
Questions and Suggestions
|
…ption-to-disable-existing-new
|
@
@cgaarden Any thoughts on this? |
|
Hi, Thanks for the ping. Re
All the best, |

Summary of the Pull Request
New+ Add the option to hide the built-in New context menu via settings
Note: This setting requires PowerToys to be run as Administrator as it relies on updating the registry
PR Checklist
Detailed Description of the Pull Request / Additional comments
Validation Steps Performed
Windows 11 x64 and Windows 11 ARM64
Windows 10 x64
NOT tested. Do not have a Windows 10 key with me
Windows 11 x64, Non-elevated, New+ Disabled

Windows 11 x64, Non-elevated, New+ Enabled

Windows 11 x64, Elevated, New+ Enabled
