diff --git a/src/RunnerV2/RunnerV2/ModuleInterfaces/ImageResizerModuleInterface.cs b/src/RunnerV2/RunnerV2/ModuleInterfaces/ImageResizerModuleInterface.cs new file mode 100644 index 0000000000..272c16efcc --- /dev/null +++ b/src/RunnerV2/RunnerV2/ModuleInterfaces/ImageResizerModuleInterface.cs @@ -0,0 +1,41 @@ +// 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.IO; +using System.Reflection; +using System.Runtime.InteropServices; +using Microsoft.PowerToys.Settings.UI.Library; +using PowerToys.GPOWrapper; +using RunnerV2.Helpers; +using RunnerV2.Models; + +namespace RunnerV2.ModuleInterfaces +{ + internal sealed partial class ImageResizerModuleInterface : IPowerToysModule + { + public string Name => "ImageResizer"; + + public bool Enabled => SettingsUtils.Default.GetSettings().Enabled.ImageResizer; + + public GpoRuleConfigured GpoRuleConfigured => GPOWrapper.GetConfiguredImageResizerEnabledValue(); + + public void Disable() + { + UpdateImageResizerRegistrationWin10(false); + } + + public void Enable() + { + UpdateImageResizerRegistrationWin10(true); + if (Environment.OSVersion.Version.Build >= 22000) + { + PackageHelper.InstallPackage(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!, "WinUI3Apps", "ImageResizerContextMenuPackage.msix"), [], true); + } + } + + [LibraryImport("WinUI3Apps/PowerToys.ImageResizerExt.dll")] + private static partial void UpdateImageResizerRegistrationWin10([MarshalAs(UnmanagedType.Bool)]bool enabled); + } +} diff --git a/src/RunnerV2/RunnerV2/Runner.cs b/src/RunnerV2/RunnerV2/Runner.cs index 5ac9a929fc..b75003122b 100644 --- a/src/RunnerV2/RunnerV2/Runner.cs +++ b/src/RunnerV2/RunnerV2/Runner.cs @@ -72,6 +72,7 @@ namespace RunnerV2 new MouseWithoutBordersModuleInterface(), new NewPlusModuleInterface(), new PowerRenameModuleInterface(), + new ImageResizerModuleInterface(), ]; /// diff --git a/src/modules/imageresizer/dll/ContextMenuHandler.cpp b/src/modules/imageresizer/dll/ContextMenuHandler.cpp index 1df5e5aeaf..56203dc3db 100644 --- a/src/modules/imageresizer/dll/ContextMenuHandler.cpp +++ b/src/modules/imageresizer/dll/ContextMenuHandler.cpp @@ -10,7 +10,6 @@ #include #include #include -#include extern HINSTANCE g_hInst_imageResizer; diff --git a/src/modules/imageresizer/dll/dllmain.cpp b/src/modules/imageresizer/dll/dllmain.cpp index c616e77e42..4ed21d648e 100644 --- a/src/modules/imageresizer/dll/dllmain.cpp +++ b/src/modules/imageresizer/dll/dllmain.cpp @@ -1,21 +1,8 @@ #include "pch.h" -#include "Generated Files/resource.h" -#include "ImageResizerExt_i.h" #include "dllmain.h" -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include "RuntimeRegistration.h" - CImageResizerExtModule _AtlModule; HINSTANCE g_hInst_imageResizer = 0; @@ -34,125 +21,19 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpRes return _AtlModule.DllMain(dwReason, lpReserved); } -class ImageResizerModule : public PowertoyModuleIface -{ -private: - // Enabled by default - bool m_enabled = false; - std::wstring app_name; - //contains the non localized key of the powertoy - std::wstring app_key; - // Update registration based on enabled state - void UpdateRegistration(bool enabled) - { - if (enabled) - { -#if defined(ENABLE_REGISTRATION) || defined(NDEBUG) - ImageResizerRuntimeRegistration::EnsureRegistered(); - Logger::info(L"ImageResizer context menu registered"); -#endif - } - else - { -#if defined(ENABLE_REGISTRATION) || defined(NDEBUG) - ImageResizerRuntimeRegistration::Unregister(); - Logger::info(L"ImageResizer context menu unregistered"); -#endif - } - } - - -public: - // Constructor - ImageResizerModule() - { - m_enabled = CSettingsInstance().GetEnabled(); - UpdateRegistration(m_enabled); - app_name = GET_RESOURCE_STRING(IDS_IMAGERESIZER); - app_key = ImageResizerConstants::ModuleKey; - LoggerHelpers::init_logger(app_key, L"ModuleInterface", LogSettings::imageResizerLoggerName); - }; - - // Destroy the powertoy and free memory - virtual void destroy() override - { - delete this; - } - - // Return the localized display name of the powertoy - virtual const wchar_t* get_name() override - { - return app_name.c_str(); - } - - // Return the non localized key of the powertoy, this will be cached by the runner - virtual const wchar_t* get_key() override - { - return app_key.c_str(); - } - - // Return the configured status for the gpo policy for the module - virtual powertoys_gpo::gpo_rule_configured_t gpo_policy_enabled_configuration() override - { - return powertoys_gpo::getConfiguredImageResizerEnabledValue(); - } - - // Return JSON with the configuration options. - virtual bool get_config(wchar_t* buffer, int* buffer_size) override - { - HINSTANCE hinstance = reinterpret_cast(&__ImageBase); - - // Create a Settings object. - PowerToysSettings::Settings settings(hinstance, get_name()); - settings.set_description(GET_RESOURCE_STRING(IDS_SETTINGS_DESCRIPTION)); - settings.set_overview_link(L"https://aka.ms/PowerToysOverview_ImageResizer"); - settings.set_icon_key(L"pt-image-resizer"); - settings.add_header_szLarge(L"imageresizer_settingsheader", GET_RESOURCE_STRING(IDS_SETTINGS_HEADER_DESCRIPTION), GET_RESOURCE_STRING(IDS_SETTINGS_HEADER)); - return settings.serialize_to_buffer(buffer, buffer_size); - } - - // Signal from the Settings editor to call a custom action. - // This can be used to spawn more complex editors. - virtual void call_custom_action(const wchar_t* /*action*/) override {} - - // Called by the runner to pass the updated settings values as a serialized JSON. - virtual void set_config(const wchar_t* /*config*/) override {} - - // Enable the powertoy - virtual void enable() - { - m_enabled = true; - - if (package::IsWin11OrGreater()) - { - std::wstring path = get_module_folderpath(g_hInst_imageResizer); - std::wstring packageUri = path + L"\\ImageResizerContextMenuPackage.msix"; - if (!package::IsPackageRegisteredWithPowerToysVersion(ImageResizerConstants::ModulePackageDisplayName)) - { - package::RegisterSparsePackage(path, packageUri); - } - } - UpdateRegistration(m_enabled); - Trace::EnableImageResizer(m_enabled); - } - - // Disable the powertoy - virtual void disable() - { - m_enabled = false; - UpdateRegistration(m_enabled); - Trace::EnableImageResizer(m_enabled); - } - - // Returns if the powertoys is enabled - virtual bool is_enabled() override - { - return m_enabled; - } -}; - -extern "C" __declspec(dllexport) PowertoyModuleIface* __cdecl powertoy_create() +EXTERN_C __declspec(dllexport) void UpdateImageResizerRegistrationWin10(bool enabled) { - return new ImageResizerModule(); -} \ No newline at end of file + if (enabled) + { +#if defined(ENABLE_REGISTRATION) || defined(NDEBUG) + ImageResizerRuntimeRegistration::EnsureRegistered(); +#endif + } + else + { +#if defined(ENABLE_REGISTRATION) || defined(NDEBUG) + ImageResizerRuntimeRegistration::Unregister(); +#endif + } +} diff --git a/src/modules/imageresizer/dll/dllmain.h b/src/modules/imageresizer/dll/dllmain.h index 375bde005f..1a22b38c1e 100644 --- a/src/modules/imageresizer/dll/dllmain.h +++ b/src/modules/imageresizer/dll/dllmain.h @@ -1,7 +1,6 @@ class CImageResizerExtModule : public ATL::CAtlDllModuleT { public: - DECLARE_LIBID(LIBID_ImageResizerExtLib) DECLARE_REGISTRY_APPID_RESOURCEID(IDR_IMAGERESIZEREXT, "{0C866E7B-65CB-4E7D-B1DD-D014F000E8D8}") };