From 071f5d7bccd7258f5e4b52247df898415210e2e2 Mon Sep 17 00:00:00 2001 From: Pedro Lamas Date: Thu, 10 Jul 2025 10:20:30 +0100 Subject: [PATCH] Adds BgcodeThumbnailProvider and BgcodePreviewHandler (#38667) ## Summary of the Pull Request ## PR Checklist - [X] **Closes:** #30352 - [X] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected - [X] **Tests:** Added/updated and all pass - [X] **Localization:** All end user facing strings can be localized - [ ] **Dev docs:** Added/updated - [X] **New binaries:** Added on the required places - [X] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [X] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx ## Detailed Description of the Pull Request / Additional comments ![image](https://github.com/user-attachments/assets/62c0cbbb-fbca-4bb3-82fe-696ba40da83d) ![image](https://github.com/user-attachments/assets/3f2f1346-91fb-4f49-85b9-8cd6e19e68e9) ## Validation Steps Performed - Close PowerToys if installed in your machine - Full build the solution: PowerToys.sln - Start PowerToys from PowerToys\x64\Debug\PowerToys.exe or PowerToys\x64\Release\PowerToys.exe - Toggle the "Binary G-code thumbnail previewer" setting to enable - Open HelperFiles folder on the tests and check if the icon changes to an image - Check explorer preview to see if image is also shown there --------- Co-authored-by: leileizhang --- .github/actions/spell-check/allow/code.txt | 3 + .github/actions/spell-check/excludes.txt | 1 + .pipelines/ESRPSigning_core.json | 6 + DATA_AND_PRIVACY.md | 12 + PowerToys.sln | 66 ++++ doc/devdocs/tools/verification-scripts.md | 1 + installer/PowerToysSetup/Resources.wxs | 9 + .../CustomAction.cpp | 4 +- .../FilePreviewCommon/BgcodeBlockType.cs | 16 + .../FilePreviewCommon/BgcodeChecksumType.cs | 12 + .../BgcodeCompressionType.cs | 14 + src/common/FilePreviewCommon/BgcodeHelper.cs | 129 ++++++++ .../FilePreviewCommon/BgcodeThumbnail.cs | 66 ++++ .../BgcodeThumbnailFormat.cs | 24 ++ src/common/GPOWrapper/GPOWrapper.cpp | 8 + src/common/GPOWrapper/GPOWrapper.h | 2 + src/common/GPOWrapper/GPOWrapper.idl | 2 + src/common/interop/Constants.cpp | 4 + src/common/interop/Constants.h | 1 + src/common/interop/Constants.idl | 1 + src/common/interop/shared_constants.h | 3 + src/common/logger/logger_settings.h | 4 + src/common/utils/gpo.h | 12 + src/common/utils/modulesRegistry.h | 31 ++ .../examples/disableAllModules.winget | 2 + .../examples/enableAllModules.winget | 2 + src/gpo/assets/PowerToys.admx | 20 ++ src/gpo/assets/en-US/PowerToys.adml | 2 + .../BgcodePreviewHandler.csproj | 65 ++++ .../BgcodePreviewHandlerControl.cs | 179 +++++++++++ .../BgcodePreviewHandlerControl.resx | 120 ++++++++ .../BgcodePreviewHandler/Program.cs | 80 +++++ .../Properties/Resource.Designer.cs | 90 ++++++ .../Properties/Resource.resx | 131 ++++++++ .../BgcodePreviewHandler/Settings.cs | 38 +++ .../Events/BgcodeFileHandlerLoaded.cs | 22 ++ .../Events/BgcodeFilePreviewError.cs | 27 ++ .../Telemetry/Events/BgcodeFilePreviewed.cs | 22 ++ .../BgcodePreviewHandler.cpp | 284 ++++++++++++++++++ .../BgcodePreviewHandler.h | 69 +++++ .../BgcodePreviewHandlerCpp.rc | 40 +++ .../BgcodePreviewHandlerCpp.vcxproj | 119 ++++++++ .../BgcodePreviewHandlerCpp.vcxproj.filters | 56 ++++ .../BgcodePreviewHandlerCpp/ClassFactory.cpp | 84 ++++++ .../BgcodePreviewHandlerCpp/ClassFactory.h | 24 ++ .../GlobalExportFunctions.def | 3 + .../BgcodePreviewHandlerCpp/dllmain.cpp | 73 +++++ .../BgcodePreviewHandlerCpp/packages.config | 4 + .../BgcodePreviewHandlerCpp/pch.cpp | 5 + .../previewpane/BgcodePreviewHandlerCpp/pch.h | 14 + .../BgcodePreviewHandlerCpp/resource.h | 13 + .../BgcodeThumbnailProvider.cs | 146 +++++++++ .../BgcodeThumbnailProvider.csproj | 43 +++ .../BgcodeThumbnailProvider/Program.cs | 42 +++ .../BgcodeThumbnailProvider.cpp | 201 +++++++++++++ .../BgcodeThumbnailProvider.h | 37 +++ .../BgcodeThumbnailProviderCpp.rc | 40 +++ .../BgcodeThumbnailProviderCpp.vcxproj | 118 ++++++++ ...BgcodeThumbnailProviderCpp.vcxproj.filters | 59 ++++ .../ClassFactory.cpp | 84 ++++++ .../BgcodeThumbnailProviderCpp/ClassFactory.h | 24 ++ .../GlobalExportFunctions.def | 3 + .../BgcodeThumbnailProviderCpp/dllmain.cpp | 73 +++++ .../packages.config | 5 + .../BgcodeThumbnailProviderCpp/pch.cpp | 5 + .../BgcodeThumbnailProviderCpp/pch.h | 15 + .../BgcodeThumbnailProviderCpp/resource.h | 13 + .../BgcodePreviewHandlerTest.cs | 93 ++++++ .../HelperFiles/sample.bgcode | Bin 0 -> 230915 bytes .../UnitTests-BgcodePreviewHandler.csproj | 36 +++ .../BgcodeThumbnailProviderTests.cs | 71 +++++ .../HelperFiles/sample.bgcode | Bin 0 -> 230915 bytes .../UnitTests-BgcodeThumbnailProvider.csproj | 38 +++ src/modules/previewpane/powerpreview/CLSID.h | 9 + .../previewpane/powerpreview/Resources.resx | 11 +- .../previewpane/powerpreview/powerpreview.cpp | 10 + .../powerpreview/powerpreview.vcxproj | 4 +- .../PowerPreviewProperties.cs | 34 +++ .../ViewModelTests/PowerPreview.cs | 38 +++ .../SettingsXAML/Views/PowerPreviewPage.xaml | 26 +- .../Settings.UI/Strings/en-us/Resources.resw | 14 +- .../ViewModels/PowerPreviewViewModel.cs | 129 +++++++- .../BugReportTool/ProcessesList.cpp | 2 + .../BugReportTool/RegistryUtils.cpp | 3 + .../BugReportTool/ReportGPOValues.cpp | 2 + .../Check preview handler registration.ps1 | 3 +- 86 files changed, 3440 insertions(+), 10 deletions(-) create mode 100644 src/common/FilePreviewCommon/BgcodeBlockType.cs create mode 100644 src/common/FilePreviewCommon/BgcodeChecksumType.cs create mode 100644 src/common/FilePreviewCommon/BgcodeCompressionType.cs create mode 100644 src/common/FilePreviewCommon/BgcodeHelper.cs create mode 100644 src/common/FilePreviewCommon/BgcodeThumbnail.cs create mode 100644 src/common/FilePreviewCommon/BgcodeThumbnailFormat.cs create mode 100644 src/modules/previewpane/BgcodePreviewHandler/BgcodePreviewHandler.csproj create mode 100644 src/modules/previewpane/BgcodePreviewHandler/BgcodePreviewHandlerControl.cs create mode 100644 src/modules/previewpane/BgcodePreviewHandler/BgcodePreviewHandlerControl.resx create mode 100644 src/modules/previewpane/BgcodePreviewHandler/Program.cs create mode 100644 src/modules/previewpane/BgcodePreviewHandler/Properties/Resource.Designer.cs create mode 100644 src/modules/previewpane/BgcodePreviewHandler/Properties/Resource.resx create mode 100644 src/modules/previewpane/BgcodePreviewHandler/Settings.cs create mode 100644 src/modules/previewpane/BgcodePreviewHandler/Telemetry/Events/BgcodeFileHandlerLoaded.cs create mode 100644 src/modules/previewpane/BgcodePreviewHandler/Telemetry/Events/BgcodeFilePreviewError.cs create mode 100644 src/modules/previewpane/BgcodePreviewHandler/Telemetry/Events/BgcodeFilePreviewed.cs create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandler.cpp create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandler.h create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandlerCpp.rc create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandlerCpp.vcxproj create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandlerCpp.vcxproj.filters create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/ClassFactory.cpp create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/ClassFactory.h create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/GlobalExportFunctions.def create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/dllmain.cpp create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/packages.config create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/pch.cpp create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/pch.h create mode 100644 src/modules/previewpane/BgcodePreviewHandlerCpp/resource.h create mode 100644 src/modules/previewpane/BgcodeThumbnailProvider/BgcodeThumbnailProvider.cs create mode 100644 src/modules/previewpane/BgcodeThumbnailProvider/BgcodeThumbnailProvider.csproj create mode 100644 src/modules/previewpane/BgcodeThumbnailProvider/Program.cs create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProvider.cpp create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProvider.h create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProviderCpp.rc create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProviderCpp.vcxproj create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProviderCpp.vcxproj.filters create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/ClassFactory.cpp create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/ClassFactory.h create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/GlobalExportFunctions.def create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/dllmain.cpp create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/packages.config create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/pch.cpp create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/pch.h create mode 100644 src/modules/previewpane/BgcodeThumbnailProviderCpp/resource.h create mode 100644 src/modules/previewpane/UnitTests-BgcodePreviewHandler/BgcodePreviewHandlerTest.cs create mode 100644 src/modules/previewpane/UnitTests-BgcodePreviewHandler/HelperFiles/sample.bgcode create mode 100644 src/modules/previewpane/UnitTests-BgcodePreviewHandler/UnitTests-BgcodePreviewHandler.csproj create mode 100644 src/modules/previewpane/UnitTests-BgcodeThumbnailProvider/BgcodeThumbnailProviderTests.cs create mode 100644 src/modules/previewpane/UnitTests-BgcodeThumbnailProvider/HelperFiles/sample.bgcode create mode 100644 src/modules/previewpane/UnitTests-BgcodeThumbnailProvider/UnitTests-BgcodeThumbnailProvider.csproj diff --git a/.github/actions/spell-check/allow/code.txt b/.github/actions/spell-check/allow/code.txt index cf4af7fa8b..5c5b55762d 100644 --- a/.github/actions/spell-check/allow/code.txt +++ b/.github/actions/spell-check/allow/code.txt @@ -29,11 +29,14 @@ RUS AYUV bak Bcl +bgcode +Deflatealgorithm exa exabyte Gbits Gbps gcode +Heatshrink Mbits MBs mkv diff --git a/.github/actions/spell-check/excludes.txt b/.github/actions/spell-check/excludes.txt index 6870b3e86e..7ad88bde19 100644 --- a/.github/actions/spell-check/excludes.txt +++ b/.github/actions/spell-check/excludes.txt @@ -18,6 +18,7 @@ /TestFiles/ [^/]\.cur$ [^/]\.gcode$ +[^/]\.bgcode$ [^/]\.rgs$ \.a$ \.ai$ diff --git a/.pipelines/ESRPSigning_core.json b/.pipelines/ESRPSigning_core.json index eac48a607f..6f8f817492 100644 --- a/.pipelines/ESRPSigning_core.json +++ b/.pipelines/ESRPSigning_core.json @@ -66,6 +66,12 @@ "PowerToys.GcodeThumbnailProvider.dll", "PowerToys.GcodeThumbnailProvider.exe", "PowerToys.GcodeThumbnailProviderCpp.dll", + "PowerToys.BgcodePreviewHandler.dll", + "PowerToys.BgcodePreviewHandler.exe", + "PowerToys.BgcodePreviewHandlerCpp.dll", + "PowerToys.BgcodeThumbnailProvider.dll", + "PowerToys.BgcodeThumbnailProvider.exe", + "PowerToys.BgcodeThumbnailProviderCpp.dll", "PowerToys.ManagedTelemetry.dll", "PowerToys.MarkdownPreviewHandler.dll", "PowerToys.MarkdownPreviewHandler.exe", diff --git a/DATA_AND_PRIVACY.md b/DATA_AND_PRIVACY.md index 92711f00dd..56a2eb9eee 100644 --- a/DATA_AND_PRIVACY.md +++ b/DATA_AND_PRIVACY.md @@ -383,6 +383,18 @@ _If you want to find diagnostic data events in the source code, these two links Microsoft.PowerToys.GcodeFilePreviewError Triggered when there is an error previewing a G-code file. + + Microsoft.PowerToys.BgcodeFileHandlerLoaded + Triggered when a Binary G-code file handler is loaded. + + + Microsoft.PowerToys.BgcodeFilePreviewed + Occurs when a Binary G-code file is previewed in File Explorer. + + + Microsoft.PowerToys.BgcodeFilePreviewError + Triggered when there is an error previewing a Binary G-code file. + Microsoft.PowerToys.MarkdownFileHandlerLoaded Occurs when a Markdown file handler is loaded. diff --git a/PowerToys.sln b/PowerToys.sln index 18b2dd569b..0775b28def 100644 --- a/PowerToys.sln +++ b/PowerToys.sln @@ -714,6 +714,18 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CmdPalKeyboardService", "sr EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PowerRename.FuzzingTest", "src\modules\powerrename\PowerRename.FuzzingTest\PowerRename.FuzzingTest.vcxproj", "{2694E2FB-DCD5-4BFF-A418-B6C3C7CE3B8E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BgcodePreviewHandler", "src\modules\previewpane\BgcodePreviewHandler\BgcodePreviewHandler.csproj", "{9E0CBC06-F29A-4810-B93C-97D53863B95E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BgcodePreviewHandlerCpp", "src\modules\previewpane\BgcodePreviewHandlerCpp\BgcodePreviewHandlerCpp.vcxproj", "{F6088A11-1C9E-4420-AA90-CF7E78DD7F1C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BgcodeThumbnailProviderCpp", "src\modules\previewpane\BgcodeThumbnailProviderCpp\BgcodeThumbnailProviderCpp.vcxproj", "{47B0678C-806B-4FE1-9F50-46BA88989532}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BgcodeThumbnailProvider", "src\modules\previewpane\BgcodeThumbnailProvider\BgcodeThumbnailProvider.csproj", "{9BC1C986-1E97-4D07-A7B1-CE226C239EFA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests-BgcodePreviewHandler", "src\modules\previewpane\UnitTests-BgcodePreviewHandler\UnitTests-BgcodePreviewHandler.csproj", "{99CA1509-FB73-456E-AFAF-AB89C017BD72}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests-BgcodeThumbnailProvider", "src\modules\previewpane\UnitTests-BgcodeThumbnailProvider\UnitTests-BgcodeThumbnailProvider.csproj", "{61CBF221-9452-4934-B685-146285E080D7}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MouseUtils.UITests", "src\modules\MouseUtils\MouseUtils.UITests\MouseUtils.UITests.csproj", "{4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkspacesEditorUITest", "src\modules\Workspaces\WorkspacesEditorUITest\WorkspacesEditorUITest.csproj", "{43E779F3-D83C-48B1-BA8D-1912DBD76FC9}" @@ -2626,6 +2638,54 @@ Global {2694E2FB-DCD5-4BFF-A418-B6C3C7CE3B8E}.Release|ARM64.ActiveCfg = Release|ARM64 {2694E2FB-DCD5-4BFF-A418-B6C3C7CE3B8E}.Release|x64.ActiveCfg = Release|x64 {2694E2FB-DCD5-4BFF-A418-B6C3C7CE3B8E}.Release|x64.Build.0 = Release|x64 + {9E0CBC06-F29A-4810-B93C-97D53863B95E}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {9E0CBC06-F29A-4810-B93C-97D53863B95E}.Debug|ARM64.Build.0 = Debug|ARM64 + {9E0CBC06-F29A-4810-B93C-97D53863B95E}.Debug|x64.ActiveCfg = Debug|x64 + {9E0CBC06-F29A-4810-B93C-97D53863B95E}.Debug|x64.Build.0 = Debug|x64 + {9E0CBC06-F29A-4810-B93C-97D53863B95E}.Release|ARM64.ActiveCfg = Release|ARM64 + {9E0CBC06-F29A-4810-B93C-97D53863B95E}.Release|ARM64.Build.0 = Release|ARM64 + {9E0CBC06-F29A-4810-B93C-97D53863B95E}.Release|x64.ActiveCfg = Release|x64 + {9E0CBC06-F29A-4810-B93C-97D53863B95E}.Release|x64.Build.0 = Release|x64 + {F6088A11-1C9E-4420-AA90-CF7E78DD7F1C}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {F6088A11-1C9E-4420-AA90-CF7E78DD7F1C}.Debug|ARM64.Build.0 = Debug|ARM64 + {F6088A11-1C9E-4420-AA90-CF7E78DD7F1C}.Debug|x64.ActiveCfg = Debug|x64 + {F6088A11-1C9E-4420-AA90-CF7E78DD7F1C}.Debug|x64.Build.0 = Debug|x64 + {F6088A11-1C9E-4420-AA90-CF7E78DD7F1C}.Release|ARM64.ActiveCfg = Release|ARM64 + {F6088A11-1C9E-4420-AA90-CF7E78DD7F1C}.Release|ARM64.Build.0 = Release|ARM64 + {F6088A11-1C9E-4420-AA90-CF7E78DD7F1C}.Release|x64.ActiveCfg = Release|x64 + {F6088A11-1C9E-4420-AA90-CF7E78DD7F1C}.Release|x64.Build.0 = Release|x64 + {47B0678C-806B-4FE1-9F50-46BA88989532}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {47B0678C-806B-4FE1-9F50-46BA88989532}.Debug|ARM64.Build.0 = Debug|ARM64 + {47B0678C-806B-4FE1-9F50-46BA88989532}.Debug|x64.ActiveCfg = Debug|x64 + {47B0678C-806B-4FE1-9F50-46BA88989532}.Debug|x64.Build.0 = Debug|x64 + {47B0678C-806B-4FE1-9F50-46BA88989532}.Release|ARM64.ActiveCfg = Release|ARM64 + {47B0678C-806B-4FE1-9F50-46BA88989532}.Release|ARM64.Build.0 = Release|ARM64 + {47B0678C-806B-4FE1-9F50-46BA88989532}.Release|x64.ActiveCfg = Release|x64 + {47B0678C-806B-4FE1-9F50-46BA88989532}.Release|x64.Build.0 = Release|x64 + {9BC1C986-1E97-4D07-A7B1-CE226C239EFA}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {9BC1C986-1E97-4D07-A7B1-CE226C239EFA}.Debug|ARM64.Build.0 = Debug|ARM64 + {9BC1C986-1E97-4D07-A7B1-CE226C239EFA}.Debug|x64.ActiveCfg = Debug|x64 + {9BC1C986-1E97-4D07-A7B1-CE226C239EFA}.Debug|x64.Build.0 = Debug|x64 + {9BC1C986-1E97-4D07-A7B1-CE226C239EFA}.Release|ARM64.ActiveCfg = Release|ARM64 + {9BC1C986-1E97-4D07-A7B1-CE226C239EFA}.Release|ARM64.Build.0 = Release|ARM64 + {9BC1C986-1E97-4D07-A7B1-CE226C239EFA}.Release|x64.ActiveCfg = Release|x64 + {9BC1C986-1E97-4D07-A7B1-CE226C239EFA}.Release|x64.Build.0 = Release|x64 + {99CA1509-FB73-456E-AFAF-AB89C017BD72}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {99CA1509-FB73-456E-AFAF-AB89C017BD72}.Debug|ARM64.Build.0 = Debug|ARM64 + {99CA1509-FB73-456E-AFAF-AB89C017BD72}.Debug|x64.ActiveCfg = Debug|x64 + {99CA1509-FB73-456E-AFAF-AB89C017BD72}.Debug|x64.Build.0 = Debug|x64 + {99CA1509-FB73-456E-AFAF-AB89C017BD72}.Release|ARM64.ActiveCfg = Release|ARM64 + {99CA1509-FB73-456E-AFAF-AB89C017BD72}.Release|ARM64.Build.0 = Release|ARM64 + {99CA1509-FB73-456E-AFAF-AB89C017BD72}.Release|x64.ActiveCfg = Release|x64 + {99CA1509-FB73-456E-AFAF-AB89C017BD72}.Release|x64.Build.0 = Release|x64 + {61CBF221-9452-4934-B685-146285E080D7}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {61CBF221-9452-4934-B685-146285E080D7}.Debug|ARM64.Build.0 = Debug|ARM64 + {61CBF221-9452-4934-B685-146285E080D7}.Debug|x64.ActiveCfg = Debug|x64 + {61CBF221-9452-4934-B685-146285E080D7}.Debug|x64.Build.0 = Debug|x64 + {61CBF221-9452-4934-B685-146285E080D7}.Release|ARM64.ActiveCfg = Release|ARM64 + {61CBF221-9452-4934-B685-146285E080D7}.Release|ARM64.Build.0 = Release|ARM64 + {61CBF221-9452-4934-B685-146285E080D7}.Release|x64.ActiveCfg = Release|x64 + {61CBF221-9452-4934-B685-146285E080D7}.Release|x64.Build.0 = Release|x64 {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}.Debug|ARM64.Build.0 = Debug|ARM64 {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1}.Debug|x64.ActiveCfg = Debug|x64 @@ -2940,6 +3000,12 @@ Global {0217E86E-3476-9946-DE8E-9D200CEBD47A} = {D1D6BC88-09AE-4FB4-AD24-5DED46A791DD} {5F63C743-F6CE-4DBA-A200-2B3F8A14E8C2} = {3846508C-77EB-4034-A702-F8BB263C4F79} {2694E2FB-DCD5-4BFF-A418-B6C3C7CE3B8E} = {89E20BCE-EB9C-46C8-8B50-E01A82E6FDC3} + {9E0CBC06-F29A-4810-B93C-97D53863B95E} = {2F305555-C296-497E-AC20-5FA1B237996A} + {F6088A11-1C9E-4420-AA90-CF7E78DD7F1C} = {2F305555-C296-497E-AC20-5FA1B237996A} + {47B0678C-806B-4FE1-9F50-46BA88989532} = {2F305555-C296-497E-AC20-5FA1B237996A} + {9BC1C986-1E97-4D07-A7B1-CE226C239EFA} = {2F305555-C296-497E-AC20-5FA1B237996A} + {99CA1509-FB73-456E-AFAF-AB89C017BD72} = {2F305555-C296-497E-AC20-5FA1B237996A} + {61CBF221-9452-4934-B685-146285E080D7} = {2F305555-C296-497E-AC20-5FA1B237996A} {4E0AE3A4-2EE0-44D7-A2D0-8769977254A1} = {322566EF-20DC-43A6-B9F8-616AF942579A} {43E779F3-D83C-48B1-BA8D-1912DBD76FC9} = {A2221D7E-55E7-4BEA-90D1-4F162D670BBF} {2CF78CF7-8FEB-4BE1-9591-55FA25B48FC6} = {1AFB6476-670D-4E80-A464-657E01DFF482} diff --git a/doc/devdocs/tools/verification-scripts.md b/doc/devdocs/tools/verification-scripts.md index cff58f478f..d31ecd8e66 100644 --- a/doc/devdocs/tools/verification-scripts.md +++ b/doc/devdocs/tools/verification-scripts.md @@ -18,6 +18,7 @@ This script checks the preview handler registration for the following file types * .svgz * .pdf * .gcode +* .bgcode * .stl * .txt * .ini diff --git a/installer/PowerToysSetup/Resources.wxs b/installer/PowerToysSetup/Resources.wxs index 03a6cfba30..8f7ff494da 100644 --- a/installer/PowerToysSetup/Resources.wxs +++ b/installer/PowerToysSetup/Resources.wxs @@ -233,6 +233,15 @@ + + + + + + processesToTerminate = { + std::array processesToTerminate = { L"PowerToys.PowerLauncher.exe", L"PowerToys.Settings.exe", L"PowerToys.AdvancedPaste.exe", @@ -1186,12 +1186,14 @@ UINT __stdcall TerminateProcessesCA(MSIHANDLE hInstall) L"PowerToys.PowerRename.exe", L"PowerToys.ImageResizer.exe", L"PowerToys.GcodeThumbnailProvider.exe", + L"PowerToys.BgcodeThumbnailProvider.exe", L"PowerToys.PdfThumbnailProvider.exe", L"PowerToys.MonacoPreviewHandler.exe", L"PowerToys.MarkdownPreviewHandler.exe", L"PowerToys.StlThumbnailProvider.exe", L"PowerToys.SvgThumbnailProvider.exe", L"PowerToys.GcodePreviewHandler.exe", + L"PowerToys.BgcodePreviewHandler.exe", L"PowerToys.QoiPreviewHandler.exe", L"PowerToys.PdfPreviewHandler.exe", L"PowerToys.QoiThumbnailProvider.exe", diff --git a/src/common/FilePreviewCommon/BgcodeBlockType.cs b/src/common/FilePreviewCommon/BgcodeBlockType.cs new file mode 100644 index 0000000000..296231e91c --- /dev/null +++ b/src/common/FilePreviewCommon/BgcodeBlockType.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace Microsoft.PowerToys.FilePreviewCommon +{ + public enum BgcodeBlockType + { + FileMetadataBlock = 0, + GCodeBlock = 1, + SlicerMetadataBlock = 2, + PrinterMetadataBlock = 3, + PrintMetadataBlock = 4, + ThumbnailBlock = 5, + } +} diff --git a/src/common/FilePreviewCommon/BgcodeChecksumType.cs b/src/common/FilePreviewCommon/BgcodeChecksumType.cs new file mode 100644 index 0000000000..8d223568b7 --- /dev/null +++ b/src/common/FilePreviewCommon/BgcodeChecksumType.cs @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace Microsoft.PowerToys.FilePreviewCommon +{ + public enum BgcodeChecksumType + { + None = 0, + CRC32 = 1, + } +} diff --git a/src/common/FilePreviewCommon/BgcodeCompressionType.cs b/src/common/FilePreviewCommon/BgcodeCompressionType.cs new file mode 100644 index 0000000000..95f15705e6 --- /dev/null +++ b/src/common/FilePreviewCommon/BgcodeCompressionType.cs @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace Microsoft.PowerToys.FilePreviewCommon +{ + public enum BgcodeCompressionType + { + NoCompression = 0, + DeflateAlgorithm = 1, + HeatshrinkAlgorithm11 = 2, + HeatshrinkAlgorithm12 = 3, + } +} diff --git a/src/common/FilePreviewCommon/BgcodeHelper.cs b/src/common/FilePreviewCommon/BgcodeHelper.cs new file mode 100644 index 0000000000..0b1dca2d64 --- /dev/null +++ b/src/common/FilePreviewCommon/BgcodeHelper.cs @@ -0,0 +1,129 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; + +namespace Microsoft.PowerToys.FilePreviewCommon +{ + /// + /// Bgcode file helper class. + /// + public static class BgcodeHelper + { + private const uint MagicNumber = 'G' | 'C' << 8 | 'D' << 16 | 'E' << 24; + + /// + /// Gets any thumbnails found in a bgcode file. + /// + /// The instance to the bgcode file. + /// The thumbnails found in a bgcode file. + public static IEnumerable GetThumbnails(BinaryReader reader) + { + var magicNumber = reader.ReadUInt32(); + + if (magicNumber != MagicNumber) + { + throw new InvalidDataException("Invalid magic number."); + } + + var version = reader.ReadUInt32(); + + if (version != 1) + { + // Version 1 is the only one that exists + throw new InvalidDataException("Unsupported version."); + } + + var checksum = (BgcodeChecksumType)reader.ReadUInt16(); + + while (reader.BaseStream.Position < reader.BaseStream.Length) + { + var blockType = (BgcodeBlockType)reader.ReadUInt16(); + var compression = (BgcodeCompressionType)reader.ReadUInt16(); + var uncompressedSize = reader.ReadUInt32(); + + var size = compression == BgcodeCompressionType.NoCompression ? uncompressedSize : reader.ReadUInt32(); + + switch (blockType) + { + case BgcodeBlockType.FileMetadataBlock: + case BgcodeBlockType.PrinterMetadataBlock: + case BgcodeBlockType.PrintMetadataBlock: + case BgcodeBlockType.SlicerMetadataBlock: + case BgcodeBlockType.GCodeBlock: + reader.BaseStream.Seek(2 + size, SeekOrigin.Current); // Skip + + break; + + case BgcodeBlockType.ThumbnailBlock: + var format = (BgcodeThumbnailFormat)reader.ReadUInt16(); + + reader.BaseStream.Seek(4, SeekOrigin.Current); // Skip width and height + + var data = ReadAndDecompressData(reader, compression, (int)size); + + if (data != null) + { + yield return new BgcodeThumbnail(format, data); + } + + break; + } + + if (checksum == BgcodeChecksumType.CRC32) + { + reader.BaseStream.Seek(4, SeekOrigin.Current); // Skip checksum + } + } + } + + /// + /// Gets the best thumbnail available in a bgcode file. + /// + /// The instance to the gcode file. + /// The best thumbnail available in the gcode file. + public static BgcodeThumbnail? GetBestThumbnail(BinaryReader reader) + { + return GetThumbnails(reader) + .OrderByDescending(x => x.Format switch + { + BgcodeThumbnailFormat.PNG => 2, + BgcodeThumbnailFormat.QOI => 1, + BgcodeThumbnailFormat.JPG => 0, + _ => 0, + }) + .ThenByDescending(x => x.Data.Length) + .FirstOrDefault(); + } + + private static byte[]? ReadAndDecompressData(BinaryReader reader, BgcodeCompressionType compression, int size) + { + // Though the spec doesn't actually mention it, the reference encoder code never applies compression to thumbnails data + // which makes complete sense as this data is PNG, JPEG or QOI encoded so already compressed as much as possible! + switch (compression) + { + case BgcodeCompressionType.NoCompression: + return reader.ReadBytes(size); + + case BgcodeCompressionType.DeflateAlgorithm: + var buffer = new byte[size]; + + using (var deflateStream = new DeflateStream(reader.BaseStream, CompressionMode.Decompress, true)) + { + deflateStream.ReadExactly(buffer, 0, size); + } + + return buffer; + + default: + reader.BaseStream.Seek(size, SeekOrigin.Current); // Skip unknown or unsupported compression types + + return null; + } + } + } +} diff --git a/src/common/FilePreviewCommon/BgcodeThumbnail.cs b/src/common/FilePreviewCommon/BgcodeThumbnail.cs new file mode 100644 index 0000000000..d3449556c5 --- /dev/null +++ b/src/common/FilePreviewCommon/BgcodeThumbnail.cs @@ -0,0 +1,66 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Drawing; +using System.IO; + +namespace Microsoft.PowerToys.FilePreviewCommon +{ + /// + /// Represents a bgcode thumbnail. + /// + public class BgcodeThumbnail + { + /// + /// Gets the bgcode thumbnail image format. + /// + public BgcodeThumbnailFormat Format { get; } + + /// + /// Gets the bgcode thumbnail image data. + /// + public byte[] Data { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The bgcode thumbnail image format. + /// The bgcode thumbnail image data. + public BgcodeThumbnail(BgcodeThumbnailFormat format, byte[] data) + { + Format = format; + Data = data; + } + + /// + /// Gets a representing this thumbnail. + /// + /// A representing this thumbnail. + public Bitmap? GetBitmap() + { + switch (Format) + { + case BgcodeThumbnailFormat.JPG: + case BgcodeThumbnailFormat.PNG: + return BitmapFromByteArray(); + + case BgcodeThumbnailFormat.QOI: + return BitmapFromQoiByteArray(); + + default: + return null; + } + } + + private Bitmap BitmapFromByteArray() + { + return new Bitmap(new MemoryStream(Data)); + } + + private Bitmap BitmapFromQoiByteArray() + { + return QoiImage.FromStream(new MemoryStream(Data)); + } + } +} diff --git a/src/common/FilePreviewCommon/BgcodeThumbnailFormat.cs b/src/common/FilePreviewCommon/BgcodeThumbnailFormat.cs new file mode 100644 index 0000000000..61219dae48 --- /dev/null +++ b/src/common/FilePreviewCommon/BgcodeThumbnailFormat.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace Microsoft.PowerToys.FilePreviewCommon +{ + public enum BgcodeThumbnailFormat + { + /// + /// PNG image format. + /// + PNG = 0, + + /// + /// JPG image format. + /// + JPG = 1, + + /// + /// QOI image format. + /// + QOI = 2, + } +} diff --git a/src/common/GPOWrapper/GPOWrapper.cpp b/src/common/GPOWrapper/GPOWrapper.cpp index 62b5b49a9d..87ef1721b1 100644 --- a/src/common/GPOWrapper/GPOWrapper.cpp +++ b/src/common/GPOWrapper/GPOWrapper.cpp @@ -56,6 +56,10 @@ namespace winrt::PowerToys::GPOWrapper::implementation { return static_cast(powertoys_gpo::getConfiguredGcodePreviewEnabledValue()); } + GpoRuleConfigured GPOWrapper::GetConfiguredBgcodePreviewEnabledValue() + { + return static_cast(powertoys_gpo::getConfiguredBgcodePreviewEnabledValue()); + } GpoRuleConfigured GPOWrapper::GetConfiguredSvgThumbnailsEnabledValue() { return static_cast(powertoys_gpo::getConfiguredSvgThumbnailsEnabledValue()); @@ -68,6 +72,10 @@ namespace winrt::PowerToys::GPOWrapper::implementation { return static_cast(powertoys_gpo::getConfiguredGcodeThumbnailsEnabledValue()); } + GpoRuleConfigured GPOWrapper::GetConfiguredBgcodeThumbnailsEnabledValue() + { + return static_cast(powertoys_gpo::getConfiguredBgcodeThumbnailsEnabledValue()); + } GpoRuleConfigured GPOWrapper::GetConfiguredStlThumbnailsEnabledValue() { return static_cast(powertoys_gpo::getConfiguredStlThumbnailsEnabledValue()); diff --git a/src/common/GPOWrapper/GPOWrapper.h b/src/common/GPOWrapper/GPOWrapper.h index 0d7783883b..33f90e15c9 100644 --- a/src/common/GPOWrapper/GPOWrapper.h +++ b/src/common/GPOWrapper/GPOWrapper.h @@ -21,9 +21,11 @@ namespace winrt::PowerToys::GPOWrapper::implementation static GpoRuleConfigured GetConfiguredMouseWithoutBordersEnabledValue(); static GpoRuleConfigured GetConfiguredPdfPreviewEnabledValue(); static GpoRuleConfigured GetConfiguredGcodePreviewEnabledValue(); + static GpoRuleConfigured GetConfiguredBgcodePreviewEnabledValue(); static GpoRuleConfigured GetConfiguredSvgThumbnailsEnabledValue(); static GpoRuleConfigured GetConfiguredPdfThumbnailsEnabledValue(); static GpoRuleConfigured GetConfiguredGcodeThumbnailsEnabledValue(); + static GpoRuleConfigured GetConfiguredBgcodeThumbnailsEnabledValue(); static GpoRuleConfigured GetConfiguredStlThumbnailsEnabledValue(); static GpoRuleConfigured GetConfiguredHostsFileEditorEnabledValue(); static GpoRuleConfigured GetConfiguredImageResizerEnabledValue(); diff --git a/src/common/GPOWrapper/GPOWrapper.idl b/src/common/GPOWrapper/GPOWrapper.idl index 1e3c3a19f5..252b4d128a 100644 --- a/src/common/GPOWrapper/GPOWrapper.idl +++ b/src/common/GPOWrapper/GPOWrapper.idl @@ -24,9 +24,11 @@ namespace PowerToys static GpoRuleConfigured GetConfiguredMonacoPreviewEnabledValue(); static GpoRuleConfigured GetConfiguredPdfPreviewEnabledValue(); static GpoRuleConfigured GetConfiguredGcodePreviewEnabledValue(); + static GpoRuleConfigured GetConfiguredBgcodePreviewEnabledValue(); static GpoRuleConfigured GetConfiguredSvgThumbnailsEnabledValue(); static GpoRuleConfigured GetConfiguredPdfThumbnailsEnabledValue(); static GpoRuleConfigured GetConfiguredGcodeThumbnailsEnabledValue(); + static GpoRuleConfigured GetConfiguredBgcodeThumbnailsEnabledValue(); static GpoRuleConfigured GetConfiguredStlThumbnailsEnabledValue(); static GpoRuleConfigured GetConfiguredHostsFileEditorEnabledValue(); static GpoRuleConfigured GetConfiguredImageResizerEnabledValue(); diff --git a/src/common/interop/Constants.cpp b/src/common/interop/Constants.cpp index 62e6425f6f..4fc9fca6f6 100644 --- a/src/common/interop/Constants.cpp +++ b/src/common/interop/Constants.cpp @@ -127,6 +127,10 @@ namespace winrt::PowerToys::Interop::implementation { return CommonSharedConstants::GCODE_PREVIEW_RESIZE_EVENT; } + hstring Constants::BgcodePreviewResizeEvent() + { + return CommonSharedConstants::BGCODE_PREVIEW_RESIZE_EVENT; + } hstring Constants::QoiPreviewResizeEvent() { return CommonSharedConstants::QOI_PREVIEW_RESIZE_EVENT; diff --git a/src/common/interop/Constants.h b/src/common/interop/Constants.h index 1b3a0f556c..80834442c5 100644 --- a/src/common/interop/Constants.h +++ b/src/common/interop/Constants.h @@ -35,6 +35,7 @@ namespace winrt::PowerToys::Interop::implementation static hstring RegistryPreviewTriggerEvent(); static hstring MeasureToolTriggerEvent(); static hstring GcodePreviewResizeEvent(); + static hstring BgcodePreviewResizeEvent(); static hstring QoiPreviewResizeEvent(); static hstring DevFilesPreviewResizeEvent(); static hstring MarkdownPreviewResizeEvent(); diff --git a/src/common/interop/Constants.idl b/src/common/interop/Constants.idl index 1de4b849ab..6833b0d417 100644 --- a/src/common/interop/Constants.idl +++ b/src/common/interop/Constants.idl @@ -32,6 +32,7 @@ namespace PowerToys static String RegistryPreviewTriggerEvent(); static String MeasureToolTriggerEvent(); static String GcodePreviewResizeEvent(); + static String BgcodePreviewResizeEvent(); static String QoiPreviewResizeEvent(); static String DevFilesPreviewResizeEvent(); static String MarkdownPreviewResizeEvent(); diff --git a/src/common/interop/shared_constants.h b/src/common/interop/shared_constants.h index d240297f39..aa6306d7ba 100644 --- a/src/common/interop/shared_constants.h +++ b/src/common/interop/shared_constants.h @@ -92,6 +92,9 @@ namespace CommonSharedConstants // Path to the event used by GcodePreviewHandler const wchar_t GCODE_PREVIEW_RESIZE_EVENT[] = L"Local\\PowerToysGcodePreviewResizeEvent-6ff1f9bd-ccbd-4b24-a79f-40a34fb0317d"; + // Path to the event used by BgcodePreviewHandler + const wchar_t BGCODE_PREVIEW_RESIZE_EVENT[] = L"Local\\PowerToysBgcodePreviewResizeEvent-1a76a553-919a-49e0-8179-776582d8e476"; + // Path to the event used by QoiPreviewHandler const wchar_t QOI_PREVIEW_RESIZE_EVENT[] = L"Local\\PowerToysQoiPreviewResizeEvent-579518d1-8c8b-494f-8143-04f43d761ead"; diff --git a/src/common/logger/logger_settings.h b/src/common/logger/logger_settings.h index c880614237..00cde3b485 100644 --- a/src/common/logger/logger_settings.h +++ b/src/common/logger/logger_settings.h @@ -19,6 +19,10 @@ struct LogSettings inline const static std::wstring gcodePrevLogPath = L"logs\\FileExplorer_localLow\\GcodePreviewHandler\\gcode-prev-handler-log.log"; inline const static std::string gcodeThumbLoggerName = "GcodeThumbnailProvider"; inline const static std::wstring gcodeThumbLogPath = L"logs\\FileExplorer_localLow\\GcodeThumbnailProvider\\gcode-thumbnail-provider-log.log"; + inline const static std::string bgcodePrevLoggerName = "bgcodePrevHandler"; + inline const static std::wstring bgcodePrevLogPath = L"logs\\FileExplorer_localLow\\BgcodePreviewHandler\\bgcode-prev-handler-log.log"; + inline const static std::string bgcodeThumbLoggerName = "BgcodeThumbnailProvider"; + inline const static std::wstring bgcodeThumbLogPath = L"logs\\FileExplorer_localLow\\BgcodeThumbnailProvider\\bgcode-thumbnail-provider-log.log"; inline const static std::string mdPrevLoggerName = "MDPrevHandler"; inline const static std::wstring mdPrevLogPath = L"logs\\FileExplorer_localLow\\MDPrevHandler\\md-prev-handler-log.log"; inline const static std::string monacoPrevLoggerName = "MonacoPrevHandler"; diff --git a/src/common/utils/gpo.h b/src/common/utils/gpo.h index 4185cf43b5..ed60bc1a37 100644 --- a/src/common/utils/gpo.h +++ b/src/common/utils/gpo.h @@ -37,9 +37,11 @@ namespace powertoys_gpo const std::wstring POLICY_CONFIGURE_ENABLED_MONACO_PREVIEW = L"ConfigureEnabledUtilityFileExplorerMonacoPreview"; const std::wstring POLICY_CONFIGURE_ENABLED_PDF_PREVIEW = L"ConfigureEnabledUtilityFileExplorerPDFPreview"; const std::wstring POLICY_CONFIGURE_ENABLED_GCODE_PREVIEW = L"ConfigureEnabledUtilityFileExplorerGcodePreview"; + const std::wstring POLICY_CONFIGURE_ENABLED_BGCODE_PREVIEW = L"ConfigureEnabledUtilityFileExplorerBgcodePreview"; const std::wstring POLICY_CONFIGURE_ENABLED_SVG_THUMBNAILS = L"ConfigureEnabledUtilityFileExplorerSVGThumbnails"; const std::wstring POLICY_CONFIGURE_ENABLED_PDF_THUMBNAILS = L"ConfigureEnabledUtilityFileExplorerPDFThumbnails"; const std::wstring POLICY_CONFIGURE_ENABLED_GCODE_THUMBNAILS = L"ConfigureEnabledUtilityFileExplorerGcodeThumbnails"; + const std::wstring POLICY_CONFIGURE_ENABLED_BGCODE_THUMBNAILS = L"ConfigureEnabledUtilityFileExplorerBgcodeThumbnails"; const std::wstring POLICY_CONFIGURE_ENABLED_STL_THUMBNAILS = L"ConfigureEnabledUtilityFileExplorerSTLThumbnails"; const std::wstring POLICY_CONFIGURE_ENABLED_HOSTS_FILE_EDITOR = L"ConfigureEnabledUtilityHostsFileEditor"; const std::wstring POLICY_CONFIGURE_ENABLED_IMAGE_RESIZER = L"ConfigureEnabledUtilityImageResizer"; @@ -328,6 +330,11 @@ namespace powertoys_gpo return getUtilityEnabledValue(POLICY_CONFIGURE_ENABLED_GCODE_PREVIEW); } + inline gpo_rule_configured_t getConfiguredBgcodePreviewEnabledValue() + { + return getUtilityEnabledValue(POLICY_CONFIGURE_ENABLED_BGCODE_PREVIEW); + } + inline gpo_rule_configured_t getConfiguredSvgThumbnailsEnabledValue() { return getUtilityEnabledValue(POLICY_CONFIGURE_ENABLED_SVG_THUMBNAILS); @@ -343,6 +350,11 @@ namespace powertoys_gpo return getUtilityEnabledValue(POLICY_CONFIGURE_ENABLED_GCODE_THUMBNAILS); } + inline gpo_rule_configured_t getConfiguredBgcodeThumbnailsEnabledValue() + { + return getUtilityEnabledValue(POLICY_CONFIGURE_ENABLED_BGCODE_THUMBNAILS); + } + inline gpo_rule_configured_t getConfiguredStlThumbnailsEnabledValue() { return getUtilityEnabledValue(POLICY_CONFIGURE_ENABLED_STL_THUMBNAILS); diff --git a/src/common/utils/modulesRegistry.h b/src/common/utils/modulesRegistry.h index 8b957bd5b9..be6c04a969 100644 --- a/src/common/utils/modulesRegistry.h +++ b/src/common/utils/modulesRegistry.h @@ -17,6 +17,7 @@ namespace NonLocalizable const static std::vector ExtMarkdown = { L".md", L".markdown", L".mdown", L".mkdn", L".mkd", L".mdwn", L".mdtxt", L".mdtext" }; const static std::vector ExtPDF = { L".pdf" }; const static std::vector ExtGCode = { L".gcode" }; + const static std::vector ExtBGCode = { L".bgcode" }; const static std::vector ExtSTL = { L".stl" }; const static std::vector ExtQOI = { L".qoi" }; const static std::vector ExtNoNoNo = { @@ -146,6 +147,19 @@ inline registry::ChangeSet getGcodePreviewHandlerChangeSet(const std::wstring in NonLocalizable::ExtGCode); } +inline registry::ChangeSet getBgcodePreviewHandlerChangeSet(const std::wstring installationDir, const bool perUser) +{ + using namespace registry::shellex; + return generatePreviewHandler(PreviewHandlerType::preview, + perUser, + L"{0e6d5bdd-d5f8-4692-a089-8bb88cdd37f4}", + get_std_product_version(), + (fs::path{ installationDir } / LR"d(PowerToys.BgcodePreviewHandlerCpp.dll)d").wstring(), + L"BgcodePreviewHandler", + L"Binary G-code Preview Handler", + NonLocalizable::ExtBGCode); +} + inline registry::ChangeSet getQoiPreviewHandlerChangeSet(const std::wstring installationDir, const bool perUser) { using namespace registry::shellex; @@ -200,6 +214,19 @@ inline registry::ChangeSet getGcodeThumbnailHandlerChangeSet(const std::wstring NonLocalizable::ExtGCode); } +inline registry::ChangeSet getBgcodeThumbnailHandlerChangeSet(const std::wstring installationDir, const bool perUser) +{ + using namespace registry::shellex; + return generatePreviewHandler(PreviewHandlerType::thumbnail, + perUser, + L"{5c93a1e4-99d0-4fb3-991c-6c296a27be21}", + get_std_product_version(), + (fs::path{ installationDir } / LR"d(PowerToys.BgcodeThumbnailProviderCpp.dll)d").wstring(), + L"BgcodeThumbnailProvider", + L"Binary G-code Thumbnail Provider", + NonLocalizable::ExtBGCode); +} + inline registry::ChangeSet getStlThumbnailHandlerChangeSet(const std::wstring installationDir, const bool perUser) { using namespace registry::shellex; @@ -275,9 +302,11 @@ inline std::vector getAllOnByDefaultModulesChangeSets(const getMdPreviewHandlerChangeSet(installationDir, PER_USER), getMonacoPreviewHandlerChangeSet(installationDir, PER_USER), getGcodePreviewHandlerChangeSet(installationDir, PER_USER), + getBgcodePreviewHandlerChangeSet(installationDir, PER_USER), getQoiPreviewHandlerChangeSet(installationDir, PER_USER), getSvgThumbnailHandlerChangeSet(installationDir, PER_USER), getGcodeThumbnailHandlerChangeSet(installationDir, PER_USER), + getBgcodeThumbnailHandlerChangeSet(installationDir, PER_USER), getStlThumbnailHandlerChangeSet(installationDir, PER_USER), getQoiThumbnailHandlerChangeSet(installationDir, PER_USER), getRegistryPreviewChangeSet(installationDir, PER_USER) }; @@ -291,10 +320,12 @@ inline std::vector getAllModulesChangeSets(const std::wstri getMonacoPreviewHandlerChangeSet(installationDir, PER_USER), getPdfPreviewHandlerChangeSet(installationDir, PER_USER), getGcodePreviewHandlerChangeSet(installationDir, PER_USER), + getBgcodePreviewHandlerChangeSet(installationDir, PER_USER), getQoiPreviewHandlerChangeSet(installationDir, PER_USER), getSvgThumbnailHandlerChangeSet(installationDir, PER_USER), getPdfThumbnailHandlerChangeSet(installationDir, PER_USER), getGcodeThumbnailHandlerChangeSet(installationDir, PER_USER), + getBgcodeThumbnailHandlerChangeSet(installationDir, PER_USER), getStlThumbnailHandlerChangeSet(installationDir, PER_USER), getQoiThumbnailHandlerChangeSet(installationDir, PER_USER), getRegistryPreviewChangeSet(installationDir, PER_USER), diff --git a/src/dsc/Microsoft.PowerToys.Configure/examples/disableAllModules.winget b/src/dsc/Microsoft.PowerToys.Configure/examples/disableAllModules.winget index 92986e8107..6b64e2114d 100644 --- a/src/dsc/Microsoft.PowerToys.Configure/examples/disableAllModules.winget +++ b/src/dsc/Microsoft.PowerToys.Configure/examples/disableAllModules.winget @@ -54,6 +54,8 @@ properties: EnablePdfThumbnail: false EnableGcodePreview: false EnableGcodeThumbnail: false + EnableBgcodePreview: false + EnableBgcodeThumbnail: false EnableStlThumbnail: false EnableQoiPreview: false EnableQoiThumbnail: false diff --git a/src/dsc/Microsoft.PowerToys.Configure/examples/enableAllModules.winget b/src/dsc/Microsoft.PowerToys.Configure/examples/enableAllModules.winget index 5ff4dcfe71..e3b9c56c09 100644 --- a/src/dsc/Microsoft.PowerToys.Configure/examples/enableAllModules.winget +++ b/src/dsc/Microsoft.PowerToys.Configure/examples/enableAllModules.winget @@ -54,6 +54,8 @@ properties: EnablePdfThumbnail: true EnableGcodePreview: true EnableGcodeThumbnail: true + EnableBgcodePreview: true + EnableBgcodeThumbnail: true EnableStlThumbnail: true EnableQoiPreview: true EnableQoiThumbnail: true diff --git a/src/gpo/assets/PowerToys.admx b/src/gpo/assets/PowerToys.admx index 9bbd0d7ff3..685eeaf350 100644 --- a/src/gpo/assets/PowerToys.admx +++ b/src/gpo/assets/PowerToys.admx @@ -217,6 +217,16 @@ + + + + + + + + + + @@ -247,6 +257,16 @@ + + + + + + + + + + diff --git a/src/gpo/assets/en-US/PowerToys.adml b/src/gpo/assets/en-US/PowerToys.adml index 95deba2bd6..7fe996abcc 100644 --- a/src/gpo/assets/en-US/PowerToys.adml +++ b/src/gpo/assets/en-US/PowerToys.adml @@ -253,9 +253,11 @@ If you don't configure this policy, the user will be able to control the setting Source code file preview: Configure enabled state PDF file preview: Configure enabled state Gcode file preview: Configure enabled state + BGcode file preview: Configure enabled state SVG file thumbnail: Configure enabled state PDF file thumbnail: Configure enabled state Gcode file thumbnail: Configure enabled state + BGcode file thumbnail: Configure enabled state STL file thumbnail: Configure enabled state Hosts file editor: Configure enabled state Image Resizer: Configure enabled state diff --git a/src/modules/previewpane/BgcodePreviewHandler/BgcodePreviewHandler.csproj b/src/modules/previewpane/BgcodePreviewHandler/BgcodePreviewHandler.csproj new file mode 100644 index 0000000000..2042920cdc --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandler/BgcodePreviewHandler.csproj @@ -0,0 +1,65 @@ + + + + + + + enable + true + PowerToys.BgcodePreviewHandler + PowerToys BgcodePreviewHandler + PowerToys BgcodePreviewHandler + ..\..\..\..\$(Platform)\$(Configuration)\BgcodePreviewPaneDocumentation.xml + ..\..\..\..\$(Platform)\$(Configuration) + false + false + true + true + PowerToys.BgcodePreviewHandler + {9E0CBC06-F29A-4810-B93C-97D53863B95E} + Microsoft.PowerToys.PreviewHandler.Bgcode + PerMonitorV2 + + + + + + True + True + Resource.resx + + + + + + PowerToys.GPOWrapper + $(OutDir) + false + + + + $(NoWarn);1591 + WinExe + + + + + + + + + + + + + + + + + + ResXFileCodeGenerator + Resource.Designer.cs + + + + diff --git a/src/modules/previewpane/BgcodePreviewHandler/BgcodePreviewHandlerControl.cs b/src/modules/previewpane/BgcodePreviewHandler/BgcodePreviewHandlerControl.cs new file mode 100644 index 0000000000..7dc205bed3 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandler/BgcodePreviewHandlerControl.cs @@ -0,0 +1,179 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Common; +using Microsoft.PowerToys.FilePreviewCommon; +using Microsoft.PowerToys.PreviewHandler.Bgcode.Telemetry.Events; +using Microsoft.PowerToys.Telemetry; + +namespace Microsoft.PowerToys.PreviewHandler.Bgcode +{ + /// + /// Implementation of Control for Bgcode Preview Handler. + /// + public class BgcodePreviewHandlerControl : FormHandlerControl + { + /// + /// Picture box control to display the Binary G-code thumbnail. + /// + private PictureBox _pictureBox; + + /// + /// Text box to display the information about blocked elements from Svg. + /// + private RichTextBox _textBox; + + /// + /// Represent if a text box info bar is added for showing message. + /// + private bool _infoBarAdded; + + /// + /// Initializes a new instance of the class. + /// + public BgcodePreviewHandlerControl() + { + SetBackgroundColor(Settings.BackgroundColor); + } + + /// + /// Start the preview on the Control. + /// + /// Stream reference to access source file. + public override void DoPreview(T dataSource) + { + if (global::PowerToys.GPOWrapper.GPOWrapper.GetConfiguredBgcodePreviewEnabledValue() == global::PowerToys.GPOWrapper.GpoRuleConfigured.Disabled) + { + // GPO is disabling this utility. Show an error message instead. + _infoBarAdded = true; + AddTextBoxControl(Properties.Resource.GpoDisabledErrorText); + Resize += FormResized; + base.DoPreview(dataSource); + + return; + } + + try + { + Bitmap thumbnail = null; + + if (!(dataSource is string filePath)) + { + throw new ArgumentException($"{nameof(dataSource)} for {nameof(BgcodePreviewHandlerControl)} must be a string but was a '{typeof(T)}'"); + } + + FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); + + using (var reader = new BinaryReader(fs)) + { + var bgcodeThumbnail = BgcodeHelper.GetBestThumbnail(reader); + + thumbnail = bgcodeThumbnail?.GetBitmap(); + } + + _infoBarAdded = false; + + if (thumbnail == null) + { + _infoBarAdded = true; + AddTextBoxControl(Properties.Resource.BgcodeWithoutEmbeddedThumbnails); + } + else + { + AddPictureBoxControl(thumbnail); + } + + Resize += FormResized; + base.DoPreview(fs); + try + { + PowerToysTelemetry.Log.WriteEvent(new BgcodeFilePreviewed()); + } + catch + { // Should not crash if sending telemetry is failing. Ignore the exception. + } + } + catch (Exception ex) + { + PreviewError(ex, dataSource); + } + } + + /// + /// Occurs when RichtextBox is resized. + /// + /// Reference to resized control. + /// Provides data for the ContentsResized event. + private void RTBContentsResized(object sender, ContentsResizedEventArgs e) + { + var richTextBox = sender as RichTextBox; + richTextBox.Height = e.NewRectangle.Height + 5; + } + + /// + /// Occurs when form is resized. + /// + /// Reference to resized control. + /// Provides data for the resize event. + private void FormResized(object sender, EventArgs e) + { + if (_infoBarAdded) + { + _textBox.Width = Width; + } + } + + /// + /// Adds a PictureBox Control to Control Collection. + /// + /// Image to display on PictureBox Control. + private void AddPictureBoxControl(Image image) + { + _pictureBox = new PictureBox(); + _pictureBox.BackgroundImage = image; + _pictureBox.BackgroundImageLayout = Width >= image.Width && Height >= image.Height ? ImageLayout.Center : ImageLayout.Zoom; + _pictureBox.Dock = DockStyle.Fill; + Controls.Add(_pictureBox); + } + + /// + /// Adds a Text Box in Controls for showing information about blocked elements. + /// + /// Message to be displayed in textbox. + private void AddTextBoxControl(string message) + { + _textBox = new RichTextBox(); + _textBox.Text = message; + _textBox.BackColor = Color.LightYellow; + _textBox.Multiline = true; + _textBox.Dock = DockStyle.Top; + _textBox.ReadOnly = true; + _textBox.ContentsResized += RTBContentsResized; + _textBox.ScrollBars = RichTextBoxScrollBars.None; + _textBox.BorderStyle = BorderStyle.None; + Controls.Add(_textBox); + } + + /// + /// Called when an error occurs during preview. + /// + /// The exception which occurred. + /// Stream reference to access source file. + private void PreviewError(Exception exception, T dataSource) + { + try + { + PowerToysTelemetry.Log.WriteEvent(new BgcodeFilePreviewError { Message = exception.Message }); + } + catch + { // Should not crash if sending telemetry is failing. Ignore the exception. + } + + Controls.Clear(); + _infoBarAdded = true; + AddTextBoxControl(Properties.Resource.BgcodeNotPreviewedError); + base.DoPreview(dataSource); + } + } +} diff --git a/src/modules/previewpane/BgcodePreviewHandler/BgcodePreviewHandlerControl.resx b/src/modules/previewpane/BgcodePreviewHandler/BgcodePreviewHandlerControl.resx new file mode 100644 index 0000000000..1af7de150c --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandler/BgcodePreviewHandlerControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/src/modules/previewpane/BgcodePreviewHandler/Program.cs b/src/modules/previewpane/BgcodePreviewHandler/Program.cs new file mode 100644 index 0000000000..f1f1d0ed35 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandler/Program.cs @@ -0,0 +1,80 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Globalization; +using System.Windows.Threading; + +using Common.UI; +using Microsoft.PowerToys.Telemetry; +using PowerToys.Interop; + +namespace Microsoft.PowerToys.PreviewHandler.Bgcode +{ + internal static class Program + { + private static CancellationTokenSource _tokenSource = new CancellationTokenSource(); + + private static BgcodePreviewHandlerControl _previewHandlerControl; + + /// + /// The main entry point for the application. + /// + [STAThread] + public static void Main(string[] args) + { + ApplicationConfiguration.Initialize(); + if (args != null) + { + if (args.Length == 6) + { + ETWTrace etwTrace = new ETWTrace(Path.Combine(Environment.GetEnvironmentVariable("USERPROFILE"), "AppData", "LocalLow", "Microsoft", "PowerToys", "etw")); + + string filePath = args[0]; + IntPtr hwnd = IntPtr.Parse(args[1], NumberStyles.HexNumber, CultureInfo.InvariantCulture); + + int left = Convert.ToInt32(args[2], 10); + int right = Convert.ToInt32(args[3], 10); + int top = Convert.ToInt32(args[4], 10); + int bottom = Convert.ToInt32(args[5], 10); + Rectangle s = new Rectangle(left, top, right - left, bottom - top); + + _previewHandlerControl = new BgcodePreviewHandlerControl(); + + if (!_previewHandlerControl.SetWindow(hwnd, s)) + { + return; + } + + _previewHandlerControl.DoPreview(filePath); + + NativeEventWaiter.WaitForEventLoop( + Constants.GcodePreviewResizeEvent(), + () => + { + Rectangle s = default; + if (!_previewHandlerControl.SetRect(s)) + { + etwTrace?.Dispose(); + + // When the parent HWND became invalid, the application won't respond to Application.Exit(). + Environment.Exit(0); + } + }, + Dispatcher.CurrentDispatcher, + _tokenSource.Token); + + etwTrace?.Dispose(); + } + else + { + MessageBox.Show("Wrong number of args: " + args.Length.ToString(CultureInfo.InvariantCulture)); + } + } + + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + Application.Run(); + } + } +} diff --git a/src/modules/previewpane/BgcodePreviewHandler/Properties/Resource.Designer.cs b/src/modules/previewpane/BgcodePreviewHandler/Properties/Resource.Designer.cs new file mode 100644 index 0000000000..ecb8017305 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandler/Properties/Resource.Designer.cs @@ -0,0 +1,90 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.PowerToys.PreviewHandler.Bgcode.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resource { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resource() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.PowerToys.PreviewHandler.Bgcode.Properties.Resource", typeof(Resource).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to This Binary G-code could not be previewed due to an internal error.. + /// + internal static string BgcodeNotPreviewedError { + get { + return ResourceManager.GetString("BgcodeNotPreviewedError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to This Binary G-code does not contain any embedded thumbnails.. + /// + internal static string BgcodeWithoutEmbeddedThumbnails { + get { + return ResourceManager.GetString("BgcodeWithoutEmbeddedThumbnails", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Tried to start with a GPO policy setting the utility to always be disabled. Please contact your systems administrator.. + /// + internal static string GpoDisabledErrorText { + get { + return ResourceManager.GetString("GpoDisabledErrorText", resourceCulture); + } + } + } +} diff --git a/src/modules/previewpane/BgcodePreviewHandler/Properties/Resource.resx b/src/modules/previewpane/BgcodePreviewHandler/Properties/Resource.resx new file mode 100644 index 0000000000..62a1cdc0dd --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandler/Properties/Resource.resx @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + This Binary G-code could not be previewed due to an internal error. + This text is displayed if Binary G-code fails to preview + + + This Binary G-code does not contain any embedded thumbnails. + + + Tried to start with a GPO policy setting the utility to always be disabled. Please contact your systems administrator. + GPO stands for the Windows Group Policy Object feature. + + \ No newline at end of file diff --git a/src/modules/previewpane/BgcodePreviewHandler/Settings.cs b/src/modules/previewpane/BgcodePreviewHandler/Settings.cs new file mode 100644 index 0000000000..20815d160b --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandler/Settings.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace Microsoft.PowerToys.PreviewHandler.Bgcode +{ + internal sealed class Settings + { + /// + /// Gets the color of the window background. + /// Even though this is not a setting yet, it's retrieved from a "Settings" class to be aligned with other preview handlers that contain this setting. + /// It's possible it can be converted into a setting in the future. + /// + public static Color BackgroundColor + { + get + { + if (GetTheme() == "dark") + { + return Color.FromArgb(30, 30, 30); // #1e1e1e + } + else + { + return Color.White; + } + } + } + + /// + /// Returns the theme. + /// + /// Theme that should be used. + public static string GetTheme() + { + return Common.UI.ThemeManager.GetWindowsBaseColor().ToLowerInvariant(); + } + } +} diff --git a/src/modules/previewpane/BgcodePreviewHandler/Telemetry/Events/BgcodeFileHandlerLoaded.cs b/src/modules/previewpane/BgcodePreviewHandler/Telemetry/Events/BgcodeFileHandlerLoaded.cs new file mode 100644 index 0000000000..f28f358953 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandler/Telemetry/Events/BgcodeFileHandlerLoaded.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.Tracing; +using Microsoft.PowerToys.Telemetry; +using Microsoft.PowerToys.Telemetry.Events; + +namespace Microsoft.PowerToys.PreviewHandler.Bgcode.Telemetry.Events +{ + /// + /// A telemetry event to be raised when a bgcode file has been viewed in the preview pane. + /// + [EventData] + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] + public class BgcodeFileHandlerLoaded : EventBase, IEvent + { + /// + public PartA_PrivTags PartA_PrivTags => PartA_PrivTags.ProductAndServiceUsage; + } +} diff --git a/src/modules/previewpane/BgcodePreviewHandler/Telemetry/Events/BgcodeFilePreviewError.cs b/src/modules/previewpane/BgcodePreviewHandler/Telemetry/Events/BgcodeFilePreviewError.cs new file mode 100644 index 0000000000..e71f2c3f3f --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandler/Telemetry/Events/BgcodeFilePreviewError.cs @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.Tracing; +using Microsoft.PowerToys.Telemetry; +using Microsoft.PowerToys.Telemetry.Events; + +namespace Microsoft.PowerToys.PreviewHandler.Bgcode.Telemetry.Events +{ + /// + /// A telemetry event to be raised when an error has occurred in the preview pane. + /// + [EventData] + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] + public class BgcodeFilePreviewError : EventBase, IEvent + { + /// + /// Gets or sets the error message to log as part of the telemetry event. + /// + public string Message { get; set; } + + /// + public PartA_PrivTags PartA_PrivTags => PartA_PrivTags.ProductAndServicePerformance; + } +} diff --git a/src/modules/previewpane/BgcodePreviewHandler/Telemetry/Events/BgcodeFilePreviewed.cs b/src/modules/previewpane/BgcodePreviewHandler/Telemetry/Events/BgcodeFilePreviewed.cs new file mode 100644 index 0000000000..8083b5d7e5 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandler/Telemetry/Events/BgcodeFilePreviewed.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.Tracing; +using Microsoft.PowerToys.Telemetry; +using Microsoft.PowerToys.Telemetry.Events; + +namespace Microsoft.PowerToys.PreviewHandler.Bgcode.Telemetry.Events +{ + /// + /// A telemetry event to be raised when a bgcode file has been viewed in the preview pane. + /// + [EventData] + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] + public class BgcodeFilePreviewed : EventBase, IEvent + { + /// + public PartA_PrivTags PartA_PrivTags => PartA_PrivTags.ProductAndServiceUsage; + } +} diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandler.cpp b/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandler.cpp new file mode 100644 index 0000000000..2091db6c34 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandler.cpp @@ -0,0 +1,284 @@ +#include "pch.h" +#include "BgcodePreviewHandler.h" +#include "../powerpreview/powerpreviewConstants.h" + +#include +#include +#include + +#include +#include +#include +#include +#include + +extern HINSTANCE g_hInst; +extern long g_cDllRef; + +BgcodePreviewHandler::BgcodePreviewHandler() : + m_cRef(1), m_hwndParent(NULL), m_rcParent(), m_punkSite(NULL), m_process(NULL) +{ + m_resizeEvent = CreateEvent(nullptr, false, false, CommonSharedConstants::BGCODE_PREVIEW_RESIZE_EVENT); + + std::filesystem::path logFilePath(PTSettingsHelper::get_local_low_folder_location()); + logFilePath.append(LogSettings::bgcodePrevLogPath); + Logger::init(LogSettings::bgcodePrevLoggerName, logFilePath.wstring(), PTSettingsHelper::get_log_settings_file_location()); + + InterlockedIncrement(&g_cDllRef); +} + +BgcodePreviewHandler::~BgcodePreviewHandler() +{ + InterlockedDecrement(&g_cDllRef); +} + +#pragma region IUnknown + +IFACEMETHODIMP BgcodePreviewHandler::QueryInterface(REFIID riid, void** ppv) +{ + static const QITAB qit[] = { + QITABENT(BgcodePreviewHandler, IPreviewHandler), + QITABENT(BgcodePreviewHandler, IInitializeWithFile), + QITABENT(BgcodePreviewHandler, IPreviewHandlerVisuals), + QITABENT(BgcodePreviewHandler, IOleWindow), + QITABENT(BgcodePreviewHandler, IObjectWithSite), + { 0 }, + }; + return QISearch(this, qit, riid, ppv); +} + +IFACEMETHODIMP_(ULONG) +BgcodePreviewHandler::AddRef() +{ + return InterlockedIncrement(&m_cRef); +} + +IFACEMETHODIMP_(ULONG) +BgcodePreviewHandler::Release() +{ + ULONG cRef = InterlockedDecrement(&m_cRef); + if (0 == cRef) + { + delete this; + } + return cRef; +} + +#pragma endregion + +#pragma region IInitializationWithFile + +IFACEMETHODIMP BgcodePreviewHandler::Initialize(LPCWSTR pszFilePath, DWORD grfMode) +{ + m_filePath = pszFilePath; + return S_OK; +} + +#pragma endregion + +#pragma region IPreviewHandler + +IFACEMETHODIMP BgcodePreviewHandler::SetWindow(HWND hwnd, const RECT* prc) +{ + if (hwnd && prc) + { + m_hwndParent = hwnd; + m_rcParent = *prc; + } + return S_OK; +} + +IFACEMETHODIMP BgcodePreviewHandler::SetFocus() +{ + return S_OK; +} + +IFACEMETHODIMP BgcodePreviewHandler::QueryFocus(HWND* phwnd) +{ + HRESULT hr = E_INVALIDARG; + if (phwnd) + { + *phwnd = ::GetFocus(); + if (*phwnd) + { + hr = S_OK; + } + else + { + hr = HRESULT_FROM_WIN32(GetLastError()); + } + } + return hr; +} + +IFACEMETHODIMP BgcodePreviewHandler::TranslateAccelerator(MSG* pmsg) +{ + HRESULT hr = S_FALSE; + IPreviewHandlerFrame* pFrame = NULL; + if (m_punkSite && SUCCEEDED(m_punkSite->QueryInterface(&pFrame))) + { + hr = pFrame->TranslateAccelerator(pmsg); + + pFrame->Release(); + } + return hr; +} + +IFACEMETHODIMP BgcodePreviewHandler::SetRect(const RECT* prc) +{ + HRESULT hr = E_INVALIDARG; + if (prc != NULL) + { + if (m_rcParent.left == 0 && m_rcParent.top == 0 && m_rcParent.right == 0 && m_rcParent.bottom == 0 && (prc->left != 0 || prc->top != 0 || prc->right != 0 || prc->bottom != 0)) + { + // BgcodePreviewHandler position first initialisation, do the first preview + m_rcParent = *prc; + DoPreview(); + } + if (!m_resizeEvent) + { + Logger::error(L"Failed to create resize event for BgcodePreviewHandler"); + } + else + { + if (m_rcParent.right != prc->right || m_rcParent.left != prc->left || m_rcParent.top != prc->top || m_rcParent.bottom != prc->bottom) + { + if (!SetEvent(m_resizeEvent)) + { + Logger::error(L"Failed to signal resize event for BgcodePreviewHandler"); + } + } + } + m_rcParent = *prc; + hr = S_OK; + } + return hr; +} + +IFACEMETHODIMP BgcodePreviewHandler::DoPreview() +{ + try + { + if (m_hwndParent == NULL || (m_rcParent.left == 0 && m_rcParent.top == 0 && m_rcParent.right == 0 && m_rcParent.bottom == 0)) + { + // Postponing Start BgcodePreviewHandler.exe, parent and position not yet initialized. Preview will be done after initialisation. + return S_OK; + } + Logger::info(L"Starting BgcodePreviewHandler.exe"); + + STARTUPINFO info = { sizeof(info) }; + std::wstring cmdLine{ L"\"" + m_filePath + L"\"" }; + cmdLine += L" "; + std::wostringstream ss; + ss << std::hex << m_hwndParent; + + cmdLine += ss.str(); + cmdLine += L" "; + cmdLine += std::to_wstring(m_rcParent.left); + cmdLine += L" "; + cmdLine += std::to_wstring(m_rcParent.right); + cmdLine += L" "; + cmdLine += std::to_wstring(m_rcParent.top); + cmdLine += L" "; + cmdLine += std::to_wstring(m_rcParent.bottom); + std::wstring appPath = get_module_folderpath(g_hInst) + L"\\PowerToys.BgcodePreviewHandler.exe"; + + SHELLEXECUTEINFO sei{ sizeof(sei) }; + sei.fMask = { SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI }; + sei.lpFile = appPath.c_str(); + sei.lpParameters = cmdLine.c_str(); + sei.nShow = SW_SHOWDEFAULT; + ShellExecuteEx(&sei); + + // Prevent to leak processes: preview is called multiple times when minimizing and restoring Explorer window + if (m_process) + { + TerminateProcess(m_process, 0); + } + + m_process = sei.hProcess; + } + catch (std::exception& e) + { + std::wstring errorMessage = std::wstring{ winrt::to_hstring(e.what()) }; + Logger::error(L"Failed to start BgcodePreviewHandler.exe. Error: {}", errorMessage); + } + + return S_OK; +} + +IFACEMETHODIMP BgcodePreviewHandler::Unload() +{ + Logger::info(L"Unload and terminate .exe"); + + m_hwndParent = NULL; + TerminateProcess(m_process, 0); + return S_OK; +} + +#pragma endregion + +#pragma region IPreviewHandlerVisuals + +IFACEMETHODIMP BgcodePreviewHandler::SetBackgroundColor(COLORREF color) +{ + HBRUSH brush = CreateSolidBrush(WindowsColors::is_dark_mode() ? powerpreviewConstants::DARK_THEME_COLOR : powerpreviewConstants::LIGHT_THEME_COLOR); + SetClassLongPtr(m_hwndParent, GCLP_HBRBACKGROUND, reinterpret_cast(brush)); + return S_OK; +} + +IFACEMETHODIMP BgcodePreviewHandler::SetFont(const LOGFONTW* plf) +{ + return S_OK; +} + +IFACEMETHODIMP BgcodePreviewHandler::SetTextColor(COLORREF color) +{ + return S_OK; +} + +#pragma endregion + +#pragma region IOleWindow + +IFACEMETHODIMP BgcodePreviewHandler::GetWindow(HWND* phwnd) +{ + HRESULT hr = E_INVALIDARG; + if (phwnd) + { + *phwnd = m_hwndParent; + hr = S_OK; + } + return hr; +} + +IFACEMETHODIMP BgcodePreviewHandler::ContextSensitiveHelp(BOOL fEnterMode) +{ + return E_NOTIMPL; +} + +#pragma endregion + +#pragma region IObjectWithSite + +IFACEMETHODIMP BgcodePreviewHandler::SetSite(IUnknown* punkSite) +{ + if (m_punkSite) + { + m_punkSite->Release(); + m_punkSite = NULL; + } + return punkSite ? punkSite->QueryInterface(&m_punkSite) : S_OK; +} + +IFACEMETHODIMP BgcodePreviewHandler::GetSite(REFIID riid, void** ppv) +{ + *ppv = NULL; + return m_punkSite ? m_punkSite->QueryInterface(riid, ppv) : E_FAIL; +} + +#pragma endregion + +#pragma region Helper Functions + +#pragma endregion diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandler.h b/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandler.h new file mode 100644 index 0000000000..481eedec09 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandler.h @@ -0,0 +1,69 @@ +#pragma once + +#include "pch.h" + +#include +#include +#include + +class BgcodePreviewHandler : + public IInitializeWithFile, + public IPreviewHandler, + public IPreviewHandlerVisuals, + public IOleWindow, + public IObjectWithSite +{ +public: + // IUnknown + IFACEMETHODIMP QueryInterface(REFIID riid, void** ppv); + IFACEMETHODIMP_(ULONG) AddRef(); + IFACEMETHODIMP_(ULONG) Release(); + + // IInitializeWithFile + IFACEMETHODIMP Initialize(LPCWSTR pszFilePath, DWORD grfMode); + + // IPreviewHandler + IFACEMETHODIMP SetWindow(HWND hwnd, const RECT* prc); + IFACEMETHODIMP SetFocus(); + IFACEMETHODIMP QueryFocus(HWND* phwnd); + IFACEMETHODIMP TranslateAccelerator(MSG* pmsg); + IFACEMETHODIMP SetRect(const RECT* prc); + IFACEMETHODIMP DoPreview(); + IFACEMETHODIMP Unload(); + + // IPreviewHandlerVisuals + IFACEMETHODIMP SetBackgroundColor(COLORREF color); + IFACEMETHODIMP SetFont(const LOGFONTW* plf); + IFACEMETHODIMP SetTextColor(COLORREF color); + + // IOleWindow + IFACEMETHODIMP GetWindow(HWND* phwnd); + IFACEMETHODIMP ContextSensitiveHelp(BOOL fEnterMode); + + // IObjectWithSite + IFACEMETHODIMP SetSite(IUnknown* punkSite); + IFACEMETHODIMP GetSite(REFIID riid, void** ppv); + + BgcodePreviewHandler(); +protected: + ~BgcodePreviewHandler(); + +private: + // Reference count of component. + long m_cRef; + + // Provided during initialization. + std::wstring m_filePath; + + // Parent window that hosts the previewer window. + // Note: do NOT DestroyWindow this. + HWND m_hwndParent; + // Bounding rect of the parent window. + RECT m_rcParent; + + // Site pointer from host, used to get IPreviewHandlerFrame. + IUnknown* m_punkSite; + + HANDLE m_process; + HANDLE m_resizeEvent; +}; \ No newline at end of file diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandlerCpp.rc b/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandlerCpp.rc new file mode 100644 index 0000000000..5fa3c8b90d --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandlerCpp.rc @@ -0,0 +1,40 @@ +#include +#include "resource.h" +#include "../../../common/version/version.h" + +#define APSTUDIO_READONLY_SYMBOLS +#include "winres.h" +#undef APSTUDIO_READONLY_SYMBOLS + +1 VERSIONINFO +FILEVERSION FILE_VERSION +PRODUCTVERSION PRODUCT_VERSION +FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG +FILEFLAGS VS_FF_DEBUG +#else +FILEFLAGS 0x0L +#endif +FILEOS VOS_NT_WINDOWS32 +FILETYPE VFT_DLL +FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" // US English (0x0409), Unicode (0x04B0) charset + BEGIN + VALUE "CompanyName", COMPANY_NAME + VALUE "FileDescription", FILE_DESCRIPTION + VALUE "FileVersion", FILE_VERSION_STRING + VALUE "InternalName", INTERNAL_NAME + VALUE "LegalCopyright", COPYRIGHT_NOTE + VALUE "OriginalFilename", ORIGINAL_FILENAME + VALUE "ProductName", PRODUCT_NAME + VALUE "ProductVersion", PRODUCT_VERSION_STRING + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 // US English (0x0409), Unicode (1200) charset + END +END diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandlerCpp.vcxproj b/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandlerCpp.vcxproj new file mode 100644 index 0000000000..7679cccbc0 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandlerCpp.vcxproj @@ -0,0 +1,119 @@ + + + + + 16.0 + Win32Proj + {F6088A11-1C9E-4420-AA90-CF7E78DD7F1C} + BgcodePreviewHandlerCpp + + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + + + + + + + + + + ..\..\..\..\$(Platform)\$(Configuration)\ + + + PowerToys.$(ProjectName) + + + + Level3 + true + _DEBUG;MARKDOWNPREVIEWHANDLERCPP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + ../../.. + + + Windows + true + false + GlobalExportFunctions.def + Shlwapi.lib;$(CoreLibraryDependencies);%(AdditionalDependencies) + + + + + Level3 + true + true + true + NDEBUG;MARKDOWNPREVIEWHANDLERCPP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + ../../.. + + + Windows + true + true + true + false + GlobalExportFunctions.def + Shlwapi.lib;$(CoreLibraryDependencies);%(AdditionalDependencies) + + + + + + + + + + + + + + Create + + + + + + + + + + + + {d9b8fc84-322a-4f9f-bbb9-20915c47ddfd} + + + {6955446d-23f7-4023-9bb3-8657f904af99} + + + {98537082-0fdb-40de-abd8-0dc5a4269bab} + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandlerCpp.vcxproj.filters b/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandlerCpp.vcxproj.filters new file mode 100644 index 0000000000..9d6a4997b2 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/BgcodePreviewHandlerCpp.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Resource Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + + + + Resource Files + + + \ No newline at end of file diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/ClassFactory.cpp b/src/modules/previewpane/BgcodePreviewHandlerCpp/ClassFactory.cpp new file mode 100644 index 0000000000..13b07c0c71 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/ClassFactory.cpp @@ -0,0 +1,84 @@ +#include "pch.h" +#include "ClassFactory.h" +#include "BgcodePreviewHandler.h" + +#include +#include + +extern long g_cDllRef; + +ClassFactory::ClassFactory() : + m_cRef(1) +{ + InterlockedIncrement(&g_cDllRef); +} + +ClassFactory::~ClassFactory() +{ + InterlockedDecrement(&g_cDllRef); +} + +// +// IUnknown +// + +IFACEMETHODIMP ClassFactory::QueryInterface(REFIID riid, void **ppv) +{ + static const QITAB qit[] = { + QITABENT(ClassFactory, IClassFactory), + { 0 }, + }; + return QISearch(this, qit, riid, ppv); +} + +IFACEMETHODIMP_(ULONG) ClassFactory::AddRef() +{ + return InterlockedIncrement(&m_cRef); +} + +IFACEMETHODIMP_(ULONG) ClassFactory::Release() +{ + ULONG cRef = InterlockedDecrement(&m_cRef); + if (0 == cRef) + { + delete this; + } + return cRef; +} + +// +// IClassFactory +// + +IFACEMETHODIMP ClassFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppv) +{ + HRESULT hr = CLASS_E_NOAGGREGATION; + + if (pUnkOuter == NULL) + { + hr = E_OUTOFMEMORY; + + BgcodePreviewHandler* pExt = new (std::nothrow) BgcodePreviewHandler(); + if (pExt) + { + hr = pExt->QueryInterface(riid, ppv); + pExt->Release(); + } + } + + return hr; +} + +IFACEMETHODIMP ClassFactory::LockServer(BOOL fLock) +{ + if (fLock) + { + InterlockedIncrement(&g_cDllRef); + } + else + { + InterlockedDecrement(&g_cDllRef); + } + + return S_OK; +} \ No newline at end of file diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/ClassFactory.h b/src/modules/previewpane/BgcodePreviewHandlerCpp/ClassFactory.h new file mode 100644 index 0000000000..b393c3916e --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/ClassFactory.h @@ -0,0 +1,24 @@ +#pragma once + +#include + +class ClassFactory : public IClassFactory +{ +public: + // IUnknown + IFACEMETHODIMP QueryInterface(REFIID riid, void** ppv); + IFACEMETHODIMP_(ULONG) AddRef(); + IFACEMETHODIMP_(ULONG) Release(); + + // IClassFactory + IFACEMETHODIMP CreateInstance(IUnknown* pUnkOuter, REFIID riid, void** ppv); + IFACEMETHODIMP LockServer(BOOL fLock); + + ClassFactory(); + +protected: + ~ClassFactory(); + +private: + long m_cRef; +}; diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/GlobalExportFunctions.def b/src/modules/previewpane/BgcodePreviewHandlerCpp/GlobalExportFunctions.def new file mode 100644 index 0000000000..76fc66cac3 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/GlobalExportFunctions.def @@ -0,0 +1,3 @@ +EXPORTS + DllGetClassObject PRIVATE + DllCanUnloadNow PRIVATE diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/dllmain.cpp b/src/modules/previewpane/BgcodePreviewHandlerCpp/dllmain.cpp new file mode 100644 index 0000000000..49ca61cdf9 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/dllmain.cpp @@ -0,0 +1,73 @@ +// dllmain.cpp : Defines the entry point for the DLL application. +#include "pch.h" +#include "ClassFactory.h" + +HINSTANCE g_hInst = NULL; +long g_cDllRef = 0; + +// {0e6d5bdd-d5f8-4692-a089-8bb88cdd37f4} +static const GUID CLSID_BgcodePreviewHandler = { 0x0e6d5bdd, 0xd5f8, 0x4692, { 0xa0, 0x89, 0x8b, 0xb8, 0x8c, 0xdd, 0x37, 0xf4 } }; + +BOOL APIENTRY DllMain(HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + g_hInst = hModule; + DisableThreadLibraryCalls(hModule); + break; + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +// +// FUNCTION: DllGetClassObject +// +// PURPOSE: Create the class factory and query to the specific interface. +// +// PARAMETERS: +// * rclsid - The CLSID that will associate the correct data and code. +// * riid - A reference to the identifier of the interface that the caller +// is to use to communicate with the class object. +// * ppv - The address of a pointer variable that receives the interface +// pointer requested in riid. Upon successful return, *ppv contains the +// requested interface pointer. If an error occurs, the interface pointer +// is NULL. +// +STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void** ppv) +{ + HRESULT hr = CLASS_E_CLASSNOTAVAILABLE; + + if (IsEqualCLSID(CLSID_BgcodePreviewHandler, rclsid)) + { + hr = E_OUTOFMEMORY; + + ClassFactory* pClassFactory = new ClassFactory(); + if (pClassFactory) + { + hr = pClassFactory->QueryInterface(riid, ppv); + pClassFactory->Release(); + } + } + + return hr; +} + +// +// FUNCTION: DllCanUnloadNow +// +// PURPOSE: Check if we can unload the component from the memory. +// +// NOTE: The component can be unloaded from the memory when its reference +// count is zero (i.e. nobody is still using the component). +// +STDAPI DllCanUnloadNow(void) +{ + return g_cDllRef > 0 ? S_FALSE : S_OK; +} diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/packages.config b/src/modules/previewpane/BgcodePreviewHandlerCpp/packages.config new file mode 100644 index 0000000000..09bfc449e2 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/pch.cpp b/src/modules/previewpane/BgcodePreviewHandlerCpp/pch.cpp new file mode 100644 index 0000000000..64b7eef6d6 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/pch.h b/src/modules/previewpane/BgcodePreviewHandlerCpp/pch.h new file mode 100644 index 0000000000..125ddcdf24 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/pch.h @@ -0,0 +1,14 @@ +// pch.h: This is a precompiled header file. +// Files listed below are compiled only once, improving build performance for future builds. +// This also affects IntelliSense performance, including code completion and many code browsing features. +// However, files listed here are ALL re-compiled if any one of them is updated between builds. +// Do not add files here that you will be updating frequently as this negates the performance advantage. + +#ifndef PCH_H +#define PCH_H + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include + +#endif //PCH_H diff --git a/src/modules/previewpane/BgcodePreviewHandlerCpp/resource.h b/src/modules/previewpane/BgcodePreviewHandlerCpp/resource.h new file mode 100644 index 0000000000..446d0b8185 --- /dev/null +++ b/src/modules/previewpane/BgcodePreviewHandlerCpp/resource.h @@ -0,0 +1,13 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by AlwaysOnTopModuleInterface.rc + +////////////////////////////// +// Non-localizable + +#define FILE_DESCRIPTION "PowerToys Bgcode Preview Handler Module" +#define INTERNAL_NAME "PowerToys.BgcodePreviewHandlerCpp" +#define ORIGINAL_FILENAME "PowerToys.BgcodePreviewHandlerCpp.dll" + +// Non-localizable +////////////////////////////// diff --git a/src/modules/previewpane/BgcodeThumbnailProvider/BgcodeThumbnailProvider.cs b/src/modules/previewpane/BgcodeThumbnailProvider/BgcodeThumbnailProvider.cs new file mode 100644 index 0000000000..8ec7b6e631 --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProvider/BgcodeThumbnailProvider.cs @@ -0,0 +1,146 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; + +using Microsoft.PowerToys.FilePreviewCommon; + +namespace Microsoft.PowerToys.ThumbnailHandler.Bgcode +{ + /// + /// Binary G-code Thumbnail Provider. + /// + public class BgcodeThumbnailProvider + { + public BgcodeThumbnailProvider(string filePath) + { + FilePath = filePath; + Stream = new FileStream(filePath, FileMode.Open, FileAccess.Read); + } + + /// + /// Gets the file path to the file creating thumbnail for. + /// + public string FilePath { get; private set; } + + /// + /// Gets the stream object to access file. + /// + public Stream Stream { get; private set; } + + /// + /// The maximum dimension (width or height) thumbnail we will generate. + /// + private const uint MaxThumbnailSize = 10000; + + /// + /// Reads the Binary G-code content searching for thumbnails and returns the largest. + /// + /// The BinaryReader instance for the Binary G-code content. + /// The maximum thumbnail size, in pixels. + /// A thumbnail extracted from the Binary G-code content. + public static Bitmap GetThumbnail(BinaryReader reader, uint cx) + { + if (cx > MaxThumbnailSize || reader == null || reader.BaseStream.Length == 0) + { + return null; + } + + Bitmap thumbnail = null; + + try + { + var bgcodeThumbnail = BgcodeHelper.GetBestThumbnail(reader); + + thumbnail = bgcodeThumbnail?.GetBitmap(); + } + catch (Exception) + { + // TODO: add logger + } + + if (thumbnail != null && ( + ((thumbnail.Width != cx || thumbnail.Height > cx) && (thumbnail.Height != cx || thumbnail.Width > cx)) || + thumbnail.PixelFormat != PixelFormat.Format32bppArgb)) + { + // We are not the appropriate size for caller. Resize now while + // respecting the aspect ratio. + float scale = Math.Min((float)cx / thumbnail.Width, (float)cx / thumbnail.Height); + int scaleWidth = (int)(thumbnail.Width * scale); + int scaleHeight = (int)(thumbnail.Height * scale); + thumbnail = ResizeImage(thumbnail, scaleWidth, scaleHeight); + } + + return thumbnail; + } + + /// + /// Resize the image with high quality to the specified width and height. + /// + /// The image to resize. + /// The width to resize to. + /// The height to resize to. + /// The resized image. + public static Bitmap ResizeImage(Image image, int width, int height) + { + if (width <= 0 || + height <= 0 || + width > MaxThumbnailSize || + height > MaxThumbnailSize || + image == null) + { + return null; + } + + Bitmap destImage = new Bitmap(width, height, PixelFormat.Format32bppArgb); + + destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); + + using (var graphics = Graphics.FromImage(destImage)) + { + graphics.CompositingMode = CompositingMode.SourceCopy; + graphics.CompositingQuality = CompositingQuality.HighQuality; + graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; + graphics.SmoothingMode = SmoothingMode.HighQuality; + graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; + + graphics.DrawImage(image, 0, 0, width, height); + } + + image.Dispose(); + + return destImage; + } + + /// + /// Generate thumbnail bitmap for provided Bgcode file/stream. + /// + /// Maximum thumbnail size, in pixels. + /// Generated bitmap + public Bitmap GetThumbnail(uint cx) + { + if (cx == 0 || cx > MaxThumbnailSize) + { + return null; + } + + if (global::PowerToys.GPOWrapper.GPOWrapper.GetConfiguredBgcodeThumbnailsEnabledValue() == global::PowerToys.GPOWrapper.GpoRuleConfigured.Disabled) + { + // GPO is disabling this utility. + return null; + } + + using (var reader = new BinaryReader(this.Stream)) + { + Bitmap thumbnail = GetThumbnail(reader, cx); + if (thumbnail != null && thumbnail.Size.Width > 0 && thumbnail.Size.Height > 0) + { + return thumbnail; + } + } + + return null; + } + } +} diff --git a/src/modules/previewpane/BgcodeThumbnailProvider/BgcodeThumbnailProvider.csproj b/src/modules/previewpane/BgcodeThumbnailProvider/BgcodeThumbnailProvider.csproj new file mode 100644 index 0000000000..b17ac59a18 --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProvider/BgcodeThumbnailProvider.csproj @@ -0,0 +1,43 @@ + + + + + + + enable + true + {9BC1C986-1E97-4D07-A7B1-CE226C239EFA} + Microsoft.PowerToys.ThumbnailHandler.Bgcode + PowerToys.BgcodeThumbnailProvider + PowerToys.BgcodeThumbnailProvider + PowerToys BgcodePreviewHandler + true + PowerToys BgcodePreviewHandler + ..\..\..\..\$(Platform)\$(Configuration) + false + false + true + + + + + PowerToys.GPOWrapper + $(OutDir) + false + + + + + $(NoWarn);1591 + WinExe + + + + + + + + + + + \ No newline at end of file diff --git a/src/modules/previewpane/BgcodeThumbnailProvider/Program.cs b/src/modules/previewpane/BgcodeThumbnailProvider/Program.cs new file mode 100644 index 0000000000..debc9c298b --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProvider/Program.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Globalization; + +namespace Microsoft.PowerToys.ThumbnailHandler.Bgcode +{ + internal static class Program + { + private static BgcodeThumbnailProvider _thumbnailProvider; + + /// + /// The main entry point for the application. + /// + [STAThread] + public static void Main(string[] args) + { + ApplicationConfiguration.Initialize(); + if (args != null) + { + if (args.Length == 2) + { + string filePath = args[0]; + uint cx = Convert.ToUInt32(args[1], 10); + + _thumbnailProvider = new BgcodeThumbnailProvider(filePath); + Bitmap thumbnail = _thumbnailProvider.GetThumbnail(cx); + if (thumbnail != null) + { + filePath = filePath.Replace(".bgcode", ".bmp"); + thumbnail.Save(filePath, System.Drawing.Imaging.ImageFormat.Bmp); + } + } + else + { + MessageBox.Show("Bgcode thumbnail - wrong number of args: " + args.Length.ToString(CultureInfo.InvariantCulture)); + } + } + } + } +} diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProvider.cpp b/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProvider.cpp new file mode 100644 index 0000000000..b0f2992fe7 --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProvider.cpp @@ -0,0 +1,201 @@ +#include "pch.h" +#include "BgcodeThumbnailProvider.h" + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +extern HINSTANCE g_hInst; +extern long g_cDllRef; + +BgcodeThumbnailProvider::BgcodeThumbnailProvider() : + m_cRef(1), m_pStream(NULL), m_process(NULL) +{ + std::filesystem::path logFilePath(PTSettingsHelper::get_local_low_folder_location()); + logFilePath.append(LogSettings::bgcodeThumbLogPath); + Logger::init(LogSettings::bgcodeThumbLoggerName, logFilePath.wstring(), PTSettingsHelper::get_log_settings_file_location()); + + InterlockedIncrement(&g_cDllRef); +} + +BgcodeThumbnailProvider::~BgcodeThumbnailProvider() +{ + InterlockedDecrement(&g_cDllRef); +} + +#pragma region IUnknown + +IFACEMETHODIMP BgcodeThumbnailProvider::QueryInterface(REFIID riid, void** ppv) +{ + static const QITAB qit[] = { + QITABENT(BgcodeThumbnailProvider, IThumbnailProvider), + QITABENT(BgcodeThumbnailProvider, IInitializeWithStream), + { 0 }, + }; + return QISearch(this, qit, riid, ppv); +} + +IFACEMETHODIMP_(ULONG) +BgcodeThumbnailProvider::AddRef() +{ + return InterlockedIncrement(&m_cRef); +} + +IFACEMETHODIMP_(ULONG) +BgcodeThumbnailProvider::Release() +{ + ULONG cRef = InterlockedDecrement(&m_cRef); + if (0 == cRef) + { + delete this; + } + return cRef; +} + +#pragma endregion + +#pragma region IInitializationWithStream + +IFACEMETHODIMP BgcodeThumbnailProvider::Initialize(IStream* pStream, DWORD grfMode) +{ + HRESULT hr = E_INVALIDARG; + if (pStream) + { + // Initialize can be called more than once, so release existing valid + // m_pStream. + if (m_pStream) + { + m_pStream->Release(); + m_pStream = NULL; + } + + m_pStream = pStream; + m_pStream->AddRef(); + hr = S_OK; + } + return hr; +} + +#pragma endregion + +#pragma region IThumbnailProvider + +IFACEMETHODIMP BgcodeThumbnailProvider::GetThumbnail(UINT cx, HBITMAP* phbmp, WTS_ALPHATYPE* pdwAlpha) +{ + // Read stream into the buffer + char buffer[4096]; + ULONG cbRead; + + Logger::trace(L"Begin"); + + GUID guid; + if (CoCreateGuid(&guid) == S_OK) + { + wil::unique_cotaskmem_string guidString; + if (SUCCEEDED(StringFromCLSID(guid, &guidString))) + { + Logger::info(L"Read stream and save to tmp file."); + + // {CLSID} -> CLSID + std::wstring guid = std::wstring(guidString.get()).substr(1, std::wstring(guidString.get()).size() - 2); + std::wstring filePath = PTSettingsHelper::get_local_low_folder_location() + L"\\BgcodeThumbnail-Temp\\"; + if (!std::filesystem::exists(filePath)) + { + std::filesystem::create_directories(filePath); + } + + std::wstring fileName = filePath + guid + L".bgcode"; + + // Write data to tmp file + std::fstream file; + file.open(fileName, std::ios_base::out | std::ios_base::binary); + + if (!file.is_open()) + { + return 0; + } + + while (true) + { + auto result = m_pStream->Read(buffer, 4096, &cbRead); + + file.write(buffer, cbRead); + if (result == S_FALSE) + { + break; + } + } + file.close(); + + m_pStream->Release(); + m_pStream = NULL; + + try + { + Logger::info(L"Start BgcodeThumbnailProvider.exe"); + + STARTUPINFO info = { sizeof(info) }; + std::wstring cmdLine{ L"\"" + fileName + L"\"" }; + cmdLine += L" "; + cmdLine += std::to_wstring(cx); + + std::wstring appPath = get_module_folderpath(g_hInst) + L"\\PowerToys.BgcodeThumbnailProvider.exe"; + + SHELLEXECUTEINFO sei{ sizeof(sei) }; + sei.fMask = { SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI }; + sei.lpFile = appPath.c_str(); + sei.lpParameters = cmdLine.c_str(); + sei.nShow = SW_SHOWDEFAULT; + ShellExecuteEx(&sei); + m_process = sei.hProcess; + WaitForSingleObject(m_process, INFINITE); + std::filesystem::remove(fileName); + + + std::wstring fileNameBmp = filePath + guid + L".bmp"; + if (std::filesystem::exists(fileNameBmp)) + { + *phbmp = static_cast(LoadImage(NULL, fileNameBmp.c_str(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)); + *pdwAlpha = WTS_ALPHATYPE::WTSAT_ARGB; + std::filesystem::remove(fileNameBmp); + } + else + { + Logger::info(L"Bmp file not generated."); + return E_FAIL; + } + } + catch (std::exception& e) + { + std::wstring errorMessage = std::wstring{ winrt::to_hstring(e.what()) }; + Logger::error(L"Failed to start BgcodeThumbnailProvider.exe. Error: {}", errorMessage); + } + } + } + + // ensure releasing the stream (not all if branches contain it) + if (m_pStream) + { + m_pStream->Release(); + m_pStream = NULL; + } + + return S_OK; +} + + +#pragma endregion + +#pragma region Helper Functions + +#pragma endregion diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProvider.h b/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProvider.h new file mode 100644 index 0000000000..56bac9b1fc --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProvider.h @@ -0,0 +1,37 @@ +#pragma once + +#include "pch.h" + +#include +#include +#include + +class BgcodeThumbnailProvider : + public IInitializeWithStream, + public IThumbnailProvider +{ +public: + // IUnknown + IFACEMETHODIMP QueryInterface(REFIID riid, void** ppv); + IFACEMETHODIMP_(ULONG) AddRef(); + IFACEMETHODIMP_(ULONG) Release(); + + // IInitializeWithStream + IFACEMETHODIMP Initialize(IStream* pstream, DWORD grfMode); + + // IThumbnailProvider + IFACEMETHODIMP GetThumbnail(UINT cx, HBITMAP* phbmp, WTS_ALPHATYPE* pdwAlpha); + + BgcodeThumbnailProvider(); +protected: + ~BgcodeThumbnailProvider(); + +private: + // Reference count of component. + long m_cRef; + + // Provided during initialization. + IStream* m_pStream; + + HANDLE m_process; +}; \ No newline at end of file diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProviderCpp.rc b/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProviderCpp.rc new file mode 100644 index 0000000000..5fa3c8b90d --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProviderCpp.rc @@ -0,0 +1,40 @@ +#include +#include "resource.h" +#include "../../../common/version/version.h" + +#define APSTUDIO_READONLY_SYMBOLS +#include "winres.h" +#undef APSTUDIO_READONLY_SYMBOLS + +1 VERSIONINFO +FILEVERSION FILE_VERSION +PRODUCTVERSION PRODUCT_VERSION +FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG +FILEFLAGS VS_FF_DEBUG +#else +FILEFLAGS 0x0L +#endif +FILEOS VOS_NT_WINDOWS32 +FILETYPE VFT_DLL +FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" // US English (0x0409), Unicode (0x04B0) charset + BEGIN + VALUE "CompanyName", COMPANY_NAME + VALUE "FileDescription", FILE_DESCRIPTION + VALUE "FileVersion", FILE_VERSION_STRING + VALUE "InternalName", INTERNAL_NAME + VALUE "LegalCopyright", COPYRIGHT_NOTE + VALUE "OriginalFilename", ORIGINAL_FILENAME + VALUE "ProductName", PRODUCT_NAME + VALUE "ProductVersion", PRODUCT_VERSION_STRING + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 // US English (0x0409), Unicode (1200) charset + END +END diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProviderCpp.vcxproj b/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProviderCpp.vcxproj new file mode 100644 index 0000000000..f561cf53be --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProviderCpp.vcxproj @@ -0,0 +1,118 @@ + + + + + 16.0 + Win32Proj + {47B0678C-806B-4FE1-9F50-46BA88989532} + BgcodeThumbnailProviderCpp + + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + + + + + + + + + + ..\..\..\..\$(Platform)\$(Configuration)\ + + + PowerToys.$(ProjectName) + + + + Level3 + true + _DEBUG;MARKDOWNPREVIEWHANDLERCPP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + ../../.. + + + Windows + true + false + GlobalExportFunctions.def + Shlwapi.lib;$(CoreLibraryDependencies);%(AdditionalDependencies) + + + + + Level3 + true + true + true + NDEBUG;MARKDOWNPREVIEWHANDLERCPP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + ../../.. + + + Windows + true + true + true + false + GlobalExportFunctions.def + Shlwapi.lib;$(CoreLibraryDependencies);%(AdditionalDependencies) + + + + + + + + + + + + + + Create + + + + + + + + + {d9b8fc84-322a-4f9f-bbb9-20915c47ddfd} + + + {6955446d-23f7-4023-9bb3-8657f904af99} + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + \ No newline at end of file diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProviderCpp.vcxproj.filters b/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProviderCpp.vcxproj.filters new file mode 100644 index 0000000000..3ce6ff0db6 --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/BgcodeThumbnailProviderCpp.vcxproj.filters @@ -0,0 +1,59 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Resource Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + + + + + + + Resource Files + + + \ No newline at end of file diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/ClassFactory.cpp b/src/modules/previewpane/BgcodeThumbnailProviderCpp/ClassFactory.cpp new file mode 100644 index 0000000000..9196db6c19 --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/ClassFactory.cpp @@ -0,0 +1,84 @@ +#include "pch.h" +#include "ClassFactory.h" +#include "BgcodeThumbnailProvider.h" + +#include +#include + +extern long g_cDllRef; + +ClassFactory::ClassFactory() : + m_cRef(1) +{ + InterlockedIncrement(&g_cDllRef); +} + +ClassFactory::~ClassFactory() +{ + InterlockedDecrement(&g_cDllRef); +} + +// +// IUnknown +// + +IFACEMETHODIMP ClassFactory::QueryInterface(REFIID riid, void **ppv) +{ + static const QITAB qit[] = { + QITABENT(ClassFactory, IClassFactory), + { 0 }, + }; + return QISearch(this, qit, riid, ppv); +} + +IFACEMETHODIMP_(ULONG) ClassFactory::AddRef() +{ + return InterlockedIncrement(&m_cRef); +} + +IFACEMETHODIMP_(ULONG) ClassFactory::Release() +{ + ULONG cRef = InterlockedDecrement(&m_cRef); + if (0 == cRef) + { + delete this; + } + return cRef; +} + +// +// IClassFactory +// + +IFACEMETHODIMP ClassFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppv) +{ + HRESULT hr = CLASS_E_NOAGGREGATION; + + if (pUnkOuter == NULL) + { + hr = E_OUTOFMEMORY; + + BgcodeThumbnailProvider* pExt = new (std::nothrow) BgcodeThumbnailProvider(); + if (pExt) + { + hr = pExt->QueryInterface(riid, ppv); + pExt->Release(); + } + } + + return hr; +} + +IFACEMETHODIMP ClassFactory::LockServer(BOOL fLock) +{ + if (fLock) + { + InterlockedIncrement(&g_cDllRef); + } + else + { + InterlockedDecrement(&g_cDllRef); + } + + return S_OK; +} \ No newline at end of file diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/ClassFactory.h b/src/modules/previewpane/BgcodeThumbnailProviderCpp/ClassFactory.h new file mode 100644 index 0000000000..b393c3916e --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/ClassFactory.h @@ -0,0 +1,24 @@ +#pragma once + +#include + +class ClassFactory : public IClassFactory +{ +public: + // IUnknown + IFACEMETHODIMP QueryInterface(REFIID riid, void** ppv); + IFACEMETHODIMP_(ULONG) AddRef(); + IFACEMETHODIMP_(ULONG) Release(); + + // IClassFactory + IFACEMETHODIMP CreateInstance(IUnknown* pUnkOuter, REFIID riid, void** ppv); + IFACEMETHODIMP LockServer(BOOL fLock); + + ClassFactory(); + +protected: + ~ClassFactory(); + +private: + long m_cRef; +}; diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/GlobalExportFunctions.def b/src/modules/previewpane/BgcodeThumbnailProviderCpp/GlobalExportFunctions.def new file mode 100644 index 0000000000..76fc66cac3 --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/GlobalExportFunctions.def @@ -0,0 +1,3 @@ +EXPORTS + DllGetClassObject PRIVATE + DllCanUnloadNow PRIVATE diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/dllmain.cpp b/src/modules/previewpane/BgcodeThumbnailProviderCpp/dllmain.cpp new file mode 100644 index 0000000000..4c28da5c6d --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/dllmain.cpp @@ -0,0 +1,73 @@ +// dllmain.cpp : Defines the entry point for the DLL application. +#include "pch.h" +#include "ClassFactory.h" + +HINSTANCE g_hInst = NULL; +long g_cDllRef = 0; + +// {5c93a1e4-99d0-4fb3-991c-6c296a27be21} +static const GUID CLSID_BgcodeThumbnailProvider = { 0x5c93a1e4, 0x99d0, 0x4fb3, { 0x99, 0x1c, 0x6c, 0x29, 0x6a, 0x27, 0xbe, 0x21 } }; + +BOOL APIENTRY DllMain(HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + g_hInst = hModule; + DisableThreadLibraryCalls(hModule); + break; + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +// +// FUNCTION: DllGetClassObject +// +// PURPOSE: Create the class factory and query to the specific interface. +// +// PARAMETERS: +// * rclsid - The CLSID that will associate the correct data and code. +// * riid - A reference to the identifier of the interface that the caller +// is to use to communicate with the class object. +// * ppv - The address of a pointer variable that receives the interface +// pointer requested in riid. Upon successful return, *ppv contains the +// requested interface pointer. If an error occurs, the interface pointer +// is NULL. +// +STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void** ppv) +{ + HRESULT hr = CLASS_E_CLASSNOTAVAILABLE; + + if (IsEqualCLSID(CLSID_BgcodeThumbnailProvider, rclsid)) + { + hr = E_OUTOFMEMORY; + + ClassFactory* pClassFactory = new ClassFactory(); + if (pClassFactory) + { + hr = pClassFactory->QueryInterface(riid, ppv); + pClassFactory->Release(); + } + } + + return hr; +} + +// +// FUNCTION: DllCanUnloadNow +// +// PURPOSE: Check if we can unload the component from the memory. +// +// NOTE: The component can be unloaded from the memory when its reference +// count is zero (i.e. nobody is still using the component). +// +STDAPI DllCanUnloadNow(void) +{ + return g_cDllRef > 0 ? S_FALSE : S_OK; +} diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/packages.config b/src/modules/previewpane/BgcodeThumbnailProviderCpp/packages.config new file mode 100644 index 0000000000..ff4b059648 --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/pch.cpp b/src/modules/previewpane/BgcodeThumbnailProviderCpp/pch.cpp new file mode 100644 index 0000000000..64b7eef6d6 --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/pch.h b/src/modules/previewpane/BgcodeThumbnailProviderCpp/pch.h new file mode 100644 index 0000000000..8a0d004247 --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/pch.h @@ -0,0 +1,15 @@ +// pch.h: This is a precompiled header file. +// Files listed below are compiled only once, improving build performance for future builds. +// This also affects IntelliSense performance, including code completion and many code browsing features. +// However, files listed here are ALL re-compiled if any one of them is updated between builds. +// Do not add files here that you will be updating frequently as this negates the performance advantage. + +#ifndef PCH_H +#define PCH_H + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include +#include + +#endif //PCH_H diff --git a/src/modules/previewpane/BgcodeThumbnailProviderCpp/resource.h b/src/modules/previewpane/BgcodeThumbnailProviderCpp/resource.h new file mode 100644 index 0000000000..911c12832c --- /dev/null +++ b/src/modules/previewpane/BgcodeThumbnailProviderCpp/resource.h @@ -0,0 +1,13 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by AlwaysOnTopModuleInterface.rc + +////////////////////////////// +// Non-localizable + +#define FILE_DESCRIPTION "PowerToys Bgcode Thumbnail Provider Module" +#define INTERNAL_NAME "PowerToys.BgcodeThumbnailProviderCpp" +#define ORIGINAL_FILENAME "PowerToys.BgcodeThumbnailProviderCpp.dll" + +// Non-localizable +////////////////////////////// diff --git a/src/modules/previewpane/UnitTests-BgcodePreviewHandler/BgcodePreviewHandlerTest.cs b/src/modules/previewpane/UnitTests-BgcodePreviewHandler/BgcodePreviewHandlerTest.cs new file mode 100644 index 0000000000..fcc15c134d --- /dev/null +++ b/src/modules/previewpane/UnitTests-BgcodePreviewHandler/BgcodePreviewHandlerTest.cs @@ -0,0 +1,93 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Drawing; +using System.IO; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using System.Windows.Forms; + +using Microsoft.PowerToys.PreviewHandler.Bgcode; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; + +namespace BgcodePreviewHandlerUnitTests +{ + [STATestClass] + [System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA2201:Do not raise reserved exception types", Justification = "new Exception() is fine in test projects.")] + public class BgcodePreviewHandlerTest + { + [DataTestMethod] + [DataRow("HelperFiles/sample.bgcode")] + public void BgcodePreviewHandlerControlAddsControlsToFormWhenDoPreviewIsCalled(string filePath) + { + // Arrange + using (var bgcodePreviewHandlerControl = new BgcodePreviewHandlerControl()) + { + // Act + var file = File.ReadAllBytes(filePath); + + bgcodePreviewHandlerControl.DoPreview(GetMockStream(file)); + + var flowLayoutPanel = bgcodePreviewHandlerControl.Controls[0] as FlowLayoutPanel; + + // Assert + Assert.AreEqual(1, bgcodePreviewHandlerControl.Controls.Count); + } + } + + [TestMethod] + public void BgcodePreviewHandlerControlShouldAddValidInfoBarIfBgcodePreviewThrows() + { + // Arrange + using (var bgcodePreviewHandlerControl = new BgcodePreviewHandlerControl()) + { + var mockStream = new Mock(); + mockStream + .Setup(x => x.Read(It.IsAny(), It.IsAny(), It.IsAny())) + .Throws(new Exception()); + + // Act + bgcodePreviewHandlerControl.DoPreview(mockStream.Object); + var textBox = bgcodePreviewHandlerControl.Controls[0] as RichTextBox; + + // Assert + Assert.IsFalse(string.IsNullOrWhiteSpace(textBox.Text)); + Assert.AreEqual(1, bgcodePreviewHandlerControl.Controls.Count); + Assert.AreEqual(DockStyle.Top, textBox.Dock); + Assert.AreEqual(Color.LightYellow, textBox.BackColor); + Assert.IsTrue(textBox.Multiline); + Assert.IsTrue(textBox.ReadOnly); + Assert.AreEqual(RichTextBoxScrollBars.None, textBox.ScrollBars); + Assert.AreEqual(BorderStyle.None, textBox.BorderStyle); + } + } + + private static IStream GetMockStream(byte[] sourceArray) + { + var streamMock = new Mock(); + int bytesRead = 0; + + streamMock + .Setup(x => x.Read(It.IsAny(), It.IsAny(), It.IsAny())) + .Callback((buffer, countToRead, bytesReadPtr) => + { + int actualCountToRead = Math.Min(sourceArray.Length - bytesRead, countToRead); + if (actualCountToRead > 0) + { + Array.Copy(sourceArray, bytesRead, buffer, 0, actualCountToRead); + Marshal.WriteInt32(bytesReadPtr, actualCountToRead); + bytesRead += actualCountToRead; + } + else + { + Marshal.WriteInt32(bytesReadPtr, 0); + } + }); + + return streamMock.Object; + } + } +} diff --git a/src/modules/previewpane/UnitTests-BgcodePreviewHandler/HelperFiles/sample.bgcode b/src/modules/previewpane/UnitTests-BgcodePreviewHandler/HelperFiles/sample.bgcode new file mode 100644 index 0000000000000000000000000000000000000000..64ec331f7f6b3dd82b0e5206d2ece8066c2fe690 GIT binary patch literal 230915 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 z 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

7PMl){}kBz~xLcxS$d10PUr)CZ`1k8%%_Nl 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 literal 0 HcmV?d00001 diff --git a/src/modules/previewpane/UnitTests-BgcodePreviewHandler/UnitTests-BgcodePreviewHandler.csproj b/src/modules/previewpane/UnitTests-BgcodePreviewHandler/UnitTests-BgcodePreviewHandler.csproj new file mode 100644 index 0000000000..ca3cbbd4f6 --- /dev/null +++ b/src/modules/previewpane/UnitTests-BgcodePreviewHandler/UnitTests-BgcodePreviewHandler.csproj @@ -0,0 +1,36 @@ + + + + + + UnitTests-BgcodePreviewHandler + PowerToys UnitTests-BgcodePreviewHandler + PowerToys UnitTests-BgcodePreviewHandler + {99CA1509-FB73-456E-AFAF-AB89C017BD72} + BgcodePreviewHandlerUnitTests + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages + False + + + + + + + + + + + + + + + + + + + Always + + + diff --git a/src/modules/previewpane/UnitTests-BgcodeThumbnailProvider/BgcodeThumbnailProviderTests.cs b/src/modules/previewpane/UnitTests-BgcodeThumbnailProvider/BgcodeThumbnailProviderTests.cs new file mode 100644 index 0000000000..6c15a3fc3c --- /dev/null +++ b/src/modules/previewpane/UnitTests-BgcodeThumbnailProvider/BgcodeThumbnailProviderTests.cs @@ -0,0 +1,71 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Drawing; +using System.IO; + +using Microsoft.PowerToys.ThumbnailHandler.Bgcode; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace BgcodeThumbnailProviderUnitTests +{ + [STATestClass] + public class BgcodeThumbnailProviderTests + { + [DataTestMethod] + [DataRow("HelperFiles/sample.bgcode")] + public void GetThumbnailValidStreamBgcode(string filePath) + { + // Act + BgcodeThumbnailProvider provider = new BgcodeThumbnailProvider(filePath); + + Bitmap bitmap = provider.GetThumbnail(256); + + Assert.IsTrue(bitmap != null); + } + + [TestMethod] + public void GetThumbnailInValidSizeBgcode() + { + // Act + var filePath = "HelperFiles/sample.bgcode"; + + BgcodeThumbnailProvider provider = new BgcodeThumbnailProvider(filePath); + + Bitmap bitmap = provider.GetThumbnail(0); + + Assert.IsTrue(bitmap == null); + } + + [TestMethod] + public void GetThumbnailToBigBgcode() + { + // Act + var filePath = "HelperFiles/sample.bgcode"; + + BgcodeThumbnailProvider provider = new BgcodeThumbnailProvider(filePath); + + Bitmap bitmap = provider.GetThumbnail(10001); + + Assert.IsTrue(bitmap == null); + } + + [TestMethod] + public void CheckNoBgcodeEmptyDataShouldReturnNullBitmap() + { + using (var reader = new BinaryReader(new MemoryStream())) + { + Bitmap thumbnail = BgcodeThumbnailProvider.GetThumbnail(reader, 256); + Assert.IsTrue(thumbnail == null); + } + } + + [TestMethod] + public void CheckNoBgcodeNullStringShouldReturnNullBitmap() + { + Bitmap thumbnail = BgcodeThumbnailProvider.GetThumbnail(null, 256); + Assert.IsTrue(thumbnail == null); + } + } +} diff --git a/src/modules/previewpane/UnitTests-BgcodeThumbnailProvider/HelperFiles/sample.bgcode b/src/modules/previewpane/UnitTests-BgcodeThumbnailProvider/HelperFiles/sample.bgcode new file mode 100644 index 0000000000000000000000000000000000000000..64ec331f7f6b3dd82b0e5206d2ece8066c2fe690 GIT binary patch literal 230915 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 z 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

7PMl){}kBz~xLcxS$d10PUr)CZ`1k8%%_Nl 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 literal 0 HcmV?d00001 diff --git a/src/modules/previewpane/UnitTests-BgcodeThumbnailProvider/UnitTests-BgcodeThumbnailProvider.csproj b/src/modules/previewpane/UnitTests-BgcodeThumbnailProvider/UnitTests-BgcodeThumbnailProvider.csproj new file mode 100644 index 0000000000..5a44d479d5 --- /dev/null +++ b/src/modules/previewpane/UnitTests-BgcodeThumbnailProvider/UnitTests-BgcodeThumbnailProvider.csproj @@ -0,0 +1,38 @@ + + + + + + UnitTests-BgcodeThumbnailProvider + PowerToys UnitTests-BgcodeThumbnailProvider + UnitTests-BgcodeThumbnailProvider + PowerToys UnitTests-BgcodeThumbnailProvider + {61CBF221-9452-4934-B685-146285E080D7} + BgcodeThumbnailProviderUnitTests + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages + False + UnitTest + + + + + + + + + + + + + + + + + + + Always + + + diff --git a/src/modules/previewpane/powerpreview/CLSID.h b/src/modules/previewpane/powerpreview/CLSID.h index 0c75ed23f4..4c866a6b80 100644 --- a/src/modules/previewpane/powerpreview/CLSID.h +++ b/src/modules/previewpane/powerpreview/CLSID.h @@ -37,6 +37,12 @@ const CLSID CLSID_SHIMActivateGcodePreviewHandler = { 0x516cb24f, 0x562f, 0x422f // ec52dea8-7c9f-4130-a77b-1737d0418507 const CLSID CLSID_GcodePreviewHandler = { 0xec52dea8, 0x7c9f, 0x4130, { 0xa7, 0x7b, 0x17, 0x37, 0xd0, 0x41, 0x85, 0x07 } }; +// 8fae8d5d-6bd1-46b4-a74f-cbebba4c7b62 +const CLSID CLSID_SHIMActivateBgcodePreviewHandler = { 0x8fae8d5d, 0x6bd1, 0x46b4, { 0xa7, 0x4f, 0xcb, 0xeb, 0xba, 0x4c, 0x7b, 0x62 } }; + +// dd8de316-7b01-48e7-ba21-e92c646704af +const GUID CLSID_BgcodePreviewHandler = { 0xdd8de316, 0x7b01, 0x48e7, { 0xba, 0x21, 0xe9, 0x2c, 0x64, 0x67, 0x04, 0xaf } }; + // F498BE36-5C94-4EC9-A65A-AD1CF4C38271 const GUID CLSID_SHIMActivateQoiPreviewHandler = { 0xf498be36, 0x5c94, 0x4ec9, { 0xa6, 0x5a, 0xad, 0x1c, 0xf4, 0xc3, 0x82, 0x71 } }; @@ -46,6 +52,9 @@ const GUID CLSID_QoiPreviewHandler = { 0x8aa07897, 0xc30b, 0x4543, { 0x86, 0x5b, // BFEE99B4-B74D-4348-BCA5-E757029647FF const GUID CLSID_GcodeThumbnailProvider = { 0xbfee99b4, 0xb74d, 0x4348, { 0xbc, 0xa5, 0xe7, 0x57, 0x02, 0x96, 0x47, 0xff } }; +// c28761a0-8420-43ad-bff3-40400543e2d4 +const GUID CLSID_BgcodeThumbnailProvider = {0xc28761a0, 0x8420, 0x43ad, {0xbf, 0xf3, 0x40, 0x40, 0x05, 0x43, 0xe2, 0xd4}}; + // 8BC8AFC2-4E7C-4695-818E-8C1FFDCEA2AF const GUID CLSID_StlThumbnailProvider = { 0x8bc8afc2, 0x4e7c, 0x4695, { 0x81, 0x8e, 0x8c, 0x1f, 0xfd, 0xce, 0xa2, 0xaf } }; diff --git a/src/modules/previewpane/powerpreview/Resources.resx b/src/modules/previewpane/powerpreview/Resources.resx index 6703e476ef..38a95c38ce 100644 --- a/src/modules/previewpane/powerpreview/Resources.resx +++ b/src/modules/previewpane/powerpreview/Resources.resx @@ -143,7 +143,7 @@ Developer files Previewer - + Markdown Previewer @@ -198,4 +198,13 @@ Qoi Thumbnail Provider + + Binary G-code Previewer + + + Binary G-code Previewer + + + Binary G-code Thumbnail Provider + \ No newline at end of file diff --git a/src/modules/previewpane/powerpreview/powerpreview.cpp b/src/modules/previewpane/powerpreview/powerpreview.cpp index 84d2a590dc..9df07ced0a 100644 --- a/src/modules/previewpane/powerpreview/powerpreview.cpp +++ b/src/modules/previewpane/powerpreview/powerpreview.cpp @@ -50,6 +50,11 @@ PowerPreviewModule::PowerPreviewModule() : .checkModuleGPOEnabledRuleFunction = powertoys_gpo::getConfiguredGcodePreviewEnabledValue, .registryChanges = getGcodePreviewHandlerChangeSet(installationDir, installPerUser) }); + m_fileExplorerModules.push_back({ .settingName = L"bgcode-previewer-toggle-setting", + .settingDescription = GET_RESOURCE_STRING(IDS_PREVPANE_BGCODE_SETTINGS_DESCRIPTION), + .checkModuleGPOEnabledRuleFunction = powertoys_gpo::getConfiguredBgcodePreviewEnabledValue, + .registryChanges = getBgcodePreviewHandlerChangeSet(installationDir, installPerUser) }); + m_fileExplorerModules.push_back({ .settingName = L"svg-thumbnail-toggle-setting", .settingDescription = GET_RESOURCE_STRING(IDS_SVG_THUMBNAIL_PROVIDER_SETTINGS_DESCRIPTION), .checkModuleGPOEnabledRuleFunction = powertoys_gpo::getConfiguredSvgThumbnailsEnabledValue, @@ -65,6 +70,11 @@ PowerPreviewModule::PowerPreviewModule() : .checkModuleGPOEnabledRuleFunction = powertoys_gpo::getConfiguredGcodeThumbnailsEnabledValue, .registryChanges = getGcodeThumbnailHandlerChangeSet(installationDir, installPerUser) }); + m_fileExplorerModules.push_back({ .settingName = L"bgcode-thumbnail-toggle-setting", + .settingDescription = GET_RESOURCE_STRING(IDS_BGCODE_THUMBNAIL_PROVIDER_SETTINGS_DESCRIPTION), + .checkModuleGPOEnabledRuleFunction = powertoys_gpo::getConfiguredBgcodeThumbnailsEnabledValue, + .registryChanges = getBgcodeThumbnailHandlerChangeSet(installationDir, installPerUser) }); + m_fileExplorerModules.push_back({ .settingName = L"stl-thumbnail-toggle-setting", .settingDescription = GET_RESOURCE_STRING(IDS_STL_THUMBNAIL_PROVIDER_SETTINGS_DESCRIPTION), .checkModuleGPOEnabledRuleFunction = powertoys_gpo::getConfiguredStlThumbnailsEnabledValue, diff --git a/src/modules/previewpane/powerpreview/powerpreview.vcxproj b/src/modules/previewpane/powerpreview/powerpreview.vcxproj index 7ea86fc440..9b32f385c4 100644 --- a/src/modules/previewpane/powerpreview/powerpreview.vcxproj +++ b/src/modules/previewpane/powerpreview/powerpreview.vcxproj @@ -86,7 +86,9 @@ - + + Designer + diff --git a/src/settings-ui/Settings.UI.Library/PowerPreviewProperties.cs b/src/settings-ui/Settings.UI.Library/PowerPreviewProperties.cs index f6dd527015..72113e67fc 100644 --- a/src/settings-ui/Settings.UI.Library/PowerPreviewProperties.cs +++ b/src/settings-ui/Settings.UI.Library/PowerPreviewProperties.cs @@ -223,6 +223,23 @@ namespace Microsoft.PowerToys.Settings.UI.Library } } + private bool enableBgcodePreview = true; + + [JsonPropertyName("bgcode-previewer-toggle-setting")] + [JsonConverter(typeof(BoolPropertyJsonConverter))] + public bool EnableBgcodePreview + { + get => enableBgcodePreview; + set + { + if (value != enableBgcodePreview) + { + LogTelemetryEvent(value); + enableBgcodePreview = value; + } + } + } + private bool enableGcodeThumbnail = true; [JsonPropertyName("gcode-thumbnail-toggle-setting")] @@ -240,6 +257,23 @@ namespace Microsoft.PowerToys.Settings.UI.Library } } + private bool enableBgcodeThumbnail = true; + + [JsonPropertyName("bgcode-thumbnail-toggle-setting")] + [JsonConverter(typeof(BoolPropertyJsonConverter))] + public bool EnableBgcodeThumbnail + { + get => enableBgcodeThumbnail; + set + { + if (value != enableBgcodeThumbnail) + { + LogTelemetryEvent(value); + enableBgcodeThumbnail = value; + } + } + } + private bool enableStlThumbnail = true; [JsonPropertyName("stl-thumbnail-toggle-setting")] diff --git a/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/PowerPreview.cs b/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/PowerPreview.cs index 373b9a3580..636d96aec6 100644 --- a/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/PowerPreview.cs +++ b/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/PowerPreview.cs @@ -61,11 +61,13 @@ namespace ViewModelTests Assert.AreEqual(originalSettings.Properties.EnableMonacoPreview, viewModel.MonacoRenderIsEnabled); Assert.AreEqual(originalSettings.Properties.EnablePdfPreview, viewModel.PDFRenderIsEnabled); Assert.AreEqual(originalSettings.Properties.EnableGcodePreview, viewModel.GCODERenderIsEnabled); + Assert.AreEqual(originalSettings.Properties.EnableBgcodePreview, viewModel.BGCODERenderIsEnabled); Assert.AreEqual(originalSettings.Properties.EnableQoiPreview, viewModel.QOIRenderIsEnabled); Assert.AreEqual(originalSettings.Properties.EnableSvgPreview, viewModel.SVGRenderIsEnabled); Assert.AreEqual(originalSettings.Properties.EnableSvgThumbnail, viewModel.SVGThumbnailIsEnabled); Assert.AreEqual(originalSettings.Properties.EnablePdfThumbnail, viewModel.PDFThumbnailIsEnabled); Assert.AreEqual(originalSettings.Properties.EnableGcodeThumbnail, viewModel.GCODEThumbnailIsEnabled); + Assert.AreEqual(originalSettings.Properties.EnableBgcodeThumbnail, viewModel.BGCODEThumbnailIsEnabled); Assert.AreEqual(originalSettings.Properties.EnableStlThumbnail, viewModel.STLThumbnailIsEnabled); Assert.AreEqual(originalSettings.Properties.EnableQoiThumbnail, viewModel.QOIThumbnailIsEnabled); @@ -146,6 +148,24 @@ namespace ViewModelTests viewModel.GCODEThumbnailIsEnabled = true; } + [TestMethod] + public void BGCODEThumbnailIsEnabledShouldPrevHandlerWhenSuccessful() + { + // Assert + Func sendMockIPCConfigMSG = msg => + { + SndModuleSettings snd = JsonSerializer.Deserialize>(msg); + Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableBgcodeThumbnail); + return 0; + }; + + // arrange + PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); + + // act + viewModel.BGCODEThumbnailIsEnabled = true; + } + [TestMethod] public void STLThumbnailIsEnabledShouldPrevHandlerWhenSuccessful() { @@ -254,6 +274,24 @@ namespace ViewModelTests viewModel.GCODERenderIsEnabled = true; } + [TestMethod] + public void BGCODERenderIsEnabledShouldPrevHandlerWhenSuccessful() + { + // Assert + Func sendMockIPCConfigMSG = msg => + { + SndModuleSettings snd = JsonSerializer.Deserialize>(msg); + Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableBgcodePreview); + return 0; + }; + + // arrange + PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); + + // act + viewModel.BGCODERenderIsEnabled = true; + } + [TestMethod] public void QOIRenderIsEnabledShouldPrevHandlerWhenSuccessful() { diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml index 301cf7c51e..c5867fff74 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml @@ -147,8 +147,18 @@ + + + + + + + + - + diff --git a/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw b/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw index a1abec7e4a..f9b971816c 100644 --- a/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw +++ b/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw @@ -2002,7 +2002,7 @@ Made with 💗 by Microsoft and the PowerToys community. File Locksmith lists which processes are using the selected files or directories and allows closing those processes. - PowerToys introduces add-ons to the Windows File Explorer that will enable files like Markdown (.md), PDF (.pdf), SVG (.svg), STL (.stl), G-code (.gcode) and developer files to be viewed in the preview pane. It introduces File Explorer thumbnail support for a number of these file types as well. + PowerToys introduces add-ons to the Windows File Explorer that will enable files like Markdown (.md), PDF (.pdf), SVG (.svg), STL (.stl), G-code (.gcode), Binary G-code (.bgcode), and developer files to be viewed in the preview pane. It introduces File Explorer thumbnail support for a number of these file types as well. Image Resizer is a Windows shell extension for simple bulk image-resizing. @@ -5015,6 +5015,18 @@ To record a specific window, enter the hotkey with the Alt key in the opposite m Bug report package is being created + + Binary Geometric Code + + + .bgcode + + + .bgcode + + + Binary Geometric Code + Highlight the cursor or dim the screen to spotlight it diff --git a/src/settings-ui/Settings.UI/ViewModels/PowerPreviewViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/PowerPreviewViewModel.cs index 86089a2d5d..75c22dd855 100644 --- a/src/settings-ui/Settings.UI/ViewModels/PowerPreviewViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/PowerPreviewViewModel.cs @@ -125,6 +125,20 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels _gcodeRenderIsEnabled = Settings.Properties.EnableGcodePreview; } + _bgcodeRenderEnabledGpoRuleConfiguration = GPOWrapper.GetConfiguredBgcodePreviewEnabledValue(); + if (_bgcodeRenderEnabledGpoRuleConfiguration == GpoRuleConfigured.Disabled || _bgcodeRenderEnabledGpoRuleConfiguration == GpoRuleConfigured.Enabled) + { + // Get the enabled state from GPO. + _bgcodeRenderEnabledStateIsGPOConfigured = true; + _bgcodeRenderIsEnabled = _bgcodeRenderEnabledGpoRuleConfiguration == GpoRuleConfigured.Enabled; + _bgcodeRenderIsGpoEnabled = _bgcodeRenderEnabledGpoRuleConfiguration == GpoRuleConfigured.Enabled; + _bgcodeRenderIsGpoDisabled = _bgcodeRenderEnabledGpoRuleConfiguration == GpoRuleConfigured.Disabled; + } + else + { + _bgcodeRenderIsEnabled = Settings.Properties.EnableBgcodePreview; + } + _qoiRenderEnabledGpoRuleConfiguration = GPOWrapper.GetConfiguredQoiPreviewEnabledValue(); if (_qoiRenderEnabledGpoRuleConfiguration == GpoRuleConfigured.Disabled || _qoiRenderEnabledGpoRuleConfiguration == GpoRuleConfigured.Enabled) { @@ -181,6 +195,20 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels _gcodeThumbnailIsEnabled = Settings.Properties.EnableGcodeThumbnail; } + _bgcodeThumbnailEnabledGpoRuleConfiguration = GPOWrapper.GetConfiguredBgcodeThumbnailsEnabledValue(); + if (_bgcodeThumbnailEnabledGpoRuleConfiguration == GpoRuleConfigured.Disabled || _bgcodeThumbnailEnabledGpoRuleConfiguration == GpoRuleConfigured.Enabled) + { + // Get the enabled state from GPO. + _bgcodeThumbnailEnabledStateIsGPOConfigured = true; + _bgcodeThumbnailIsEnabled = _bgcodeThumbnailEnabledGpoRuleConfiguration == GpoRuleConfigured.Enabled; + _bgcodeThumbnailIsGpoEnabled = _bgcodeThumbnailEnabledGpoRuleConfiguration == GpoRuleConfigured.Enabled; + _bgcodeThumbnailIsGpoDisabled = _bgcodeThumbnailEnabledGpoRuleConfiguration == GpoRuleConfigured.Disabled; + } + else + { + _bgcodeThumbnailIsEnabled = Settings.Properties.EnableBgcodeThumbnail; + } + _stlThumbnailEnabledGpoRuleConfiguration = GPOWrapper.GetConfiguredStlThumbnailsEnabledValue(); if (_stlThumbnailEnabledGpoRuleConfiguration == GpoRuleConfigured.Disabled || _stlThumbnailEnabledGpoRuleConfiguration == GpoRuleConfigured.Enabled) { @@ -251,6 +279,12 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels private bool _gcodeRenderIsGpoDisabled; private bool _gcodeRenderIsEnabled; + private GpoRuleConfigured _bgcodeRenderEnabledGpoRuleConfiguration; + private bool _bgcodeRenderEnabledStateIsGPOConfigured; + private bool _bgcodeRenderIsGpoEnabled; + private bool _bgcodeRenderIsGpoDisabled; + private bool _bgcodeRenderIsEnabled; + private GpoRuleConfigured _qoiRenderEnabledGpoRuleConfiguration; private bool _qoiRenderEnabledStateIsGPOConfigured; private bool _qoiRenderIsGpoEnabled; @@ -275,6 +309,12 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels private bool _gcodeThumbnailIsGpoDisabled; private bool _gcodeThumbnailIsEnabled; + private GpoRuleConfigured _bgcodeThumbnailEnabledGpoRuleConfiguration; + private bool _bgcodeThumbnailEnabledStateIsGPOConfigured; + private bool _bgcodeThumbnailIsGpoEnabled; + private bool _bgcodeThumbnailIsGpoDisabled; + private bool _bgcodeThumbnailIsEnabled; + private GpoRuleConfigured _stlThumbnailEnabledGpoRuleConfiguration; private bool _stlThumbnailEnabledStateIsGPOConfigured; private bool _stlThumbnailIsGpoEnabled; @@ -294,7 +334,8 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels { return _svgRenderEnabledStateIsGPOConfigured || _mdRenderEnabledStateIsGPOConfigured || _monacoRenderEnabledStateIsGPOConfigured || _pdfRenderEnabledStateIsGPOConfigured - || _gcodeRenderEnabledStateIsGPOConfigured || _qoiRenderEnabledStateIsGPOConfigured; + || _gcodeRenderEnabledStateIsGPOConfigured || _qoiRenderEnabledStateIsGPOConfigured + || _bgcodeRenderEnabledStateIsGPOConfigured; } } @@ -304,7 +345,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels { return _svgThumbnailEnabledStateIsGPOConfigured || _pdfThumbnailEnabledStateIsGPOConfigured || _gcodeThumbnailEnabledStateIsGPOConfigured || _stlThumbnailEnabledStateIsGPOConfigured - || _qoiThumbnailEnabledStateIsGPOConfigured; + || _qoiThumbnailEnabledStateIsGPOConfigured || _bgcodeThumbnailEnabledStateIsGPOConfigured; } } @@ -778,6 +819,48 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels } } + public bool BGCODERenderIsEnabled + { + get + { + return _bgcodeRenderIsEnabled; + } + + set + { + if (_bgcodeRenderEnabledStateIsGPOConfigured) + { + // If it's GPO configured, shouldn't be able to change this state. + return; + } + + if (value != _bgcodeRenderIsEnabled) + { + _bgcodeRenderIsEnabled = value; + Settings.Properties.EnableBgcodePreview = value; + RaisePropertyChanged(); + } + } + } + + // Used to only disable enabled button on forced enabled state. (With this users still able to change the utility properties.) + public bool BGCODERenderIsGpoEnabled + { + get + { + return _bgcodeRenderIsGpoEnabled; + } + } + + // Used to disable the settings card on forced disabled state. + public bool BGCODERenderIsGpoDisabled + { + get + { + return _bgcodeRenderIsGpoDisabled; + } + } + public bool GCODEThumbnailIsEnabled { get @@ -820,6 +903,48 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels } } + public bool BGCODEThumbnailIsEnabled + { + get + { + return _bgcodeThumbnailIsEnabled; + } + + set + { + if (_bgcodeThumbnailEnabledStateIsGPOConfigured) + { + // If it's GPO configured, shouldn't be able to change this state. + return; + } + + if (value != _bgcodeThumbnailIsEnabled) + { + _bgcodeThumbnailIsEnabled = value; + Settings.Properties.EnableBgcodeThumbnail = value; + RaisePropertyChanged(); + } + } + } + + // Used to only disable enabled button on forced enabled state. (With this users still able to change the utility properties.) + public bool BGCODEThumbnailIsGpoEnabled + { + get + { + return _bgcodeThumbnailIsGpoEnabled; + } + } + + // Used to disable the settings card on forced disabled state. + public bool BGCODEThumbnailIsGpoDisabled + { + get + { + return _bgcodeThumbnailIsGpoDisabled; + } + } + public bool STLThumbnailIsEnabled { get diff --git a/tools/BugReportTool/BugReportTool/ProcessesList.cpp b/tools/BugReportTool/BugReportTool/ProcessesList.cpp index 9665938e7e..3b5062f908 100644 --- a/tools/BugReportTool/BugReportTool/ProcessesList.cpp +++ b/tools/BugReportTool/BugReportTool/ProcessesList.cpp @@ -27,6 +27,8 @@ std::vector processes = L"PowerToys.Hosts.exe", L"PowerToys.GcodePreviewHandler.exe", L"PowerToys.GcodeThumbnailProvider.exe", + L"PowerToys.BgcodePreviewHandler.exe", + L"PowerToys.BgcodeThumbnailProvider.exe", L"PowerToys.MarkdownPreviewHandler.exe", L"PowerToys.MonacoPreviewHandler.exe", L"PowerToys.PdfPreviewHandler.exe", diff --git a/tools/BugReportTool/BugReportTool/RegistryUtils.cpp b/tools/BugReportTool/BugReportTool/RegistryUtils.cpp index 5fed9f4fa6..eb576690e8 100644 --- a/tools/BugReportTool/BugReportTool/RegistryUtils.cpp +++ b/tools/BugReportTool/BugReportTool/RegistryUtils.cpp @@ -17,9 +17,11 @@ namespace { HKEY_CLASSES_ROOT, L"AppID\\{CF142243-F059-45AF-8842-DBBE9783DB14}" }, { HKEY_CLASSES_ROOT, L"CLSID\\{07665729-6243-4746-95b7-79579308d1b2}" }, { HKEY_CLASSES_ROOT, L"CLSID\\{ec52dea8-7c9f-4130-a77b-1737d0418507}" }, + { HKEY_CLASSES_ROOT, L"CLSID\\{dd8de316-7b01-48e7-ba21-e92c646704af}" }, { HKEY_CLASSES_ROOT, L"CLSID\\{8AA07897-C30B-4543-865B-00A0E5A1B32D}" }, { HKEY_CLASSES_ROOT, L"CLSID\\{BCC13D15-9720-4CC4-8371-EA74A274741E}" }, { HKEY_CLASSES_ROOT, L"CLSID\\{BFEE99B4-B74D-4348-BCA5-E757029647FF}" }, + { HKEY_CLASSES_ROOT, L"CLSID\\{c28761a0-8420-43ad-bff3-40400543e2d4}" }, { HKEY_CLASSES_ROOT, L"CLSID\\{8BC8AFC2-4E7C-4695-818E-8C1FFDCEA2AF}" }, { HKEY_CLASSES_ROOT, L"CLSID\\{51B4D7E5-7568-4234-B4BB-47FB3C016A69}\\InprocServer32" }, { HKEY_CLASSES_ROOT, L"CLSID\\{0440049F-D1DC-4E46-B27B-98393D79486B}" }, @@ -41,6 +43,7 @@ namespace { HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\PreviewHandlers", L"{45769bcc-e8fd-42d0-947e-02beef77a1f5}" }, { HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\PreviewHandlers", L"{07665729-6243-4746-95b7-79579308d1b2}" }, { HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\PreviewHandlers", L"{ec52dea8-7c9f-4130-a77b-1737d0418507}" }, + { HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\PreviewHandlers", L"{dd8de316-7b01-48e7-ba21-e92c646704af}" }, { HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\PreviewHandlers", L"{8AA07897-C30B-4543-865B-00A0E5A1B32D}" }, { HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", L"prevhost.exe" }, { HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", L"dllhost.exe" } diff --git a/tools/BugReportTool/BugReportTool/ReportGPOValues.cpp b/tools/BugReportTool/BugReportTool/ReportGPOValues.cpp index 02e04a2c5e..3c042ee06d 100644 --- a/tools/BugReportTool/BugReportTool/ReportGPOValues.cpp +++ b/tools/BugReportTool/BugReportTool/ReportGPOValues.cpp @@ -55,9 +55,11 @@ void ReportGPOValues(const std::filesystem::path &tmpDir) report << "getConfiguredMonacoPreviewEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredMonacoPreviewEnabledValue()) << std::endl; report << "getConfiguredPdfPreviewEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredPdfPreviewEnabledValue()) << std::endl; report << "getConfiguredGcodePreviewEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredGcodePreviewEnabledValue()) << std::endl; + report << "getConfiguredBgcodePreviewEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredBgcodePreviewEnabledValue()) << std::endl; report << "getConfiguredSvgThumbnailsEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredSvgThumbnailsEnabledValue()) << std::endl; report << "getConfiguredPdfThumbnailsEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredPdfThumbnailsEnabledValue()) << std::endl; report << "getConfiguredGcodeThumbnailsEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredGcodeThumbnailsEnabledValue()) << std::endl; + report << "getConfiguredBgcodeThumbnailsEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredBgcodeThumbnailsEnabledValue()) << std::endl; report << "getConfiguredStlThumbnailsEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredStlThumbnailsEnabledValue()) << std::endl; report << "getConfiguredHostsFileEditorEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredHostsFileEditorEnabledValue()) << std::endl; report << "getConfiguredImageResizerEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredImageResizerEnabledValue()) << std::endl; diff --git a/tools/Verification scripts/Check preview handler registration.ps1 b/tools/Verification scripts/Check preview handler registration.ps1 index e2b5eee30e..d4b54313b6 100644 --- a/tools/Verification scripts/Check preview handler registration.ps1 +++ b/tools/Verification scripts/Check preview handler registration.ps1 @@ -15,12 +15,13 @@ function PublicStaticVoidMain { [String] $MachineWideHandler } - [String[]]$TypesToCheck = @(".markdown", ".mdtext", ".mdtxt", ".mdown", ".mkdn", ".mdwn", ".mkd", ".md", ".svg", ".svgz", ".pdf", ".gcode", ".stl", ".txt", ".ini", ".qoi") + [String[]]$TypesToCheck = @(".markdown", ".mdtext", ".mdtxt", ".mdown", ".mkdn", ".mdwn", ".mkd", ".md", ".svg", ".svgz", ".pdf", ".gcode", ".bgcode", ".stl", ".txt", ".ini", ".qoi") $IPREVIEW_HANDLER_CLSID = '{8895b1c6-b41f-4c1c-a562-0d564250836f}' $PowerToysHandlers = @{ '{07665729-6243-4746-95b7-79579308d1b2}' = "PowerToys PDF handler" '{ddee2b8a-6807-48a6-bb20-2338174ff779}' = "PowerToys SVG handler" '{ec52dea8-7c9f-4130-a77b-1737d0418507}' = "PowerToys GCode handler" + '{dd8de316-7b01-48e7-ba21-e92c646704af}' = "PowerToys BGCode handler" '{8AA07897-C30B-4543-865B-00A0E5A1B32D}' = "PowerToys QOI handler" '{45769bcc-e8fd-42d0-947e-02beef77a1f5}' = "PowerToys Markdown handler" '{afbd5a44-2520-4ae0-9224-6cfce8fe4400}' = "PowerToys Monaco fallback handler"