diff --git a/Cpp.Build.props b/Cpp.Build.props
index 059ae21213..b58ed24173 100644
--- a/Cpp.Build.props
+++ b/Cpp.Build.props
@@ -84,7 +84,7 @@
- 10.0.18362.0
+ 10.0.19041.0
diff --git a/PowerToys.sln b/PowerToys.sln
index 682be4edc1..d8936af542 100644
--- a/PowerToys.sln
+++ b/PowerToys.sln
@@ -278,8 +278,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "utils", "utils", "{B39DC643
src\common\utils\modulesRegistry.h = src\common\utils\modulesRegistry.h
src\common\utils\MsiUtils.h = src\common\utils\MsiUtils.h
src\common\utils\os-detect.h = src\common\utils\os-detect.h
- src\common\utils\process_path.h = src\common\utils\process_path.h
src\common\utils\ProcessWaiter.h = src\common\utils\ProcessWaiter.h
+ src\common\utils\process_path.h = src\common\utils\process_path.h
src\common\utils\registry.h = src\common\utils\registry.h
src\common\utils\resources.h = src\common\utils\resources.h
src\common\utils\string_utils.h = src\common\utils\string_utils.h
@@ -403,6 +403,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PowerToys.Settings", "src\s
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PowerRenameUI", "src\modules\powerrename\PowerRenameUILib\PowerRenameUI.vcxproj", "{27718999-C175-450A-861C-89F911E16A88}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PowerRenameContextMenu", "src\modules\powerrename\PowerRenameContextMenu\PowerRenameContextMenu.vcxproj", "{1DBBB112-4BB1-444B-8EBB-E66555C76BA6}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM64 = Debug|ARM64
@@ -1560,6 +1562,18 @@ Global
{27718999-C175-450A-861C-89F911E16A88}.Release|x64.Build.0 = Release|x64
{27718999-C175-450A-861C-89F911E16A88}.Release|x86.ActiveCfg = Release|x64
{27718999-C175-450A-861C-89F911E16A88}.Release|x86.Build.0 = Release|x64
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6}.Debug|ARM64.Build.0 = Debug|ARM64
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6}.Debug|x64.ActiveCfg = Debug|x64
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6}.Debug|x64.Build.0 = Debug|x64
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6}.Debug|x86.ActiveCfg = Debug|x64
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6}.Debug|x86.Build.0 = Debug|x64
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6}.Release|ARM64.ActiveCfg = Release|ARM64
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6}.Release|ARM64.Build.0 = Release|ARM64
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6}.Release|x64.ActiveCfg = Release|x64
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6}.Release|x64.Build.0 = Release|x64
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6}.Release|x86.ActiveCfg = Release|x64
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6}.Release|x86.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1693,6 +1707,7 @@ Global
{8FE5A5EE-1B59-401C-9FB3-B04ECD3E29C1} = {4AFC9975-2456-4C70-94A4-84073C1CED93}
{020A7474-3601-4160-A159-D7B70B77B15F} = {C3081D9A-1586-441A-B5F4-ED815B3719C1}
{27718999-C175-450A-861C-89F911E16A88} = {89E20BCE-EB9C-46C8-8B50-E01A82E6FDC3}
+ {1DBBB112-4BB1-444B-8EBB-E66555C76BA6} = {89E20BCE-EB9C-46C8-8B50-E01A82E6FDC3}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C3A2F9D1-7930-4EF4-A6FC-7EE0A99821D0}
diff --git a/src/modules/powerrename/PowerRenameContextMenu/AppxManifest.xml b/src/modules/powerrename/PowerRenameContextMenu/AppxManifest.xml
new file mode 100644
index 0000000000..346f8a9101
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/AppxManifest.xml
@@ -0,0 +1,55 @@
+
+
+
+
+ PowerRenameContextMenu
+ Stefan Sparse Package
+ Assets\storelogo.png
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-100.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-100.png
new file mode 100644
index 0000000000..e936eda3bf
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-100.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-125.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-125.png
new file mode 100644
index 0000000000..467d74db56
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-125.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-150.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-150.png
new file mode 100644
index 0000000000..748de00432
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-150.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-200.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-200.png
new file mode 100644
index 0000000000..77ff5bb8ad
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-200.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-400.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-400.png
new file mode 100644
index 0000000000..4701122a44
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/BadgeLogo.scale-400.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-100.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-100.png
new file mode 100644
index 0000000000..0e89da4129
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-100.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-125.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-125.png
new file mode 100644
index 0000000000..d886baec94
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-125.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-150.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-150.png
new file mode 100644
index 0000000000..f69636b336
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-150.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-200.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-200.png
new file mode 100644
index 0000000000..fa8df5fafd
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-200.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-400.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-400.png
new file mode 100644
index 0000000000..2378211794
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/LargeTile.scale-400.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-100.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-100.png
new file mode 100644
index 0000000000..81a44e9605
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-100.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-125.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-125.png
new file mode 100644
index 0000000000..67e5781457
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-125.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-150.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-150.png
new file mode 100644
index 0000000000..512d5947ef
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-150.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-200.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-200.png
new file mode 100644
index 0000000000..d28d3907b0
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-200.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-400.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-400.png
new file mode 100644
index 0000000000..62a692a3e0
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/SmallTile.scale-400.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.png
new file mode 100644
index 0000000000..005b302954
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-100.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-100.png
new file mode 100644
index 0000000000..005b302954
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-100.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-125.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-125.png
new file mode 100644
index 0000000000..11dc42c087
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-125.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-150.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-150.png
new file mode 100644
index 0000000000..5a2379b2e6
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-150.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-200.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-200.png
new file mode 100644
index 0000000000..b7c8f6d062
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-200.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-400.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-400.png
new file mode 100644
index 0000000000..af7050d7c7
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/SplashScreen.scale-400.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-100.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-100.png
new file mode 100644
index 0000000000..1cc6e8bc18
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-100.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-125.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-125.png
new file mode 100644
index 0000000000..bcf3350f89
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-125.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-150.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-150.png
new file mode 100644
index 0000000000..1babcf809b
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-150.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-200.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-200.png
new file mode 100644
index 0000000000..29a870f4fc
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-200.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-400.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-400.png
new file mode 100644
index 0000000000..f12b7e1c8a
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square150x150Logo.scale-400.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png
new file mode 100644
index 0000000000..68ce2aea20
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png
new file mode 100644
index 0000000000..6b04565538
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png
new file mode 100644
index 0000000000..9560152e06
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png
new file mode 100644
index 0000000000..10b378144c
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png
new file mode 100644
index 0000000000..3201851602
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-16.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-16.png
new file mode 100644
index 0000000000..68ce2aea20
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-16.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-24.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-24.png
new file mode 100644
index 0000000000..6b04565538
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-24.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-256.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-256.png
new file mode 100644
index 0000000000..9560152e06
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-256.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-32.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-32.png
new file mode 100644
index 0000000000..10b378144c
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-32.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-48.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-48.png
new file mode 100644
index 0000000000..3201851602
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.altform-unplated_targetsize-48.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-100.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-100.png
new file mode 100644
index 0000000000..be581fc562
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-100.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-125.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-125.png
new file mode 100644
index 0000000000..05ff34e9e4
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-125.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-150.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-150.png
new file mode 100644
index 0000000000..1b75f44107
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-150.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-200.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-200.png
new file mode 100644
index 0000000000..2a63126ca4
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-200.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-400.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-400.png
new file mode 100644
index 0000000000..a84db62f1b
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.scale-400.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-16.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-16.png
new file mode 100644
index 0000000000..f94f167cd1
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-16.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-24.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-24.png
new file mode 100644
index 0000000000..b47e217686
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-24.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-256.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-256.png
new file mode 100644
index 0000000000..8241b73798
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-256.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-32.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-32.png
new file mode 100644
index 0000000000..86550c2d48
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-32.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-48.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-48.png
new file mode 100644
index 0000000000..03a07dcc5f
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Square44x44Logo.targetsize-48.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-100.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-100.png
new file mode 100644
index 0000000000..8829830ce8
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-100.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-125.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-125.png
new file mode 100644
index 0000000000..909b7ed3b6
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-125.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-150.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-150.png
new file mode 100644
index 0000000000..4cbdf64108
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-150.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-200.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-200.png
new file mode 100644
index 0000000000..005b302954
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-200.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-400.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-400.png
new file mode 100644
index 0000000000..b7c8f6d062
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/Wide310x150Logo.scale-400.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-100.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-100.png
new file mode 100644
index 0000000000..23b683c4e9
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-100.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-125.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-125.png
new file mode 100644
index 0000000000..a8dd822b00
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-125.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-150.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-150.png
new file mode 100644
index 0000000000..e5d6defb8d
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-150.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-200.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-200.png
new file mode 100644
index 0000000000..90dbdae8d9
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-200.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-400.png b/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-400.png
new file mode 100644
index 0000000000..a9239f8101
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/Assets/storelogo.scale-400.png differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/MyPackage-old.msix b/src/modules/powerrename/PowerRenameContextMenu/MyPackage-old.msix
new file mode 100644
index 0000000000..dca0b7d253
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/MyPackage-old.msix differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.cpp b/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.cpp
new file mode 100644
index 0000000000..c3f59a9eb5
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.cpp
@@ -0,0 +1,22 @@
+// PowerRenameContextMenu.cpp : Defines the exported functions for the DLL.
+//
+
+#include "pch.h"
+#include "framework.h"
+#include "PowerRenameContextMenu.h"
+
+
+// This is an example of an exported variable
+POWERRENAMECONTEXTMENU_API int nPowerRenameContextMenu=0;
+
+// This is an example of an exported function.
+POWERRENAMECONTEXTMENU_API int fnPowerRenameContextMenu(void)
+{
+ return 0;
+}
+
+// This is the constructor of a class that has been exported.
+CPowerRenameContextMenu::CPowerRenameContextMenu()
+{
+ return;
+}
diff --git a/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.h b/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.h
new file mode 100644
index 0000000000..2145f56e2b
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.h
@@ -0,0 +1,22 @@
+// The following ifdef block is the standard way of creating macros which make exporting
+// from a DLL simpler. All files within this DLL are compiled with the POWERRENAMECONTEXTMENU_EXPORTS
+// symbol defined on the command line. This symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see
+// POWERRENAMECONTEXTMENU_API functions as being imported from a DLL, whereas this DLL sees symbols
+// defined with this macro as being exported.
+#ifdef POWERRENAMECONTEXTMENU_EXPORTS
+#define POWERRENAMECONTEXTMENU_API __declspec(dllexport)
+#else
+#define POWERRENAMECONTEXTMENU_API __declspec(dllimport)
+#endif
+
+// This class is exported from the dll
+class POWERRENAMECONTEXTMENU_API CPowerRenameContextMenu {
+public:
+ CPowerRenameContextMenu(void);
+ // TODO: add your methods here.
+};
+
+extern POWERRENAMECONTEXTMENU_API int nPowerRenameContextMenu;
+
+POWERRENAMECONTEXTMENU_API int fnPowerRenameContextMenu(void);
diff --git a/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.rc b/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.rc
new file mode 100644
index 0000000000..3b3fdcbfd2
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.rc
@@ -0,0 +1,60 @@
+// Microsoft Visual C++ generated resource script.
+//
+
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "winres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (United States) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+LANGUAGE 9, 1
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""winres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // English (United States) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
diff --git a/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.vcxproj b/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.vcxproj
new file mode 100644
index 0000000000..1ff31d66ac
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.vcxproj
@@ -0,0 +1,220 @@
+
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 16.0
+ Win32Proj
+ {1dbbb112-4bb1-444b-8ebb-e66555c76ba6}
+ PowerRenameContextMenu
+ 10.0.18362.0
+
+
+
+ DynamicLibrary
+ true
+ v143
+ Unicode
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ Unicode
+
+
+ DynamicLibrary
+ true
+ v143
+ Unicode
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PowerRenameContextMenu
+ $(SolutionDir)$(Platform)\$(Configuration)\modules\PowerRename\
+
+
+ PowerRenameContextMenu
+
+
+ PowerRenameContextMenu
+
+
+ PowerRenameContextMenu
+ $(SolutionDir)$(Platform)\$(Configuration)\modules\PowerRename\
+
+
+
+ Level3
+ true
+ WIN32;_DEBUG;POWERRENAMECONTEXTMENU_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ Use
+
+
+ Windows
+ true
+ false
+ runtimeobject.lib;%(AdditionalDependencies)
+ Source.def
+
+
+
+
+ Level3
+ true
+ true
+ true
+ WIN32;NDEBUG;POWERRENAMECONTEXTMENU_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ Use
+
+
+ Windows
+ true
+ true
+ true
+ false
+ runtimeobject.lib;%(AdditionalDependencies)
+ Source.def
+
+
+
+
+ Level3
+ true
+ _DEBUG;POWERRENAMECONTEXTMENU_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ Use
+ ..\..\..\;..\lib\;..\..\;%(AdditionalIncludeDirectories)
+
+
+ Windows
+ true
+ false
+ runtimeobject.lib;%(AdditionalDependencies)
+ Source.def
+
+
+ del $(OutDir)*.msix /q
+MakeAppx.exe pack /d . /p $(OutDir)PowerRenameContextMenuPackage.msix /nv
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;POWERRENAMECONTEXTMENU_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ true
+ Use
+ ..\..\..\;..\lib\;..\..\;%(AdditionalIncludeDirectories)
+
+
+ Windows
+ true
+ true
+ true
+ false
+ runtimeobject.lib;%(AdditionalDependencies)
+ Source.def
+
+
+ del $(OutDir)*.msix /q
+MakeAppx.exe pack /d . /p $(OutDir)PowerRenameContextMenuPackage.msix /nv
+
+
+
+
+
+
+
+
+
+
+
+ Create
+ Create
+ Create
+ Create
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {d9b8fc84-322a-4f9f-bbb9-20915c47ddfd}
+
+
+ {51920f1f-c28c-4adf-8660-4238766796c2}
+
+
+
+
+
+
+
+
+
+
+ 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/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.vcxproj.filters b/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.vcxproj.filters
new file mode 100644
index 0000000000..66afa4c1fc
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/PowerRenameContextMenu.vcxproj.filters
@@ -0,0 +1,718 @@
+
+
+
+
+ {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
+
+
+ Header Files
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+
+
+
+ Resource Files
+
+
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+ Resource Files
+
+
+
\ No newline at end of file
diff --git a/src/modules/powerrename/PowerRenameContextMenu/PowerRenameUI.ico b/src/modules/powerrename/PowerRenameContextMenu/PowerRenameUI.ico
new file mode 100644
index 0000000000..4f111feaac
Binary files /dev/null and b/src/modules/powerrename/PowerRenameContextMenu/PowerRenameUI.ico differ
diff --git a/src/modules/powerrename/PowerRenameContextMenu/Source.def b/src/modules/powerrename/PowerRenameContextMenu/Source.def
new file mode 100644
index 0000000000..1ffdadd7a1
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/Source.def
@@ -0,0 +1,5 @@
+LIBRARY
+EXPORTS
+DllCanUnloadNow PRIVATE
+DllGetClassObject PRIVATE
+DllGetActivationFactory PRIVATE
\ No newline at end of file
diff --git a/src/modules/powerrename/PowerRenameContextMenu/dllmain.cpp b/src/modules/powerrename/PowerRenameContextMenu/dllmain.cpp
new file mode 100644
index 0000000000..d5d7b19cf9
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/dllmain.cpp
@@ -0,0 +1,289 @@
+// dllmain.cpp : Defines the entry point for the DLL application.
+#include "pch.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+using namespace Microsoft::WRL;
+
+HINSTANCE g_hInst = 0;
+
+BOOL APIENTRY DllMain( HMODULE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved
+ )
+{
+ switch (ul_reason_for_call)
+ {
+ case DLL_PROCESS_ATTACH:
+ g_hInst = hModule;
+ Trace::RegisterProvider();
+ break;
+ case DLL_PROCESS_DETACH:
+ Trace::UnregisterProvider();
+ break;
+ }
+ return TRUE;
+}
+
+class __declspec(uuid("1861E28B-A1F0-4EF4-A1FE-4C8CA88E2174")) PowerRenameContextMenuCommand final : public RuntimeClass, IExplorerCommand, IObjectWithSite>
+{
+public:
+ virtual const wchar_t* Title() { return L"PowerRename"; }
+ virtual const EXPCMDFLAGS Flags() { return ECF_DEFAULT; }
+ virtual const EXPCMDSTATE State(_In_opt_ IShellItemArray* selection) { return ECS_ENABLED; }
+
+ // IExplorerCommand
+ IFACEMETHODIMP GetTitle(_In_opt_ IShellItemArray* items, _Outptr_result_nullonfailure_ PWSTR* name)
+ {
+ return SHStrDup(app_name.c_str(), name);
+ }
+
+ IFACEMETHODIMP GetIcon(_In_opt_ IShellItemArray*, _Outptr_result_nullonfailure_ PWSTR* icon)
+ {
+ if (!CSettingsInstance().GetShowIconOnMenu())
+ {
+ *icon = nullptr;
+ return E_NOTIMPL;
+ }
+
+ std::wstring iconResourcePath = get_module_folderpath(g_hInst);
+ iconResourcePath += L"\\";
+ iconResourcePath += L"PowerRenameUI.ico";
+ return SHStrDup(iconResourcePath.c_str(), icon);
+ }
+
+ IFACEMETHODIMP GetToolTip(_In_opt_ IShellItemArray*, _Outptr_result_nullonfailure_ PWSTR* infoTip)
+ {
+ *infoTip = nullptr;
+ return E_NOTIMPL;
+ }
+
+ IFACEMETHODIMP GetCanonicalName(_Out_ GUID* guidCommandName)
+ {
+ *guidCommandName = __uuidof(this);
+ return S_OK;
+ }
+
+ IFACEMETHODIMP GetState(_In_opt_ IShellItemArray* selection, _In_ BOOL okToBeSlow, _Out_ EXPCMDSTATE* cmdState)
+ {
+ *cmdState = CSettingsInstance().GetEnabled() ? ECS_ENABLED : ECS_HIDDEN;
+ return S_OK;
+ }
+
+ IFACEMETHODIMP Invoke(_In_opt_ IShellItemArray* selection, _In_opt_ IBindCtx*) noexcept
+ try
+ {
+ HWND parent = nullptr;
+ if (m_site)
+ {
+ ComPtr oleWindow;
+ RETURN_IF_FAILED(m_site.As(&oleWindow));
+ RETURN_IF_FAILED(oleWindow->GetWindow(&parent));
+ }
+
+ std::wostringstream title;
+ title << Title();
+
+ if (selection)
+ {
+ DWORD count;
+ RETURN_IF_FAILED(selection->GetCount(&count));
+ title << L" (" << count << L" selected items)";
+ }
+ else
+ {
+ title << L"(no selected items)";
+ }
+ std::filesystem::path modulePath{ wil::GetModuleFileNameW() };
+ std::wstring path = get_module_folderpath(g_hInst);
+ path = path + L"\\PowerToys.PowerRename.exe";
+ std::wstring iconResourcePath = get_module_filename();
+
+ MessageBox(parent, iconResourcePath.c_str(), iconResourcePath.c_str(), MB_OK);
+ RunPowerRename(selection);
+ return S_OK;
+ }
+ CATCH_RETURN();
+
+ IFACEMETHODIMP GetFlags(_Out_ EXPCMDFLAGS* flags)
+ {
+ *flags = Flags();
+ return S_OK;
+ }
+ IFACEMETHODIMP EnumSubCommands(_COM_Outptr_ IEnumExplorerCommand** enumCommands)
+ {
+ *enumCommands = nullptr;
+ return E_NOTIMPL;
+ }
+
+ // IObjectWithSite
+ IFACEMETHODIMP SetSite(_In_ IUnknown* site) noexcept
+ {
+ m_site = site;
+ return S_OK;
+ }
+ IFACEMETHODIMP GetSite(_In_ REFIID riid, _COM_Outptr_ void** site) noexcept { return m_site.CopyTo(riid, site); }
+
+protected:
+ ComPtr m_site;
+
+private:
+ HRESULT RunPowerRename(IShellItemArray* psiItemArray)
+ {
+ HRESULT hr = E_FAIL;
+ HWND parent = nullptr;
+ if (m_site)
+ {
+ ComPtr oleWindow;
+ RETURN_IF_FAILED(m_site.As(&oleWindow));
+ RETURN_IF_FAILED(oleWindow->GetWindow(&parent));
+ }
+
+
+ if (CSettingsInstance().GetEnabled())
+ {
+ Trace::Invoked();
+ // Set the application path based on the location of the dll
+ std::wstring path = get_module_folderpath(g_hInst);
+ path = path + L"\\PowerToys.PowerRename.exe";
+ LPTSTR lpApplicationName = (LPTSTR)path.c_str();
+ // Create an anonymous pipe to stream filenames
+ SECURITY_ATTRIBUTES sa;
+ HANDLE hReadPipe;
+ HANDLE hWritePipe;
+ sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+ sa.lpSecurityDescriptor = NULL;
+ sa.bInheritHandle = TRUE;
+ if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0))
+ {
+ hr = HRESULT_FROM_WIN32(GetLastError());
+ return hr;
+ }
+ if (!SetHandleInformation(hWritePipe, HANDLE_FLAG_INHERIT, 0))
+ {
+ hr = HRESULT_FROM_WIN32(GetLastError());
+ return hr;
+ }
+ CAtlFile writePipe(hWritePipe);
+ MessageBox(parent, L"AAAAAAAAAAAAA", path.c_str(), MB_OK);
+
+ CString commandLine;
+ commandLine.Format(_T("\"%s\""), lpApplicationName);
+ int nSize = commandLine.GetLength() + 1;
+ LPTSTR lpszCommandLine = new TCHAR[nSize];
+ _tcscpy_s(lpszCommandLine, nSize, commandLine);
+
+ STARTUPINFO startupInfo;
+ ZeroMemory(&startupInfo, sizeof(STARTUPINFO));
+ startupInfo.cb = sizeof(STARTUPINFO);
+ startupInfo.hStdInput = hReadPipe;
+ startupInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
+ startupInfo.wShowWindow = SW_SHOWNORMAL;
+
+ PROCESS_INFORMATION processInformation;
+
+ // Start the resizer
+ CreateProcess(
+ NULL,
+ lpszCommandLine,
+ NULL,
+ NULL,
+ TRUE,
+ 0,
+ NULL,
+ NULL,
+ &startupInfo,
+ &processInformation);
+ HWND parent2 = nullptr;
+ if (m_site)
+ {
+ RETURN_IF_FAILED(IUnknown_GetWindow(m_site.Get(), &parent2));
+
+ MessageBox(parent, path.c_str(), L"IMA SAJT", MB_OK);
+ }
+ RunNonElevatedEx(path.c_str(), {}, get_module_folderpath(g_hInst));
+ MessageBox(parent, path.c_str(), L"asd352432424", MB_OK);
+ ShellExecute(parent2, L"open", L"C:\\Users\\stefan\\Projects\\PowerToys\\x64\\Debug\\modules\\PowerRename\\PowerToys.PowerRename.exe", nullptr, nullptr, SW_SHOWNORMAL);
+ delete[] lpszCommandLine;
+ if (!CloseHandle(processInformation.hProcess))
+ {
+ hr = HRESULT_FROM_WIN32(GetLastError());
+ return hr;
+ }
+ if (!CloseHandle(processInformation.hThread))
+ {
+ hr = HRESULT_FROM_WIN32(GetLastError());
+ return hr;
+ }
+ MessageBox(parent, path.c_str(), L"CCCCCCCCCCCCCCCC", MB_OK);
+
+ //m_pdtobj will be NULL when invoked from the MSIX build as Initialize is never called (IShellExtInit functions aren't called in case of MSIX).
+ DWORD fileCount = 0;
+ // Gets the list of files currently selected using the IShellItemArray
+ psiItemArray->GetCount(&fileCount);
+ // Iterate over the list of files
+ for (DWORD i = 0; i < fileCount; i++)
+ {
+ IShellItem* shellItem;
+ psiItemArray->GetItemAt(i, &shellItem);
+ LPWSTR itemName;
+ // Retrieves the entire file system path of the file from its shell item
+ shellItem->GetDisplayName(SIGDN_FILESYSPATH, &itemName);
+ CString fileName(itemName);
+ // File name can't contain '?'
+ fileName.Append(_T("?"));
+ // Write the file path into the input stream for image resizer
+ writePipe.Write(fileName, fileName.GetLength() * sizeof(TCHAR));
+ }
+ std::wstring asd = L"asdasdasd";
+ asd += L" " + std::to_wstring( fileCount) + L" SDASDASDAD";
+ MessageBox(parent, asd.c_str(), L"CCCCCCCCCCCCCCCC", MB_OK);
+
+ writePipe.Close();
+ }
+ Trace::InvokedRet(hr);
+
+ return hr;
+ }
+
+ std::wstring app_name = L"PowerRename";
+};
+
+CoCreatableClass(PowerRenameContextMenuCommand)
+CoCreatableClassWrlCreatorMapInclude(PowerRenameContextMenuCommand)
+
+STDAPI DllGetActivationFactory(_In_ HSTRING activatableClassId, _COM_Outptr_ IActivationFactory** factory)
+{
+ return Module::GetModule().GetActivationFactory(activatableClassId, factory);
+}
+
+STDAPI DllCanUnloadNow()
+{
+ return Module::GetModule().GetObjectCount() == 0 ? S_OK : S_FALSE;
+}
+
+STDAPI DllGetClassObject(_In_ REFCLSID rclsid, _In_ REFIID riid, _COM_Outptr_ void** instance)
+{
+ return Module::GetModule().GetClassObject(rclsid, riid, instance);
+}
\ No newline at end of file
diff --git a/src/modules/powerrename/PowerRenameContextMenu/framework.h b/src/modules/powerrename/PowerRenameContextMenu/framework.h
new file mode 100644
index 0000000000..54b83e94fd
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/framework.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+// Windows Header Files
+#include
diff --git a/src/modules/powerrename/PowerRenameContextMenu/packages.config b/src/modules/powerrename/PowerRenameContextMenu/packages.config
new file mode 100644
index 0000000000..ed327ca35a
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/modules/powerrename/PowerRenameContextMenu/pch.cpp b/src/modules/powerrename/PowerRenameContextMenu/pch.cpp
new file mode 100644
index 0000000000..64b7eef6d6
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/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/powerrename/PowerRenameContextMenu/pch.h b/src/modules/powerrename/PowerRenameContextMenu/pch.h
new file mode 100644
index 0000000000..885d5d62e4
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/pch.h
@@ -0,0 +1,13 @@
+// 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
+
+// add headers that you want to pre-compile here
+#include "framework.h"
+
+#endif //PCH_H
diff --git a/src/modules/powerrename/PowerRenameContextMenu/resource.h b/src/modules/powerrename/PowerRenameContextMenu/resource.h
new file mode 100644
index 0000000000..70ea8e555c
--- /dev/null
+++ b/src/modules/powerrename/PowerRenameContextMenu/resource.h
@@ -0,0 +1,14 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by PowerRenameContextMenu.rc
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 101
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1001
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/src/modules/powerrename/dll/PowerRenameExt.vcxproj b/src/modules/powerrename/dll/PowerRenameExt.vcxproj
index 83b3ce76c3..d137734097 100644
--- a/src/modules/powerrename/dll/PowerRenameExt.vcxproj
+++ b/src/modules/powerrename/dll/PowerRenameExt.vcxproj
@@ -64,6 +64,9 @@
{98537082-0fdb-40de-abd8-0dc5a4269bab}
+
+ {cc6e41ac-8174-4e8a-8d22-85dd7f4851df}
+
{51920f1f-c28c-4adf-8660-4238766796c2}
diff --git a/src/modules/powerrename/dll/dllmain.cpp b/src/modules/powerrename/dll/dllmain.cpp
index d615703924..31ecb7d8ed 100644
--- a/src/modules/powerrename/dll/dllmain.cpp
+++ b/src/modules/powerrename/dll/dllmain.cpp
@@ -6,10 +6,13 @@
#include
#include
#include
+#include
#include
#include "Generated Files/resource.h"
#include
#include
+#include
+#include
std::atomic g_dwModuleRefCount = 0;
HINSTANCE g_hInst = 0;
@@ -161,6 +164,66 @@ private:
std::wstring app_key;
public:
+ bool registerSparsePackage(std::wstring externalLocation, std::wstring sparsePkgPath)
+ {
+ bool registration = false;
+ try
+ {
+ using namespace winrt::Windows::Foundation;
+ using namespace winrt::Windows::Management::Deployment;
+ Uri externalUri{ externalLocation };
+ Uri packageUri{ sparsePkgPath };
+
+ // Console.WriteLine("exe Location {0}", externalLocation);
+ // Console.WriteLine("msix Address {0}", sparsePkgPath);
+
+ // Console.WriteLine(" exe Uri {0}", externalUri);
+ // Console.WriteLine(" msix Uri {0}", packageUri);
+
+ PackageManager packageManager;
+
+ // Declare use of an external location
+ AddPackageOptions options;
+ options.ExternalLocationUri(externalUri);
+
+ IAsyncOperationWithProgress deploymentOperation = packageManager.AddPackageByUriAsync(packageUri, options);
+ //IAsyncOperationWithProgress deploymentOperation = packageManager.AddPackageAsync(packageUri, nullptr, DeploymentOptions::None);
+ deploymentOperation.get();
+
+ int returnValue = 0;
+ // Check the status of the operation
+ if (deploymentOperation.Status() == AsyncStatus::Error)
+ {
+ auto deploymentResult{ deploymentOperation.GetResults() };
+ auto asd = deploymentOperation.ErrorCode();
+ auto asd1 = deploymentResult.ErrorText().c_str();
+ returnValue = 1;
+ }
+ else if (deploymentOperation.Status() == AsyncStatus::Canceled)
+ {
+ returnValue = 1;
+ }
+ else if (deploymentOperation.Status() == AsyncStatus::Completed)
+ {
+ returnValue = 1;
+ }
+ else
+ {
+ returnValue = 1;
+ }
+ return returnValue;
+
+ // Other progress and error-handling code omitted for brevity...
+ }
+ catch (...)
+ {
+
+ }
+
+ return true;
+ }
+
+
// Return the localized display name of the powertoy
virtual PCWSTR get_name() override
{
@@ -176,6 +239,11 @@ public:
// Enable the powertoy
virtual void enable()
{
+ std::wstring path = get_module_folderpath(g_hInst);
+ std::wstring packageUri = path + L"\\PowerRenameContextMenuPackage.msix";
+ //std::wstring externalLocation = L"C:\\Users\\stefan\\Projects\\PowerToys\\x64\\Debug\\modules\\PowerRename";
+ //std::wstring packageUri = L"C:\\Users\\stefan\\Projects\\PowerToys\\src\\modules\\powerrename\\PowerRenameContextMenu\\MyPackage.msix";
+ registerSparsePackage(path, packageUri);
Logger::info(L"PowerRename enabled");
m_enabled = true;
save_settings();