From 29eebe16a4c0e3a210bbf5348c71bcdad87d43a0 Mon Sep 17 00:00:00 2001 From: Andrey Nekrasov Date: Mon, 15 May 2023 23:32:26 +0100 Subject: [PATCH] [New Utility]Mouse Without Borders * Integrate Mouse Without Borders into PowerToys --------- Co-authored-by: Jaime Bernardo --- .github/actions/spell-check/allow/names.txt | 30 + .github/actions/spell-check/excludes.txt | 7 + .github/actions/spell-check/expect.txt | 55 +- .github/actions/spell-check/patterns.txt | 1 + .pipelines/ESRPSigning_core.json | 14 + COMMUNITY.md | 35 + Directory.Packages.props | 8 +- NOTICE.md | 8 +- PowerToys.sln | 63 + README.md | 8 +- doc/images/icons/MouseWithoutBorders.png | Bin 0 -> 24378 bytes installer/PowerToysSetup/Common.wxi | 1 + .../PowerToysSetup/MouseWithoutBorders.wxs | 34 + .../PowerToysSetup/PowerToysInstaller.wixproj | 6 + installer/PowerToysSetup/Product.wxs | 23 +- .../generateAllFileComponents.ps1 | 4 + installer/PowerToysSetup/generateFileList.ps1 | 23 +- .../CustomAction.cpp | 215 +- .../CustomAction.def | 3 +- .../PowerToysSetupCustomActions.vcxproj | 1 + src/codeAnalysis/GlobalSuppressions.cs | 8 + src/common/GPOWrapper/GPOWrapper.cpp | 4 + src/common/GPOWrapper/GPOWrapper.h | 1 + src/common/GPOWrapper/GPOWrapper.idl | 1 + src/common/ManagedCommon/NativeMethods.cs | 12 + src/common/ManagedCommon/RunnerHelper.cs | 54 + src/common/logger/logger_settings.h | 2 + src/common/utils/gpo.h | 6 + src/common/utils/processApi.h | 5 +- src/gpo/assets/PowerToys.admx | 10 + src/gpo/assets/en-US/PowerToys.adml | 1 + .../App/Class/Common.Clipboard.cs | 1144 +++++++++ .../App/Class/Common.DragDrop.cs | 405 ++++ .../App/Class/Common.Encryption.cs | 242 ++ .../App/Class/Common.Event.cs | 272 +++ .../App/Class/Common.Helper.cs | 494 ++++ .../App/Class/Common.InitAndCleanup.cs | 265 +++ .../App/Class/Common.Launch.cs | 307 +++ .../App/Class/Common.Log.cs | 509 ++++ .../App/Class/Common.MachineStuff.cs | 1130 +++++++++ .../App/Class/Common.Package.cs | 262 ++ .../App/Class/Common.Receiver.cs | 428 ++++ .../App/Class/Common.Service.cs | 160 ++ .../App/Class/Common.ShutdownWithPowerToys.cs | 28 + .../App/Class/Common.VK.cs | 130 + .../App/Class/Common.WinAPI.cs | 360 +++ .../MouseWithoutBorders/App/Class/Common.cs | 1555 ++++++++++++ .../App/Class/CustomCursor.cs | 150 ++ .../App/Class/EasyMouseOption.cs | 14 + .../App/Class/Extensions.cs | 55 + .../App/Class/IClipboardHelper.cs | 636 +++++ .../App/Class/InputHook.cs | 705 ++++++ .../App/Class/InputSimulation.cs | 467 ++++ .../App/Class/MachinePool.cs | 342 +++ .../App/Class/MachinePoolHelpers.cs | 40 + .../App/Class/MouseLocation.cs | 20 + .../App/Class/MyKnownBitmap.cs | 159 ++ .../App/Class/NativeMethods.cs | 945 ++++++++ .../MouseWithoutBorders/App/Class/Program.cs | 402 ++++ .../MouseWithoutBorders/App/Class/Setting.cs | 1039 ++++++++ .../App/Class/SeverityLevel.cs | 21 + .../App/Class/SocketStuff.cs | 2099 +++++++++++++++++ .../App/Class/TcpServer.cs | 176 ++ .../App/Control/ColorBorderField.Designer.cs | 60 + .../App/Control/ColorBorderField.cs | 123 + .../App/Control/ColorBorderField.resx | 120 + .../App/Control/ImageButton.Designer.cs | 44 + .../App/Control/ImageButton.cs | 146 ++ .../App/Control/ImageButton.resx | 120 + .../App/Control/ImageRadioButton.Designer.cs | 44 + .../App/Control/ImageRadioButton.cs | 91 + .../App/Control/ImageRadioButton.resx | 120 + .../App/Control/Machine.cs | 207 ++ .../App/Control/Machine.designer.cs | 125 + .../App/Control/Machine.resx | 126 + .../App/Control/Machine2.Designer.cs | 168 ++ .../App/Control/Machine2.resx | 120 + .../App/Control/MachineMatrix.Designer.cs | 99 + .../App/Control/MachineMatrix.resx | 120 + .../App/Exceptions/ExpectedSocketException.cs | 24 + .../App/Exceptions/KnownException.cs | 16 + .../Exceptions/NotPhysicalConsoleException.cs | 14 + .../App/Form/Settings/PageEventArgs.cs | 18 + .../Form/Settings/SettingsForm.Designer.cs | 95 + .../App/Form/Settings/SettingsForm.cs | 140 ++ .../App/Form/Settings/SettingsForm.resx | 198 ++ .../Settings/SettingsFormPage.Designer.cs | 87 + .../App/Form/Settings/SettingsFormPage.cs | 66 + .../App/Form/Settings/SettingsFormPage.resx | 120 + .../Form/Settings/SettingsPage.Designer.cs | 136 ++ .../App/Form/Settings/SettingsPage.resx | 120 + .../Form/Settings/SettingsPage1.Designer.cs | 154 ++ .../App/Form/Settings/SettingsPage1.resx | 120 + .../Form/Settings/SettingsPage2.Designer.cs | 123 + .../App/Form/Settings/SettingsPage2.resx | 120 + .../Form/Settings/SettingsPage3.Designer.cs | 233 ++ .../App/Form/Settings/SettingsPage3.resx | 120 + .../Form/Settings/SettingsPage4.Designer.cs | 697 ++++++ .../App/Form/Settings/SettingsPage4.resx | 120 + .../App/Form/Settings/SetupPage1.Designer.cs | 196 ++ .../App/Form/Settings/SetupPage1.cs | 28 + .../App/Form/Settings/SetupPage1.resx | 120 + .../App/Form/Settings/SetupPage2a.Designer.cs | 214 ++ .../App/Form/Settings/SetupPage2a.cs | 115 + .../App/Form/Settings/SetupPage2a.resx | 120 + .../Form/Settings/SetupPage2aa.Designer.cs | 104 + .../App/Form/Settings/SetupPage2aa.cs | 14 + .../App/Form/Settings/SetupPage2aa.resx | 120 + .../Form/Settings/SetupPage2ab.Designer.cs | 166 ++ .../App/Form/Settings/SetupPage2ab.cs | 16 + .../App/Form/Settings/SetupPage2ab.resx | 120 + .../App/Form/Settings/SetupPage2b.Designer.cs | 199 ++ .../App/Form/Settings/SetupPage2b.cs | 23 + .../App/Form/Settings/SetupPage2b.resx | 120 + .../App/Form/Settings/SetupPage3a.Designer.cs | 125 + .../App/Form/Settings/SetupPage3a.cs | 149 ++ .../App/Form/Settings/SetupPage3a.resx | 120 + .../App/Form/Settings/SetupPage4.Designer.cs | 202 ++ .../App/Form/Settings/SetupPage4.cs | 23 + .../App/Form/Settings/SetupPage4.resx | 120 + .../App/Form/Settings/SetupPage5.Designer.cs | 159 ++ .../App/Form/Settings/SetupPage5.cs | 23 + .../App/Form/Settings/SetupPage5.resx | 120 + .../App/Form/frmAbout.Designer.cs | 164 ++ .../MouseWithoutBorders/App/Form/frmAbout.cs | 124 + .../App/Form/frmAbout.resx | 195 ++ .../App/Form/frmInputCallback.Designer.cs | 59 + .../App/Form/frmInputCallback.cs | 87 + .../App/Form/frmInputCallback.resx | 195 ++ .../App/Form/frmLogon.Designer.cs | 77 + .../MouseWithoutBorders/App/Form/frmLogon.cs | 51 + .../App/Form/frmLogon.resx | 195 ++ .../App/Form/frmMatrix.Designer.cs | 1160 +++++++++ .../MouseWithoutBorders/App/Form/frmMatrix.cs | 1166 +++++++++ .../App/Form/frmMatrix.resx | 241 ++ .../App/Form/frmMessage.Designer.cs | 146 ++ .../App/Form/frmMessage.cs | 53 + .../App/Form/frmMessage.resx | 208 ++ .../App/Form/frmMouseCursor.Designer.cs | 60 + .../App/Form/frmMouseCursor.cs | 54 + .../App/Form/frmMouseCursor.resx | 130 + .../App/Form/frmScreen.Designer.cs | 308 +++ .../MouseWithoutBorders/App/Form/frmScreen.cs | 1202 ++++++++++ .../App/Form/frmScreen.resx | 302 +++ .../App/Helper/FormDot.Designer.cs | 59 + .../MouseWithoutBorders/App/Helper/FormDot.cs | 84 + .../App/Helper/FormDot.resx | 120 + .../App/Helper/FormHelper.Designer.cs | 77 + .../App/Helper/FormHelper.cs | 782 ++++++ .../App/Helper/FormHelper.resx | 198 ++ .../Helper/MouseWithoutBordersHelper.csproj | 84 + .../App/Helper/NativeMethods.cs | 874 +++++++ .../MouseWithoutBorders/App/Helper/Program.cs | 80 + .../App/Icon/BigClipboard.ico | Bin 0 -> 4150 bytes .../MouseWithoutBorders/App/Icon/DragDrop.ico | Bin 0 -> 3262 bytes .../MouseWithoutBorders/App/Icon/DragDrop.jpg | Bin 0 -> 1002 bytes .../App/Icon/MachineDisabled.bmp | Bin 0 -> 3618 bytes .../App/Icon/MachineEnabled.bmp | Bin 0 -> 3618 bytes .../MouseWithoutBorders/App/Icon/Multiple.ico | Bin 0 -> 4150 bytes .../MouseWithoutBorders/App/Icon/Single.ico | Bin 0 -> 4150 bytes .../App/Icon/SmallClipboard.ico | Bin 0 -> 4150 bytes .../App/Icon/advanced_button_click.png | Bin 0 -> 4168 bytes .../App/Icon/advanced_button_hover.png | Bin 0 -> 4158 bytes .../App/Icon/advanced_button_normal.png | Bin 0 -> 3840 bytes .../App/Icon/back_button_click.png | Bin 0 -> 3132 bytes .../App/Icon/back_button_hover.png | Bin 0 -> 3140 bytes .../App/Icon/back_button_normal.png | Bin 0 -> 2999 bytes .../App/Icon/checkbox_checked.png | Bin 0 -> 2874 bytes .../App/Icon/checkbox_unchecked.png | Bin 0 -> 2822 bytes .../App/Icon/close_button_click.png | Bin 0 -> 4306 bytes .../App/Icon/close_button_hover.png | Bin 0 -> 4107 bytes .../App/Icon/close_button_normal.png | Bin 0 -> 3609 bytes .../App/Icon/close_window_click.png | Bin 0 -> 2992 bytes .../App/Icon/close_window_hover.png | Bin 0 -> 2989 bytes .../App/Icon/collapse_button_click.png | Bin 0 -> 3044 bytes .../App/Icon/collapse_button_hover.png | Bin 0 -> 3007 bytes .../App/Icon/collapse_button_normal.png | Bin 0 -> 2895 bytes .../App/Icon/combined_example.png | Bin 0 -> 3674 bytes .../App/Icon/computer_button_click.png | Bin 0 -> 3933 bytes .../App/Icon/computer_button_hover.png | Bin 0 -> 3938 bytes .../App/Icon/computer_button_normal.png | Bin 0 -> 3651 bytes .../App/Icon/computer_connected.png | Bin 0 -> 3156 bytes .../App/Icon/computer_disconnected.png | Bin 0 -> 3206 bytes .../App/Icon/computer_small_connected.png | Bin 0 -> 3041 bytes .../App/Icon/computer_small_disconnected.png | Bin 0 -> 3110 bytes .../App/Icon/copy_paste_example.png | Bin 0 -> 5326 bytes .../App/Icon/dialog_background.png | Bin 0 -> 33463 bytes .../App/Icon/done_button_click.png | Bin 0 -> 4171 bytes .../App/Icon/done_button_hover.png | Bin 0 -> 4059 bytes .../App/Icon/done_button_normal.png | Bin 0 -> 3583 bytes .../App/Icon/drag_example.png | Bin 0 -> 4417 bytes .../App/Icon/expand_button_click.png | Bin 0 -> 3041 bytes .../App/Icon/expand_button_highlight.png | Bin 0 -> 3025 bytes .../App/Icon/expand_button_normal.png | Bin 0 -> 2904 bytes .../App/Icon/ico_disable.ico | Bin 0 -> 2998 bytes .../App/Icon/ico_enable_all.ico | Bin 0 -> 2998 bytes .../App/Icon/ico_enable_all_s.ico | Bin 0 -> 2998 bytes .../App/Icon/ico_enable_one.ico | Bin 0 -> 2998 bytes .../App/Icon/keyboard_button_click.png | Bin 0 -> 4184 bytes .../App/Icon/keyboard_button_hover.png | Bin 0 -> 4166 bytes .../App/Icon/keyboard_button_normal.png | Bin 0 -> 3903 bytes .../App/Icon/keyboard_example.png | Bin 0 -> 4631 bytes .../App/Icon/large_drag_tile.png | Bin 0 -> 2995 bytes .../App/Icon/link_button_click.png | Bin 0 -> 3977 bytes .../App/Icon/link_button_disabled.png | Bin 0 -> 3715 bytes .../App/Icon/link_button_hover.png | Bin 0 -> 3954 bytes .../App/Icon/link_button_normal.png | Bin 0 -> 3494 bytes .../MouseWithoutBorders/App/Icon/mouse.png | Bin 0 -> 840 bytes .../App/Icon/next_button_click.png | Bin 0 -> 4168 bytes .../App/Icon/next_button_hover.png | Bin 0 -> 4067 bytes .../App/Icon/next_button_normal.png | Bin 0 -> 3598 bytes .../App/Icon/no_button_click.png | Bin 0 -> 4141 bytes .../App/Icon/no_button_hover.png | Bin 0 -> 4051 bytes .../App/Icon/no_button_normal.png | Bin 0 -> 3541 bytes .../App/Icon/one_row_button_checked.png | Bin 0 -> 2907 bytes .../App/Icon/one_row_button_unchecked.png | Bin 0 -> 2889 bytes .../App/Icon/radio_button_checked.png | Bin 0 -> 2874 bytes .../App/Icon/radio_button_unchecked.png | Bin 0 -> 2871 bytes .../App/Icon/red_close_button_click.png | Bin 0 -> 2852 bytes .../App/Icon/red_close_button_hover.png | Bin 0 -> 2861 bytes .../App/Icon/red_close_button_normal.png | Bin 0 -> 2848 bytes .../App/Icon/small_drag_tile.png | Bin 0 -> 2952 bytes .../App/Icon/small_link_button_click.png | Bin 0 -> 3794 bytes .../App/Icon/small_link_button_hover.png | Bin 0 -> 3797 bytes .../App/Icon/small_link_button_normal.png | Bin 0 -> 3616 bytes .../App/Icon/switch_off_click.png | Bin 0 -> 2870 bytes .../App/Icon/switch_off_hover.png | Bin 0 -> 2870 bytes .../App/Icon/switch_off_normal.png | Bin 0 -> 2870 bytes .../App/Icon/switch_on_click.png | Bin 0 -> 2867 bytes .../App/Icon/switch_on_hover.png | Bin 0 -> 2869 bytes .../App/Icon/switch_on_normal.png | Bin 0 -> 2869 bytes .../App/Icon/text_button_click.png | Bin 0 -> 3147 bytes .../App/Icon/text_button_hover.png | Bin 0 -> 3154 bytes .../App/Icon/text_button_normal.png | Bin 0 -> 3003 bytes .../App/Icon/two_row_button_checked.png | Bin 0 -> 2896 bytes .../App/Icon/two_row_button_unchecked.png | Bin 0 -> 2879 bytes .../App/Icon/yes_button_click.png | Bin 0 -> 4180 bytes .../App/Icon/yes_button_hover.png | Bin 0 -> 4099 bytes .../App/Icon/yes_button_normal.png | Bin 0 -> 3602 bytes src/modules/MouseWithoutBorders/App/Logo.ico | Bin 0 -> 139350 bytes .../MouseWithoutBorders/App/Logo/Logo.png | Bin 0 -> 4709 bytes .../MouseWithoutBorders/App/Logo/MWB.png | Bin 0 -> 962 bytes .../MouseWithoutBorders/App/Logo/MWBEx.png | Bin 0 -> 2145 bytes .../App/MouseWithoutBorders.csproj | 248 ++ .../App/MouseWithoutBorders.exe.manifest | 78 + .../App/Properties/Resources.Designer.cs | 853 +++++++ .../App/Properties/Resources.resx | 358 +++ .../Service/MouseWithoutBordersService.csproj | 89 + .../App/Service/NativeMethods.cs | 424 ++++ .../App/Service/Program.cs | 57 + .../MouseWithoutBorders/App/Service/Worker.cs | 179 ++ ...ithoutBordersClipboardFileTransferEvent.cs | 16 + .../MouseWithoutBordersDragAndDropEvent.cs | 16 + .../MouseWithoutBordersMultipleModeEvent.cs | 16 + .../MouseWithoutBordersOldUIOpenedEvent.cs | 16 + .../MouseWithoutBordersOldUIQuitEvent.cs | 16 + ...ouseWithoutBordersOldUIReconfigureEvent.cs | 16 + .../MouseWithoutBordersStartedEvent.cs | 16 + .../MouseWithoutBorders/App/appsettings.json | 8 + .../MouseWithoutBordersModuleInterface.rc | 40 + ...MouseWithoutBordersModuleInterface.vcxproj | 77 + ...houtBordersModuleInterface.vcxproj.filters | 46 + ...seWithoutBordersModuleInterface.vcxproj.rc | 40 + .../ModuleInterface/dllmain.cpp | 616 +++++ .../generateSecurityDescriptor.h | 10 + .../ModuleInterface/packages.config | 4 + .../ModuleInterface/pch.cpp | 1 + .../MouseWithoutBorders/ModuleInterface/pch.h | 17 + .../ModuleInterface/resource.h | 21 + .../ModuleInterface/trace.cpp | 64 + .../ModuleInterface/trace.h | 17 + src/runner/main.cpp | 1 + .../Settings.UI.Library/EnabledModules.cs | 16 + .../Settings.UI.Library/IntProperty.cs | 11 + .../MouseWithoutBordersProperties.cs | 164 ++ .../MouseWithoutBordersSettings.cs | 55 + .../Settings.UI.Library/SettingPath.cs | 16 +- .../Settings.UI.Library/SettingsUtils.cs | 4 +- .../Settings.UI.Library/Utilities/Helper.cs | 19 +- .../Settings.UI.UnitTests.csproj | 7 + src/settings-ui/Settings.UI/App.xaml.cs | 1 + .../FluentIconsMouseWithoutBorders.png | Bin 0 -> 1373 bytes .../Assets/Modules/MouseWithoutBorders.png | Bin 0 -> 24504 bytes .../Modules/OOBE/MouseWithoutBorders.png | Bin 0 -> 87511 bytes .../NegativeBoolToVisibilityConverter.cs | 29 + .../Settings.UI/Helpers/AsyncCommand.cs | 42 + .../Helpers/IndexedObservableCollection.cs | 58 + .../Settings.UI/Helpers/Observable.cs | 27 - .../Settings.UI/MainWindow.xaml.cs | 3 + .../OOBE/Enums/PowerToysModules.cs | 1 + .../OOBE/Views/OobeMouseWithoutBorders.xaml | 52 + .../Views/OobeMouseWithoutBorders.xaml.cs | 47 + .../Settings.UI/OOBE/Views/OobeShellPage.xaml | 4 + .../OOBE/Views/OobeShellPage.xaml.cs | 6 + .../Settings.UI/PowerToys.Settings.csproj | 8 + .../Settings.UI/Strings/en-us/Resources.resw | 286 +++ .../ViewModels/Flyout/AllAppsViewModel.cs | 6 + .../MouseWithoutBordersViewModel.cs | 1108 +++++++++ .../Settings.UI/ViewModels/ShellViewModel.cs | 2 +- .../Views/MouseWithoutBordersPage.xaml | 443 ++++ .../Views/MouseWithoutBordersPage.xaml.cs | 176 ++ .../Settings.UI/Views/ShellPage.xaml | 5 + .../BugReportTool/ProcessesList.cpp | 3 + .../BugReportTool/ReportGPOValues.cpp | 1 + 304 files changed, 37235 insertions(+), 134 deletions(-) create mode 100644 doc/images/icons/MouseWithoutBorders.png create mode 100644 installer/PowerToysSetup/MouseWithoutBorders.wxs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.Clipboard.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.DragDrop.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.Encryption.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.Event.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.Helper.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.InitAndCleanup.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.Launch.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.Log.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.MachineStuff.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.Package.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.Receiver.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.Service.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.ShutdownWithPowerToys.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.VK.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.WinAPI.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Common.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/CustomCursor.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/EasyMouseOption.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Extensions.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/IClipboardHelper.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/InputHook.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/InputSimulation.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/MachinePool.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/MachinePoolHelpers.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/MouseLocation.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/MyKnownBitmap.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/NativeMethods.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Program.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/Setting.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/SeverityLevel.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/SocketStuff.cs create mode 100644 src/modules/MouseWithoutBorders/App/Class/TcpServer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Control/ColorBorderField.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Control/ColorBorderField.cs create mode 100644 src/modules/MouseWithoutBorders/App/Control/ColorBorderField.resx create mode 100644 src/modules/MouseWithoutBorders/App/Control/ImageButton.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Control/ImageButton.cs create mode 100644 src/modules/MouseWithoutBorders/App/Control/ImageButton.resx create mode 100644 src/modules/MouseWithoutBorders/App/Control/ImageRadioButton.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Control/ImageRadioButton.cs create mode 100644 src/modules/MouseWithoutBorders/App/Control/ImageRadioButton.resx create mode 100644 src/modules/MouseWithoutBorders/App/Control/Machine.cs create mode 100644 src/modules/MouseWithoutBorders/App/Control/Machine.designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Control/Machine.resx create mode 100644 src/modules/MouseWithoutBorders/App/Control/Machine2.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Control/Machine2.resx create mode 100644 src/modules/MouseWithoutBorders/App/Control/MachineMatrix.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Control/MachineMatrix.resx create mode 100644 src/modules/MouseWithoutBorders/App/Exceptions/ExpectedSocketException.cs create mode 100644 src/modules/MouseWithoutBorders/App/Exceptions/KnownException.cs create mode 100644 src/modules/MouseWithoutBorders/App/Exceptions/NotPhysicalConsoleException.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/PageEventArgs.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsForm.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsForm.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsForm.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsFormPage.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsFormPage.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsFormPage.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsPage.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsPage.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsPage1.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsPage1.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsPage2.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsPage2.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsPage3.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsPage3.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsPage4.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SettingsPage4.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage1.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage1.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage1.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2a.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2a.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2a.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2aa.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2aa.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2aa.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2ab.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2ab.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2ab.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2b.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2b.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2b.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage3a.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage3a.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage3a.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage4.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage4.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage4.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage5.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage5.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage5.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmAbout.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmAbout.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmAbout.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmInputCallback.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmInputCallback.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmInputCallback.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmLogon.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmLogon.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmLogon.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmMatrix.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmMatrix.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmMatrix.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmMessage.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmMessage.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmMessage.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmMouseCursor.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmMouseCursor.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmMouseCursor.resx create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmScreen.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmScreen.cs create mode 100644 src/modules/MouseWithoutBorders/App/Form/frmScreen.resx create mode 100644 src/modules/MouseWithoutBorders/App/Helper/FormDot.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Helper/FormDot.cs create mode 100644 src/modules/MouseWithoutBorders/App/Helper/FormDot.resx create mode 100644 src/modules/MouseWithoutBorders/App/Helper/FormHelper.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Helper/FormHelper.cs create mode 100644 src/modules/MouseWithoutBorders/App/Helper/FormHelper.resx create mode 100644 src/modules/MouseWithoutBorders/App/Helper/MouseWithoutBordersHelper.csproj create mode 100644 src/modules/MouseWithoutBorders/App/Helper/NativeMethods.cs create mode 100644 src/modules/MouseWithoutBorders/App/Helper/Program.cs create mode 100644 src/modules/MouseWithoutBorders/App/Icon/BigClipboard.ico create mode 100644 src/modules/MouseWithoutBorders/App/Icon/DragDrop.ico create mode 100644 src/modules/MouseWithoutBorders/App/Icon/DragDrop.jpg create mode 100644 src/modules/MouseWithoutBorders/App/Icon/MachineDisabled.bmp create mode 100644 src/modules/MouseWithoutBorders/App/Icon/MachineEnabled.bmp create mode 100644 src/modules/MouseWithoutBorders/App/Icon/Multiple.ico create mode 100644 src/modules/MouseWithoutBorders/App/Icon/Single.ico create mode 100644 src/modules/MouseWithoutBorders/App/Icon/SmallClipboard.ico create mode 100644 src/modules/MouseWithoutBorders/App/Icon/advanced_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/advanced_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/advanced_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/back_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/back_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/back_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/checkbox_checked.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/checkbox_unchecked.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/close_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/close_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/close_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/close_window_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/close_window_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/collapse_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/collapse_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/collapse_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/combined_example.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/computer_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/computer_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/computer_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/computer_connected.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/computer_disconnected.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/computer_small_connected.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/computer_small_disconnected.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/copy_paste_example.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/dialog_background.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/done_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/done_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/done_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/drag_example.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/expand_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/expand_button_highlight.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/expand_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/ico_disable.ico create mode 100644 src/modules/MouseWithoutBorders/App/Icon/ico_enable_all.ico create mode 100644 src/modules/MouseWithoutBorders/App/Icon/ico_enable_all_s.ico create mode 100644 src/modules/MouseWithoutBorders/App/Icon/ico_enable_one.ico create mode 100644 src/modules/MouseWithoutBorders/App/Icon/keyboard_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/keyboard_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/keyboard_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/keyboard_example.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/large_drag_tile.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/link_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/link_button_disabled.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/link_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/link_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/mouse.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/next_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/next_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/next_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/no_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/no_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/no_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/one_row_button_checked.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/one_row_button_unchecked.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/radio_button_checked.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/radio_button_unchecked.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/red_close_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/red_close_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/red_close_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/small_drag_tile.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/small_link_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/small_link_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/small_link_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/switch_off_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/switch_off_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/switch_off_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/switch_on_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/switch_on_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/switch_on_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/text_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/text_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/text_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/two_row_button_checked.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/two_row_button_unchecked.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/yes_button_click.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/yes_button_hover.png create mode 100644 src/modules/MouseWithoutBorders/App/Icon/yes_button_normal.png create mode 100644 src/modules/MouseWithoutBorders/App/Logo.ico create mode 100644 src/modules/MouseWithoutBorders/App/Logo/Logo.png create mode 100644 src/modules/MouseWithoutBorders/App/Logo/MWB.png create mode 100644 src/modules/MouseWithoutBorders/App/Logo/MWBEx.png create mode 100644 src/modules/MouseWithoutBorders/App/MouseWithoutBorders.csproj create mode 100644 src/modules/MouseWithoutBorders/App/MouseWithoutBorders.exe.manifest create mode 100644 src/modules/MouseWithoutBorders/App/Properties/Resources.Designer.cs create mode 100644 src/modules/MouseWithoutBorders/App/Properties/Resources.resx create mode 100644 src/modules/MouseWithoutBorders/App/Service/MouseWithoutBordersService.csproj create mode 100644 src/modules/MouseWithoutBorders/App/Service/NativeMethods.cs create mode 100644 src/modules/MouseWithoutBorders/App/Service/Program.cs create mode 100644 src/modules/MouseWithoutBorders/App/Service/Worker.cs create mode 100644 src/modules/MouseWithoutBorders/App/Telemetry/MouseWithoutBordersClipboardFileTransferEvent.cs create mode 100644 src/modules/MouseWithoutBorders/App/Telemetry/MouseWithoutBordersDragAndDropEvent.cs create mode 100644 src/modules/MouseWithoutBorders/App/Telemetry/MouseWithoutBordersMultipleModeEvent.cs create mode 100644 src/modules/MouseWithoutBorders/App/Telemetry/MouseWithoutBordersOldUIOpenedEvent.cs create mode 100644 src/modules/MouseWithoutBorders/App/Telemetry/MouseWithoutBordersOldUIQuitEvent.cs create mode 100644 src/modules/MouseWithoutBorders/App/Telemetry/MouseWithoutBordersOldUIReconfigureEvent.cs create mode 100644 src/modules/MouseWithoutBorders/App/Telemetry/MouseWithoutBordersStartedEvent.cs create mode 100644 src/modules/MouseWithoutBorders/App/appsettings.json create mode 100644 src/modules/MouseWithoutBorders/ModuleInterface/MouseWithoutBordersModuleInterface.rc create mode 100644 src/modules/MouseWithoutBorders/ModuleInterface/MouseWithoutBordersModuleInterface.vcxproj create mode 100644 src/modules/MouseWithoutBorders/ModuleInterface/MouseWithoutBordersModuleInterface.vcxproj.filters create mode 100644 src/modules/MouseWithoutBorders/ModuleInterface/MouseWithoutBordersModuleInterface.vcxproj.rc create mode 100644 src/modules/MouseWithoutBorders/ModuleInterface/dllmain.cpp create mode 100644 src/modules/MouseWithoutBorders/ModuleInterface/generateSecurityDescriptor.h create mode 100644 src/modules/MouseWithoutBorders/ModuleInterface/packages.config create mode 100644 src/modules/MouseWithoutBorders/ModuleInterface/pch.cpp create mode 100644 src/modules/MouseWithoutBorders/ModuleInterface/pch.h create mode 100644 src/modules/MouseWithoutBorders/ModuleInterface/resource.h create mode 100644 src/modules/MouseWithoutBorders/ModuleInterface/trace.cpp create mode 100644 src/modules/MouseWithoutBorders/ModuleInterface/trace.h create mode 100644 src/settings-ui/Settings.UI.Library/MouseWithoutBordersProperties.cs create mode 100644 src/settings-ui/Settings.UI.Library/MouseWithoutBordersSettings.cs create mode 100644 src/settings-ui/Settings.UI/Assets/FluentIcons/FluentIconsMouseWithoutBorders.png create mode 100644 src/settings-ui/Settings.UI/Assets/Modules/MouseWithoutBorders.png create mode 100644 src/settings-ui/Settings.UI/Assets/Modules/OOBE/MouseWithoutBorders.png create mode 100644 src/settings-ui/Settings.UI/Converters/NegativeBoolToVisibilityConverter.cs create mode 100644 src/settings-ui/Settings.UI/Helpers/AsyncCommand.cs create mode 100644 src/settings-ui/Settings.UI/Helpers/IndexedObservableCollection.cs delete mode 100644 src/settings-ui/Settings.UI/Helpers/Observable.cs create mode 100644 src/settings-ui/Settings.UI/OOBE/Views/OobeMouseWithoutBorders.xaml create mode 100644 src/settings-ui/Settings.UI/OOBE/Views/OobeMouseWithoutBorders.xaml.cs create mode 100644 src/settings-ui/Settings.UI/ViewModels/MouseWithoutBordersViewModel.cs create mode 100644 src/settings-ui/Settings.UI/Views/MouseWithoutBordersPage.xaml create mode 100644 src/settings-ui/Settings.UI/Views/MouseWithoutBordersPage.xaml.cs diff --git a/.github/actions/spell-check/allow/names.txt b/.github/actions/spell-check/allow/names.txt index 97520c020f80..76ecf535e08c 100644 --- a/.github/actions/spell-check/allow/names.txt +++ b/.github/actions/spell-check/allow/names.txt @@ -1,19 +1,49 @@ ABradley +Aleks +Ashish azchohfi +Baltazar +Bao bdoserror +Chinh +Coplen crutkas dependabot Deuchert +ductdo edwinzap +Essey +Garside +Gershaft hallatore +Harmath +Hemmerlein +Huynh +Jaswal jefflord +Kamra +Karthick +Krigun +Luecking +Mahalingam mshtang +Myrvold naveensrinivasan nVidia +Ponten +Pooja robmen +Schoen skycommand snickler sinclairinat +streamjsonrpc +tilovell TheJoeFin +Triet Vidia +WEX +WWL yifan +Yuniardi +Zoltan diff --git a/.github/actions/spell-check/excludes.txt b/.github/actions/spell-check/excludes.txt index d57db991783f..6f2fd548b27b 100644 --- a/.github/actions/spell-check/excludes.txt +++ b/.github/actions/spell-check/excludes.txt @@ -81,6 +81,9 @@ ^\Qsrc/common/ManagedCommon/ColorFormatHelper.cs\E$ ^\Qsrc/modules/colorPicker/ColorPickerUI/Shaders/GridShader.cso\E$ ^\Qsrc/modules/MouseUtils/MouseJumpUI/MainForm.resx\E$ +^\Qsrc/modules/MouseWithoutBorders/App/Form/frmAbout.cs\E$ +^\Qsrc/modules/MouseWithoutBorders/App/Properties/AssemblyInfo.cs\E$ +^\Qsrc/modules/MouseWithoutBorders/ModuleInterface/generateSecurityDescriptor.h\E$ ^\Qsrc/settings-ui/Settings.UI.UnitTests/BackwardsCompatibility/TestFiles/CorruptJson/Microsoft/PowerToys/settings.json\E$ ^\Qsrc/settings-ui/Settings.UI.UnitTests/BackwardsCompatibility/TestFiles/v0.18.2/Microsoft/PowerToys/PowerRename/power-rename-ui-flags\E$ ^\Qsrc/settings-ui/Settings.UI.UnitTests/BackwardsCompatibility/TestFiles/v0.19.2/Microsoft/PowerToys/PowerRename/power-rename-ui-flags\E$ @@ -100,6 +103,10 @@ ^src/modules/imageresizer/dll/ContextMenuHandler\.rgs$ ^src/modules/imageresizer/dll/ImageResizerExt\.rgs$ ^src/modules/MouseUtils/MouseJumpUI/NativeMethods/User32/UI/WindowsAndMessaging/User32.SYSTEM_METRICS_INDEX.cs$ +^src/modules/MouseWithoutBorders/App/Form/.*\.resx$ +^src/modules/MouseWithoutBorders/App/Form/.*\.Designer\.cs$ +^src/modules/MouseWithoutBorders/App/Helper/.*\.resx$ +^src/modules/MouseWithoutBorders/App/.*/NativeMethods\.cs$ ^src/modules/peek/Peek\.Common/NativeMethods\.txt$ ^src/modules/powerrename/testapp/PowerRenameTest\.vcxproj\.filters$ ^src/modules/previewpane/PreviewPaneUnitTests/HelperFiles/MarkdownWithHTMLImageTag\.txt$ diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index e5c4b5ef8741..2292d55e1ab5 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -7,6 +7,7 @@ AACD AAD AADF abap +abcdefghjkmnpqrstuvxyz ABE abgr abi @@ -24,6 +25,7 @@ ACFC ACFF Acl aclapi +AClient AColumn acrt activatable @@ -31,6 +33,7 @@ ACTIVATEAPP activationaction ADDUNDORECORD ADifferent +adio administra ADMINS adml @@ -60,7 +63,7 @@ ALLINPUT ALLOWUNDO ALLVIEW ALPHATYPE -Altdown +altdown alwaysontop amd AModifier @@ -94,10 +97,12 @@ appmanifest APPNAME appref apps +appsettings appwindow appwiz APSTUDIO AQS +ARandom ARCHITEW arcosh ARemapped @@ -153,6 +158,7 @@ BCB BCCE BCCEA bck +Bcl BDB BDBAD BDCC @@ -221,6 +227,7 @@ buildtransitive BUTTONUP BVal BValue +byapp BYPOSITION bytearray CABD @@ -267,6 +274,7 @@ CFEE CFFEE CFFF cguid +CHANGECBCHAIN changecursor Changemove chdir @@ -291,9 +299,11 @@ clickonce CLIENTEDGE clientid clientside +CLIPBOARDUPDATE CLIPCHILDREN CLIPSIBLINGS Cloneable +closesocket clrcall Cls CLSCTX @@ -342,6 +352,7 @@ comsuppw comsuppwd comutil concrt +CONFIGW CONFLICTINGMODIFIERKEY CONFLICTINGMODIFIERSHORTCUT CONOUT @@ -458,6 +469,7 @@ debian debugbreak DECLAR declspec +decryptor DED Dedup DEFAULTBOOTSTRAPPERINSTALLFOLDER @@ -482,6 +494,8 @@ depersist deprioritized depsfileslistspath deref +READOBJECTS +WRITEOBJECTS DESKTOPABSOLUTEEDITING DESKTOPABSOLUTEPARSING desktopshorcutinstalled @@ -525,6 +539,7 @@ DPolicy DPSAPI DQTAT DQTYPE +DRAWCLIPBOARD DRAWFRAME drawingcolor dreamsofameaningfullife @@ -607,8 +622,10 @@ Emoji ENABLEDELAYEDEXPANSION enabledisable ENABLEDPOPUP +encryptor endpointvolume endregion +ENDSESSION ENTERSIZEMOVE ENU EOAC @@ -626,6 +643,7 @@ esize esrp estructuredtext etl +etstat etw EUQ eurochange @@ -721,6 +739,7 @@ FILEVERSION Filtergraph Filterkeyboard Filterx +Finalizers findfast firefox FIXEDFILEINFO @@ -733,6 +752,7 @@ FORCEMINIMIZE formatetc FRAMECHANGED frankychen +frm Froml FROMTOUCH FSCTL @@ -762,10 +782,13 @@ GETDPISCALEDSIZE GETICON GETMINMAXINFO GETPROPERTYSTOREFLAGS +GETSCREENSAVERRUNNING +GETSECKEY GETSTATE GETTEXT GETTEXTLENGTH GHND +Globbing GMEM GNumber google @@ -799,6 +822,7 @@ Hashtable hashtag HASHVAL hbitmap +hbm hbmp hbr HBRBACKGROUND @@ -973,6 +997,7 @@ Interlop INTRESOURCE INVALIDARG invalidoperatioexception +invalidkey IPalette ipc ipcmanager @@ -1023,6 +1048,8 @@ jyuwono KBDLLHOOKSTRUCT kbm kdc +keybd +KEYBDDATA KEYBDINPUT keyboardeventhandlers keyboardmanager @@ -1124,6 +1151,7 @@ LPCWSTR lpdw lpfn LPINPUT +LPQUERY lpmi LPMINMAXINFO LPMONITORINFO @@ -1138,6 +1166,7 @@ lpt LPTHREAD LPTOP lptpm +LPTR LPTSTR LPVOID LPW @@ -1253,6 +1282,7 @@ monitorinfof Monthand Moq MOUSEACTIVATE +MOUSEDATA MOUSEEVENTF MOUSEHWHEEL MOUSEINPUT @@ -1283,6 +1313,7 @@ MSIXCA MSLLHOOKSTRUCT Mso msp +mspaint msrc msstore mst @@ -1296,8 +1327,12 @@ mvvm myfile MYICON mysql +mwb +MWBEx NAMECHANGE nameof +namespaceanddescendants +nao NCACTIVATE ncc NCCALCSIZE @@ -1344,6 +1379,7 @@ NLD NLog nls NLSTEXT +NNN NOACTIVATE NOAGGREGATION NOASYNC @@ -1507,6 +1543,7 @@ perfmon pesi petabyte peteblois +pevent PEXCEPTION pfn pfo @@ -1704,6 +1741,7 @@ remappings REMAPSUCCESSFUL REMAPUNSUCCESSFUL Remotable +remoteip Removedir Removelnk renamable @@ -1770,6 +1808,7 @@ rungameid RUNLEVEL runsettings runtimeclass +runtimeconfig runtimedepsjsonpath runtimeobject runtimepack @@ -1816,6 +1855,7 @@ sendvirtualinput Seperate Seraphima serverside +Ses SETCONTEXT setcursor setenv @@ -1903,6 +1943,7 @@ SMALLICON smartphone SMTO snd +sni snwprintf softline somil @@ -2009,6 +2050,7 @@ SYSICONINDEX SYSKEY syskeydown SYSKEYUP +SYSLIB SYSMENU SYSTEMAPPS systemroot @@ -2036,6 +2078,7 @@ tchar tcl Tcollab tcs +tcp tcscpy TCustom tdbuild @@ -2141,6 +2184,7 @@ unremapped unsubscribe unvirtualized UOffset +UOI Updatelayout UPGRADINGPRODUCTCODE Uptool @@ -2285,6 +2329,7 @@ winget wingetcreate Winhook winkey +winlogon WINL winmd winmm @@ -2293,7 +2338,9 @@ winres winrt winsdk winsdkver +Winsock winspool +winsta winternl WINTHRESHOLD winui @@ -2342,12 +2389,16 @@ WResize writefile Wrk wrl +WSAEADDRINUSE +WSAEADDRNOTAVAIL +WSAECONNRESET wscui wsf wsh wsl wss wstr +wsystem wsz wtoi WTS @@ -2375,6 +2426,7 @@ XIncrement XLoc XNamespace XOffset +XPels XPixel XResource xsi @@ -2388,6 +2440,7 @@ yinle yinwang yinyue YOffset +YPels ypescript YQuantized YResolution diff --git a/.github/actions/spell-check/patterns.txt b/.github/actions/spell-check/patterns.txt index f17c5fb2aa3a..5d9877ade764 100644 --- a/.github/actions/spell-check/patterns.txt +++ b/.github/actions/spell-check/patterns.txt @@ -57,6 +57,7 @@ https?://(?:(?:www\.|)youtube\.com|youtu.be)/[-a-zA-Z0-9?&=]* # msdn \b(?:download\.visualstudio|docs|msdn|learn)\.microsoft\.com/[-_a-zA-Z0-9()=./]* +aka\.ms/[a-zA-Z0-9]+ # medium link\.medium\.com/[a-zA-Z0-9]+ diff --git a/.pipelines/ESRPSigning_core.json b/.pipelines/ESRPSigning_core.json index 048147cef1e2..9f48c66184f1 100644 --- a/.pipelines/ESRPSigning_core.json +++ b/.pipelines/ESRPSigning_core.json @@ -144,6 +144,14 @@ "modules\\MouseUtils\\MouseJumpUI\\PowerToys.MouseJumpUI.dll", "modules\\MouseUtils\\MouseJumpUI\\PowerToys.MouseJumpUI.exe", + "modules\\MouseWithoutBorders\\PowerToys.MouseWithoutBorders.dll", + "modules\\MouseWithoutBorders\\PowerToys.MouseWithoutBorders.exe", + "modules\\MouseWithoutBorders\\PowerToys.MouseWithoutBordersModuleInterface.dll", + "modules\\MouseWithoutBorders\\PowerToys.MouseWithoutBordersService.dll", + "modules\\MouseWithoutBorders\\PowerToys.MouseWithoutBordersService.exe", + "modules\\MouseWithoutBorders\\PowerToys.MouseWithoutBordersHelper.dll", + "modules\\MouseWithoutBorders\\PowerToys.MouseWithoutBordersHelper.exe", + "modules\\PowerAccent\\PowerAccent.Core.dll", "modules\\PowerAccent\\PowerToys.PowerAccent.dll", "modules\\PowerAccent\\PowerToys.PowerAccent.exe", @@ -268,9 +276,15 @@ "modules\\launcher\\ScipBe.Common.Office.OneNote.dll", "modules\\launcher\\Interop.Microsoft.Office.Interop.OneNote.dll", "modules\\launcher\\hyjiacan.py4n.dll", + "modules\\MouseWithoutBorders\\MessagePack.Annotations.dll", + "modules\\MouseWithoutBorders\\MessagePack.dll", + "modules\\MouseWithoutBorders\\Nerdbank.Streams.dll", "Settings\\Microsoft.Graphics.Canvas.Interop.dll", "Settings\\clrcompression.dll", "Settings\\CommunityToolkit.Labs.WinUI.SettingsControls.dll", + "Settings\\MessagePack.Annotations.dll", + "Settings\\MessagePack.dll", + "Settings\\Nerdbank.Streams.dll", "ColorCode.Core.dll", "ColorCode.UWP.dll", "UnitsNet.dll" diff --git a/COMMUNITY.md b/COMMUNITY.md index 8fce8b92f4a4..6f831031c8ad 100644 --- a/COMMUNITY.md +++ b/COMMUNITY.md @@ -111,6 +111,41 @@ Find My Mouse is based on Raymond Chen's SuperSonar. This amazing team helped PowerToys develop PowerToys Run and Keyboard manager as well as update our Settings to v2. @alekhyareddy28, @arjunbalgovind, @jyuwono @laviusmotileng-ms, @ryanbodrug-microsoft, @saahmedm, @somil55, @traies, @udit3333 +## Mouse Without Borders original contributors +*Project creator: Truong Do (Đỗ Đức Trường)* + +Other contributors: + * Microsoft Garage: Quinn Hawkins, Michael Low, Joe Coplen, Nino Yuniardi, Gwyneth Marshall, David Andrews, Karen Luecking + * Peter Hauge - Visual Studio + * Bruce Dawson - Windows Fundamentals + * Alan Myrvold - Office Security + * Adrian Garside - WEX + * Scott Bradner - Surface + * Aleks Gershaft - Windows Azure + * Chinh Huynh - Windows Azure + * Long Nguyen - Data Center + * Triet Le - Cloud Engineering + * Luke Schoen - Excel + * Bao Nguyen - Bing + * Ross Nichols - Windows + * Ryan Baltazar - Windows + * Ed Essey - The Garage + * Mario Madden - The Garage + * Karthick Mahalingam - ACE + * Pooja Kamra - ACE + * Justin White - SA + * Chris Ransom - SA + * Mike Ricks - Red Team + * Randy Santossio - Surface + * Ashish Sen Jaswal - Device Health + * Zoltan Harmath - Security Tools + * Luciano Krigun - Security Products + * Jo Hemmerlein - Red Team + * Chris Johnson - Surface Hub + * Loren Ponten - Surface Hub + * Paul Schmitt - WWL + * And many other Users! + ## PowerToys core team - [@crutkas](https://github.com/crutkas/) - Clint Rutkas - Lead diff --git a/Directory.Packages.props b/Directory.Packages.props index a75cb8a8693f..e9ce26ecbb3e 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -20,10 +20,15 @@ - + + + + + + @@ -39,6 +44,7 @@ + diff --git a/NOTICE.md b/NOTICE.md index f88a23ac575e..f88a920756eb 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -295,10 +295,15 @@ SOFTWARE. - Markdig.Signed 0.27.0 - Microsoft.CodeAnalysis.NetAnalyzers 7.0.1 - Microsoft.Data.Sqlite 7.0.0 -- Microsoft.Extensions.Hosting 7.0.0 +- Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers 0.4.336902 +- Microsoft.Extensions.DependencyInjection 7.0.0 +- Microsoft.Extensions.Hosting 7.0.1 +- Microsoft.Extensions.Hosting.WindowsServices 7.0.0 +- Microsoft.Extensions.Logging 7.0.0 - Microsoft.NET.Test.Sdk 17.4.1 - Microsoft.Toolkit.Uwp.Notifications 7.1.2 - Microsoft.Web.WebView2 1.0.1722.45 +- Microsoft.Windows.Compatibility 7.0.1 - Microsoft.Windows.CsWin32 0.2.46-beta - Microsoft.Windows.CsWinRT 2.0.2 - Microsoft.Windows.SDK.BuildTools 10.0.22621.755 @@ -312,6 +317,7 @@ SOFTWARE. - NLog.Extensions.Logging 5.0.4 - NLog.Schema 5.0.4 - ScipBe.Common.Office.OneNote 3.0.1 +- StreamJsonRpc 2.14.24 - StyleCop.Analyzers 1.2.0-beta.435 - System.CommandLine 2.0.0-beta4.22272.1 - System.ComponentModel.Composition 7.0.0 diff --git a/PowerToys.sln b/PowerToys.sln index 9a0cae23a308..d82533f29707 100644 --- a/PowerToys.sln +++ b/PowerToys.sln @@ -493,6 +493,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StlThumbnailProviderCpp", " EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SvgThumbnailProviderCpp", "src\modules\previewpane\SvgThumbnailProviderCpp\SvgThumbnailProviderCpp.vcxproj", "{2BBC9E33-21EC-401C-84DA-BB6590A9B2AA}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MouseWithoutBorders", "MouseWithoutBorders", "{B6C42F16-73EB-477E-8B0D-4E6CF6C20AAC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MouseWithoutBordersModuleInterface", "src\modules\MouseWithoutBorders\ModuleInterface\MouseWithoutBordersModuleInterface.vcxproj", "{2833C9C6-AB32-4048-A5C7-A70898337B57}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MouseWithoutBorders", "src\modules\MouseWithoutBorders\App\MouseWithoutBorders.csproj", "{50B82783-242F-42D2-BC03-B3430BF01354}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MouseWithoutBordersService", "src\modules\MouseWithoutBorders\App\Service\MouseWithoutBordersService.csproj", "{B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MouseWithoutBordersHelper", "src\modules\MouseWithoutBorders\App\Helper\MouseWithoutBordersHelper.csproj", "{A663E672-B26D-4EC0-BEAB-FE2E424AC46F}" +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MouseJump", "src\modules\MouseUtils\MouseJump\MouseJump.vcxproj", "{8A08D663-4995-40E3-B42C-3F910625F284}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MouseJumpUI", "src\modules\MouseUtils\MouseJumpUI\MouseJumpUI.csproj", "{D962A009-834F-4EEC-AABB-430DF8F98E39}" @@ -2081,6 +2091,54 @@ Global {2BBC9E33-21EC-401C-84DA-BB6590A9B2AA}.Release|x64.Build.0 = Release|x64 {2BBC9E33-21EC-401C-84DA-BB6590A9B2AA}.Release|x86.ActiveCfg = Release|x64 {2BBC9E33-21EC-401C-84DA-BB6590A9B2AA}.Release|x86.Build.0 = Release|x64 + {2833C9C6-AB32-4048-A5C7-A70898337B57}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {2833C9C6-AB32-4048-A5C7-A70898337B57}.Debug|ARM64.Build.0 = Debug|ARM64 + {2833C9C6-AB32-4048-A5C7-A70898337B57}.Debug|x64.ActiveCfg = Debug|x64 + {2833C9C6-AB32-4048-A5C7-A70898337B57}.Debug|x64.Build.0 = Debug|x64 + {2833C9C6-AB32-4048-A5C7-A70898337B57}.Debug|x86.ActiveCfg = Debug|x64 + {2833C9C6-AB32-4048-A5C7-A70898337B57}.Debug|x86.Build.0 = Debug|x64 + {2833C9C6-AB32-4048-A5C7-A70898337B57}.Release|ARM64.ActiveCfg = Release|ARM64 + {2833C9C6-AB32-4048-A5C7-A70898337B57}.Release|ARM64.Build.0 = Release|ARM64 + {2833C9C6-AB32-4048-A5C7-A70898337B57}.Release|x64.ActiveCfg = Release|x64 + {2833C9C6-AB32-4048-A5C7-A70898337B57}.Release|x64.Build.0 = Release|x64 + {2833C9C6-AB32-4048-A5C7-A70898337B57}.Release|x86.ActiveCfg = Release|x64 + {2833C9C6-AB32-4048-A5C7-A70898337B57}.Release|x86.Build.0 = Release|x64 + {50B82783-242F-42D2-BC03-B3430BF01354}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {50B82783-242F-42D2-BC03-B3430BF01354}.Debug|ARM64.Build.0 = Debug|ARM64 + {50B82783-242F-42D2-BC03-B3430BF01354}.Debug|x64.ActiveCfg = Debug|x64 + {50B82783-242F-42D2-BC03-B3430BF01354}.Debug|x64.Build.0 = Debug|x64 + {50B82783-242F-42D2-BC03-B3430BF01354}.Debug|x86.ActiveCfg = Debug|x64 + {50B82783-242F-42D2-BC03-B3430BF01354}.Debug|x86.Build.0 = Debug|x64 + {50B82783-242F-42D2-BC03-B3430BF01354}.Release|ARM64.ActiveCfg = Release|ARM64 + {50B82783-242F-42D2-BC03-B3430BF01354}.Release|ARM64.Build.0 = Release|ARM64 + {50B82783-242F-42D2-BC03-B3430BF01354}.Release|x64.ActiveCfg = Release|x64 + {50B82783-242F-42D2-BC03-B3430BF01354}.Release|x64.Build.0 = Release|x64 + {50B82783-242F-42D2-BC03-B3430BF01354}.Release|x86.ActiveCfg = Release|x64 + {50B82783-242F-42D2-BC03-B3430BF01354}.Release|x86.Build.0 = Release|x64 + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}.Debug|ARM64.Build.0 = Debug|ARM64 + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}.Debug|x64.ActiveCfg = Debug|x64 + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}.Debug|x64.Build.0 = Debug|x64 + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}.Debug|x86.ActiveCfg = Debug|x64 + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}.Debug|x86.Build.0 = Debug|x64 + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}.Release|ARM64.ActiveCfg = Release|ARM64 + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}.Release|ARM64.Build.0 = Release|ARM64 + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}.Release|x64.ActiveCfg = Release|x64 + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}.Release|x64.Build.0 = Release|x64 + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}.Release|x86.ActiveCfg = Release|x64 + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2}.Release|x86.Build.0 = Release|x64 + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F}.Debug|ARM64.Build.0 = Debug|ARM64 + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F}.Debug|x64.ActiveCfg = Debug|x64 + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F}.Debug|x64.Build.0 = Debug|x64 + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F}.Debug|x86.ActiveCfg = Debug|x64 + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F}.Debug|x86.Build.0 = Debug|x64 + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F}.Release|ARM64.ActiveCfg = Release|ARM64 + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F}.Release|ARM64.Build.0 = Release|ARM64 + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F}.Release|x64.ActiveCfg = Release|x64 + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F}.Release|x64.Build.0 = Release|x64 + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F}.Release|x86.ActiveCfg = Release|x64 + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F}.Release|x86.Build.0 = Release|x64 {8A08D663-4995-40E3-B42C-3F910625F284}.Debug|ARM64.ActiveCfg = Debug|ARM64 {8A08D663-4995-40E3-B42C-3F910625F284}.Debug|ARM64.Build.0 = Debug|ARM64 {8A08D663-4995-40E3-B42C-3F910625F284}.Debug|x64.ActiveCfg = Debug|x64 @@ -2362,6 +2420,11 @@ Global {CA5518ED-0458-4B09-8F53-4122B9888655} = {2F305555-C296-497E-AC20-5FA1B237996A} {D6DCC3AE-18C0-488A-B978-BAA9E3CFF09D} = {2F305555-C296-497E-AC20-5FA1B237996A} {2BBC9E33-21EC-401C-84DA-BB6590A9B2AA} = {2F305555-C296-497E-AC20-5FA1B237996A} + {B6C42F16-73EB-477E-8B0D-4E6CF6C20AAC} = {4574FDD0-F61D-4376-98BF-E5A1262C11EC} + {2833C9C6-AB32-4048-A5C7-A70898337B57} = {B6C42F16-73EB-477E-8B0D-4E6CF6C20AAC} + {50B82783-242F-42D2-BC03-B3430BF01354} = {B6C42F16-73EB-477E-8B0D-4E6CF6C20AAC} + {B5EB9FE9-37EF-47C3-B8B8-81AD3C2972C2} = {B6C42F16-73EB-477E-8B0D-4E6CF6C20AAC} + {A663E672-B26D-4EC0-BEAB-FE2E424AC46F} = {B6C42F16-73EB-477E-8B0D-4E6CF6C20AAC} {8A08D663-4995-40E3-B42C-3F910625F284} = {322566EF-20DC-43A6-B9F8-616AF942579A} {D962A009-834F-4EEC-AABB-430DF8F98E39} = {322566EF-20DC-43A6-B9F8-616AF942579A} {D9C5DE64-6849-4278-91AD-9660AECF2876} = {322566EF-20DC-43A6-B9F8-616AF942579A} diff --git a/README.md b/README.md index 9691f8fa26e7..1297c247b378 100644 --- a/README.md +++ b/README.md @@ -20,10 +20,10 @@ Microsoft PowerToys is a set of utilities for power users to tune and streamline | [Always on Top](https://aka.ms/PowerToysOverview_AoT) | [PowerToys Awake](https://aka.ms/PowerToysOverview_Awake) | [Color Picker](https://aka.ms/PowerToysOverview_ColorPicker) | | [FancyZones](https://aka.ms/PowerToysOverview_FancyZones) | [File Explorer Add-ons](https://aka.ms/PowerToysOverview_FileExplorerAddOns) | [File Locksmith](https://aka.ms/PowerToysOverview_FileLocksmith) | | [Hosts File Editor](https://aka.ms/PowerToysOverview_HostsFileEditor) | [Image Resizer](https://aka.ms/PowerToysOverview_ImageResizer) | [Keyboard Manager](https://aka.ms/PowerToysOverview_KeyboardManager) | -| [Mouse utilities](https://aka.ms/PowerToysOverview_MouseUtilities) | [Peek](https://aka.ms/PowerToysOverview_Peek) | [Paste as Plain Text](https://aka.ms/PowerToysOverview_PastePlain) | -| [PowerRename](https://aka.ms/PowerToysOverview_PowerRename) | [PowerToys Run](https://aka.ms/PowerToysOverview_PowerToysRun) | [Quick Accent](https://aka.ms/PowerToysOverview_QuickAccent) | -| [Registry Preview](https://aka.ms/PowerToysOverview_RegistryPreview) | [Screen Ruler](https://aka.ms/PowerToysOverview_ScreenRuler) | [Shortcut Guide](https://aka.ms/PowerToysOverview_ShortcutGuide) | -| [Text Extractor](https://aka.ms/PowerToysOverview_TextExtractor) | [Video Conference Mute](https://aka.ms/PowerToysOverview_VideoConference) | +| [Mouse utilities](https://aka.ms/PowerToysOverview_MouseUtilities) | [Mouse Without Borders](https://aka.ms/PowerToysOverview_MouseWithoutBorders) | [Peek](https://aka.ms/PowerToysOverview_Peek) | +| [Paste as Plain Text](https://aka.ms/PowerToysOverview_PastePlain) | [PowerRename](https://aka.ms/PowerToysOverview_PowerRename) | [PowerToys Run](https://aka.ms/PowerToysOverview_PowerToysRun) | +| [Quick Accent](https://aka.ms/PowerToysOverview_QuickAccent) | [Registry Preview](https://aka.ms/PowerToysOverview_RegistryPreview) | [Screen Ruler](https://aka.ms/PowerToysOverview_ScreenRuler) | +| [Shortcut Guide](https://aka.ms/PowerToysOverview_ShortcutGuide) | [Text Extractor](https://aka.ms/PowerToysOverview_TextExtractor) | [Video Conference Mute](https://aka.ms/PowerToysOverview_VideoConference) | ## Installing and running Microsoft PowerToys diff --git a/doc/images/icons/MouseWithoutBorders.png b/doc/images/icons/MouseWithoutBorders.png new file mode 100644 index 0000000000000000000000000000000000000000..a29adf7d11850eb173b1e7cb296d213ef5a361e8 GIT binary patch literal 24378 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 z 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