* #10997 - Added JSON schema and extra shell class * #13510 - Address feedback and fix wrong typo for a member * #13510 - Add DevDoc (first version) * #13510 - make spellcheck happy * #13510 Address feedback, add scores, replace todos * Make build server happy * #13510 - Address feedback - Extra table for keys * #13510 - Address feedback * #13510 -Address feedback, add language specified Co-authored-by: Sekan, Tobias <tobias.sekan@axp-consulting.de>
7.9 KiB
Windows Settings Plugin
The Windows settings Plugin allows users to search the Windows settings.
Special functions (differ from the regular functions)
-
Support modern Windows settings (Windows 10+)
-
Support legacy Windows settings (Windows 7, 8.1)
-
Support extra programs for setting (like ODBC)
-
Support search by the area of the setting (like
Privacy
) -
Support search for alternative names of a setting
How to add a new Windows Setting or change one
All Windows settings are located in WindowsSettings.json
in root folder of the project.
The WindowsSettings.json
use a JSON schema file that make it easier to edit it.
Key | Optional | Value type | String prefix |
---|---|---|---|
Name |
No | String | |
Type |
No | String | App |
Command |
No | String | |
Areas |
Yes | List with strings | Area |
AltNames |
Yes | List with strings | |
Note |
Yes | String | Note |
IntroducedInBuild |
Yes | Integer | |
DeprecatedInBuild |
Yes | Integer |
A minimum entry for the WindowsSettings.json
looks like:
{
"Name": "mySetting",
"Type": "AppSettingsApp",
"Command": "ms-settings:mySetting"
}
A full entry for the WindowsSettings.json
looks like:
{
"Name": "mySetting",
"Type": "AppSettingsApp",
"Command": "ms-settings:mySetting",
"Areas": [ "AreaMySettingArea" ],
"AltNames": [ "NiceSetting" ],
"Note": "NoteMySettingNote",
"IntroducedInBuild" : 1903,
"DeprecatedInBuild" : 2004
}
Remarks
- The
Command
for modern Windows settings should start withms-settings:
- The
Command
for legacy Windows settings should start withcontrol
- The integer value for
IntroducedInBuild
andDeprecatedInBuild
must be in range of0
to4294967295
- The strings for
Name
,AltNames
,Areas
,Type
andNote
must not contain whitespace(s) or special characters (#, €, $, etc.) - The strings for
Name
,AltNames
,Areas
,Type
andNote
are used as ids for the resource file underProperties\Resources.resx
- When you add new strings make sure you have add add all translations for it.
Scores
There are three different score types with different start values.
Score type | Start value |
---|---|
High score | 10000 |
Medium score | 5000 |
Low score | 1000 |
Each score will decreased by one when a condition match.
Priority | Condition | Score type |
---|---|---|
1. | Settings name starts with the search value | High score |
2. | Settings name contain the search value | Medium score |
3. | Setting has no area | Low score |
4. | One area of the settings starts with the search value | Low score |
5. | Setting has no alternative name | Low score |
6. | One alternative name of the settings starts with the search value | Medium score |
x. | no condition match | Low score |
Important for developers
General
- The assembly name is cached into
_assemblyName
(to avoid to many calls ofAssembly.GetExecutingAssembly()
)
Microsoft.PowerToys.Run.Plugin.WindowsSettings project
Important plugin values (meta-data)
Name | Value |
---|---|
ActionKeyword | $ |
ExecuteFileName | Microsoft.PowerToys.Run.Plugin.WindowsSettings.dll |
ID | 5043CECEE6A748679CBE02D27D83747A |
Interfaces used by this plugin
The plugin use only these interfaces (all inside the Main.cs
):
Wox.Plugin.IPlugin
Wox.Plugin.IContextMenu
Wox.Plugin.IPluginI18n
Program files
File | Content |
---|---|
Classes\WindowsSetting.cs |
A class that represent one Windows setting |
Classes\WindowsSettings.cs |
A wrapper class that only contains a list with Windows settings (see 1) |
Helper\ContextMenuHelper.cs |
All functions to build the context menu (for each result entry) |
Helper\JsonSettingsListHelper.cs |
All functions to load the windows settings from a JSON file |
Helper\ResultHelper.cs |
All functions to convert internal results into WOX results |
Helper\TranslationHelper.cs |
All functions to translate the result in the surface language |
Helper\UnsupportedSettingsHelper.cs |
All functions to filter not supported Windows settings out |
Helper\WindowsSettingsPathHelper.cs |
All functions to build the area paths |
Images\WindowsSettings.dark.png |
Symbol for the results for the dark theme |
Images\WindowsSettings.light.png |
Symbol for the results for the light theme |
Properties\Resources.Designer.resx |
File that contain all translatable keys |
Properties\Resources.resx |
File that contain all translatable strings in the neutral language |
GlobalSuppressions.cs |
Code suppressions (no real file, linked via *.csproj) |
Main.cs |
Main class, the only place that implement the WOX interfaces |
plugin.json |
All meta-data for this plugin |
StyleCop.json |
Code style (no real file, linked via *.csproj) |
- We need this extra wrapper class to make it possible that the JSON file can have and use a JSON schema file. Because the JSON file must have a object as root type, instead of a array.
Important project values (*.csproj)
Name | Value |
---|---|
TargetFramework | netcoreapp3.1 (means .NET Core 3.1) |
Platforms | x64 |
Output | ..\..\..\..\..\x64\Debug\modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.WindowsSettings\ |
RootNamespace | Microsoft.PowerToys.Run.Plugin.WindowsSettings |
AssemblyName | Microsoft.PowerToys.Run.Plugin.WindowsSettings |
Project dependencies
Packages
Package | Version |
---|---|
StyleCop.Analyzers |
1.1.118 |
Projects
Wox.Infrastructure
Wox.Plugin