├── .github
└── workflows
│ └── build.yml
├── .gitignore
├── ContextMenuCustom
├── .gitattributes
├── .gitignore
├── ContextMenuCustom.sln
├── ContextMenuCustom
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Assets
│ │ ├── LockScreenLogo.scale-200.png
│ │ ├── SplashScreen.scale-200.png
│ │ ├── Square150x150Logo.scale-200.png
│ │ ├── Square44x44Logo.scale-200.png
│ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ ├── StoreLogo.png
│ │ └── Wide310x150Logo.scale-200.png
│ ├── ContextMenuCustom.csproj
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ ├── Package.appxmanifest
│ ├── Properties
│ │ └── launchSettings.json
│ └── app.manifest
├── ContextMenuCustomAnyPackage
│ ├── ContextMenuCustomAnyPackage.wapproj
│ ├── Images
│ │ ├── LockScreenLogo.scale-200.png
│ │ ├── SplashScreen.scale-200.png
│ │ ├── Square150x150Logo.scale-200.png
│ │ ├── Square44x44Logo.scale-200.png
│ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ ├── StoreLogo.png
│ │ └── Wide310x150Logo.scale-200.png
│ └── Package.appxmanifest
├── ContextMenuCustomApp
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── AppContext.cs
│ ├── AppVersion.cs
│ ├── Assets
│ │ ├── LockScreenLogo.scale-200.png
│ │ ├── SplashScreen.scale-200.png
│ │ ├── Square150x150Logo.scale-200.png
│ │ ├── Square44x44Logo.scale-200.png
│ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ ├── StoreLogo.png
│ │ └── Wide310x150Logo.scale-200.png
│ ├── Common
│ │ ├── AppDataSettings.cs
│ │ ├── AppLang.cs
│ │ └── Settings.cs
│ ├── ContextMenuCustomApp.csproj
│ ├── Package.appxmanifest
│ ├── Patchs
│ │ └── Patch1.cs
│ ├── Properties
│ │ ├── AssemblyInfo.cs
│ │ └── Default.rd.xml
│ ├── Service
│ │ ├── Common
│ │ │ └── Json
│ │ │ │ └── JsonUtil.cs
│ │ ├── Lang
│ │ │ ├── LangInfo.cs
│ │ │ └── LanguageService.cs
│ │ └── Menu
│ │ │ ├── DirectoryMatchFlagEnum.cs
│ │ │ ├── EnumItem.cs
│ │ │ ├── EnumItemUtil.cs
│ │ │ ├── FileMatchFlagEnum.cs
│ │ │ ├── FilesMatchFlagEnum.cs
│ │ │ ├── MenuItem.cs
│ │ │ ├── MenuService.cs
│ │ │ └── ShowWindowFlagEnum.cs
│ ├── Shell.xaml
│ ├── Shell.xaml.cs
│ ├── Strings
│ │ └── en-US
│ │ │ └── Resources.resw
│ ├── Styles
│ │ └── Button.xaml
│ ├── Themes
│ │ └── Generic.xaml
│ └── View
│ │ ├── Common
│ │ ├── Alert.cs
│ │ ├── BaseModel.cs
│ │ ├── BaseViewModel.cs
│ │ ├── IMessageSupport.cs
│ │ ├── IStatusSupport.cs
│ │ ├── MessageHelper.cs
│ │ ├── PageMessageExt.cs
│ │ └── ThemeHelper.cs
│ │ ├── Controls
│ │ ├── SettingItem.cs
│ │ └── SettingItem.xaml
│ │ ├── Converter
│ │ ├── EqualsVisibilityConverter.cs
│ │ └── VisibilityConverter.cs
│ │ ├── Menu
│ │ ├── DirectoryMatchCheckbox.xaml
│ │ ├── DirectoryMatchCheckbox.xaml.cs
│ │ ├── MenuFileRenameDialog.xaml
│ │ ├── MenuFileRenameDialog.xaml.cs
│ │ ├── MenuPage.xaml
│ │ ├── MenuPage.xaml.cs
│ │ └── MenuPageViewModel.cs
│ │ ├── Setting
│ │ ├── LanguageOverride.xaml
│ │ ├── LanguageOverride.xaml.cs
│ │ ├── SettingPage.xaml
│ │ ├── SettingPage.xaml.cs
│ │ └── SettingViewModel.cs
│ │ └── Tip
│ │ ├── TipDialog.xaml
│ │ └── TipDialog.xaml.cs
├── ContextMenuCustomDevPackage
│ ├── ContextMenuCustomDevPackage.wapproj
│ ├── Images
│ │ ├── LargeTile.scale-100.png
│ │ ├── LargeTile.scale-125.png
│ │ ├── LargeTile.scale-150.png
│ │ ├── LargeTile.scale-200.png
│ │ ├── LargeTile.scale-400.png
│ │ ├── LockScreenLogo.scale-200.png
│ │ ├── SmallTile.scale-100.png
│ │ ├── SmallTile.scale-125.png
│ │ ├── SmallTile.scale-150.png
│ │ ├── SmallTile.scale-200.png
│ │ ├── SmallTile.scale-400.png
│ │ ├── SplashScreen.scale-100.png
│ │ ├── SplashScreen.scale-125.png
│ │ ├── SplashScreen.scale-150.png
│ │ ├── SplashScreen.scale-200.png
│ │ ├── SplashScreen.scale-400.png
│ │ ├── Square150x150Logo.scale-100.png
│ │ ├── Square150x150Logo.scale-125.png
│ │ ├── Square150x150Logo.scale-150.png
│ │ ├── Square150x150Logo.scale-200.png
│ │ ├── Square150x150Logo.scale-400.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-16.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-24.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-256.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-32.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-48.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-16.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-256.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-32.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-48.png
│ │ ├── Square44x44Logo.scale-100.png
│ │ ├── Square44x44Logo.scale-125.png
│ │ ├── Square44x44Logo.scale-150.png
│ │ ├── Square44x44Logo.scale-200.png
│ │ ├── Square44x44Logo.scale-400.png
│ │ ├── Square44x44Logo.targetsize-16.png
│ │ ├── Square44x44Logo.targetsize-24.png
│ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ ├── Square44x44Logo.targetsize-256.png
│ │ ├── Square44x44Logo.targetsize-32.png
│ │ ├── Square44x44Logo.targetsize-48.png
│ │ ├── StoreLogo.backup(1).png
│ │ ├── StoreLogo.backup(2).png
│ │ ├── StoreLogo.backup.png
│ │ ├── StoreLogo.scale-100.png
│ │ ├── StoreLogo.scale-125.png
│ │ ├── StoreLogo.scale-150.png
│ │ ├── StoreLogo.scale-200.png
│ │ ├── StoreLogo.scale-400.png
│ │ ├── Wide310x150Logo.scale-100.png
│ │ ├── Wide310x150Logo.scale-125.png
│ │ ├── Wide310x150Logo.scale-150.png
│ │ ├── Wide310x150Logo.scale-200.png
│ │ └── Wide310x150Logo.scale-400.png
│ └── Package.appxmanifest
├── ContextMenuCustomGithubPackage
│ ├── ContextMenuCustomGithubPackage.wapproj
│ ├── Images
│ │ ├── LargeTile.scale-100.png
│ │ ├── LargeTile.scale-125.png
│ │ ├── LargeTile.scale-150.png
│ │ ├── LargeTile.scale-200.png
│ │ ├── LargeTile.scale-400.png
│ │ ├── LockScreenLogo.scale-200.png
│ │ ├── SmallTile.scale-100.png
│ │ ├── SmallTile.scale-125.png
│ │ ├── SmallTile.scale-150.png
│ │ ├── SmallTile.scale-200.png
│ │ ├── SmallTile.scale-400.png
│ │ ├── SplashScreen.scale-100.png
│ │ ├── SplashScreen.scale-125.png
│ │ ├── SplashScreen.scale-150.png
│ │ ├── SplashScreen.scale-200.png
│ │ ├── SplashScreen.scale-400.png
│ │ ├── Square150x150Logo.scale-100.png
│ │ ├── Square150x150Logo.scale-125.png
│ │ ├── Square150x150Logo.scale-150.png
│ │ ├── Square150x150Logo.scale-200.png
│ │ ├── Square150x150Logo.scale-400.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-16.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-24.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-256.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-32.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-48.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-16.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-256.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-32.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-48.png
│ │ ├── Square44x44Logo.scale-100.png
│ │ ├── Square44x44Logo.scale-125.png
│ │ ├── Square44x44Logo.scale-150.png
│ │ ├── Square44x44Logo.scale-200.png
│ │ ├── Square44x44Logo.scale-400.png
│ │ ├── Square44x44Logo.targetsize-16.png
│ │ ├── Square44x44Logo.targetsize-24.png
│ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ ├── Square44x44Logo.targetsize-256.png
│ │ ├── Square44x44Logo.targetsize-32.png
│ │ ├── Square44x44Logo.targetsize-48.png
│ │ ├── StoreLogo.backup(1).png
│ │ ├── StoreLogo.backup.png
│ │ ├── StoreLogo.scale-100.png
│ │ ├── StoreLogo.scale-125.png
│ │ ├── StoreLogo.scale-150.png
│ │ ├── StoreLogo.scale-200.png
│ │ ├── StoreLogo.scale-400.png
│ │ ├── Wide310x150Logo.scale-100.png
│ │ ├── Wide310x150Logo.scale-125.png
│ │ ├── Wide310x150Logo.scale-150.png
│ │ ├── Wide310x150Logo.scale-200.png
│ │ └── Wide310x150Logo.scale-400.png
│ └── Package.appxmanifest
├── ContextMenuCustomHost
│ ├── BaseExplorerCommand.cpp
│ ├── BaseExplorerCommand.h
│ ├── ContextMenuCustomHost.rc
│ ├── ContextMenuCustomHost.vcxproj
│ ├── CustomExplorerCommand.cpp
│ ├── CustomExplorerCommand.h
│ ├── CustomExplorerCommandEnum.cpp
│ ├── CustomExplorerCommandEnum.h
│ ├── CustomSubExplorerCommand.cpp
│ ├── CustomSubExplorerCommand.h
│ ├── PathHelper.hpp
│ ├── Source.def
│ ├── dllmain.cpp
│ ├── framework.h
│ ├── icon1.ico
│ ├── icon2.ico
│ ├── packages.config
│ ├── pch.cpp
│ ├── pch.h
│ └── resource.h
└── ContextMenuCustomPackage
│ ├── ContextMenuCustomPackage.wapproj
│ ├── Images
│ ├── LargeTile.scale-100.png
│ ├── LargeTile.scale-125.png
│ ├── LargeTile.scale-150.png
│ ├── LargeTile.scale-200.png
│ ├── LargeTile.scale-400.png
│ ├── LockScreenLogo.scale-200.png
│ ├── SmallTile.scale-100.png
│ ├── SmallTile.scale-125.png
│ ├── SmallTile.scale-150.png
│ ├── SmallTile.scale-200.png
│ ├── SmallTile.scale-400.png
│ ├── SplashScreen.scale-100.png
│ ├── SplashScreen.scale-125.png
│ ├── SplashScreen.scale-150.png
│ ├── SplashScreen.scale-200.png
│ ├── SplashScreen.scale-400.png
│ ├── Square150x150Logo.scale-100.png
│ ├── Square150x150Logo.scale-125.png
│ ├── Square150x150Logo.scale-150.png
│ ├── Square150x150Logo.scale-200.png
│ ├── Square150x150Logo.scale-400.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-16.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-24.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-256.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-32.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-48.png
│ ├── Square44x44Logo.altform-unplated_targetsize-16.png
│ ├── Square44x44Logo.altform-unplated_targetsize-256.png
│ ├── Square44x44Logo.altform-unplated_targetsize-32.png
│ ├── Square44x44Logo.altform-unplated_targetsize-48.png
│ ├── Square44x44Logo.scale-100.png
│ ├── Square44x44Logo.scale-125.png
│ ├── Square44x44Logo.scale-150.png
│ ├── Square44x44Logo.scale-200.png
│ ├── Square44x44Logo.scale-400.png
│ ├── Square44x44Logo.targetsize-16.png
│ ├── Square44x44Logo.targetsize-24.png
│ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ ├── Square44x44Logo.targetsize-256.png
│ ├── Square44x44Logo.targetsize-32.png
│ ├── Square44x44Logo.targetsize-48.png
│ ├── StoreLogo.backup.png
│ ├── StoreLogo.scale-100.png
│ ├── StoreLogo.scale-125.png
│ ├── StoreLogo.scale-150.png
│ ├── StoreLogo.scale-200.png
│ ├── StoreLogo.scale-400.png
│ ├── Wide310x150Logo.scale-100.png
│ ├── Wide310x150Logo.scale-125.png
│ ├── Wide310x150Logo.scale-150.png
│ ├── Wide310x150Logo.scale-200.png
│ └── Wide310x150Logo.scale-400.png
│ └── Package.appxmanifest
├── LICENSE
├── README.md
├── build.md
├── install.md
├── menuSample
├── Calculate Md5 By PowerShell.json
├── Compress By 7z.json
├── Debug Echo 2.json
├── Debug Echo 3.json
├── Debug Echo.json
├── Echo path.json
├── Extract by 7z (only v3.9+).json
├── Extract by 7z.json
├── Install Apk By Adb.json
├── Open In Explorer.json
├── Open In Windows Photo Viewer.json
├── Open TortoiseGit Sync Window.json
├── Open With Notepad.json
├── Open With VScode.json
├── Push File By Adb.json
└── Send Image To Wsa By Adb.json
├── privacy.md
└── screenshots
├── menu.png
└── samples.png
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: build packages
2 | #https://learn.microsoft.com/en-us/windows/apps/package-and-deploy/ci-for-winui3?pivots=winui3-packaged-csharp
3 |
4 | on:
5 | workflow_dispatch:
6 |
7 | env:
8 | BUILD_CONFIGURATION: Release
9 |
10 | jobs:
11 | build:
12 | strategy:
13 | matrix:
14 | platform: [x64, ARM64]
15 | package: [CMC_GITHUB_RELEASE, CMC_DEV_RELEASE, CMC_ANY]
16 |
17 | runs-on: windows-latest
18 |
19 | steps:
20 | - uses: actions/checkout@v4
21 | with:
22 | ref: dev-2024
23 |
24 | - name: Add MSBuild to PATH
25 | uses: microsoft/setup-msbuild@v2
26 |
27 | - name: Decode Cert
28 | working-directory: ${{env.GITHUB_WORKSPACE}}
29 | run: |
30 | $pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.Base64_Encoded_Pfx }}")
31 | $certificatePath = "${{github.workspace}}\GitHubActionsWorkflow.pfx"
32 | [IO.File]::WriteAllBytes("$certificatePath", $pfx_cert_byte)
33 |
34 | - name: Restore NuGet packages
35 | working-directory: ${{env.GITHUB_WORKSPACE}}
36 | run: nuget.exe restore ContextMenuCustom -SolutionDirectory ContextMenuCustom
37 |
38 | - name: Restore NuGet packages
39 | working-directory: ${{env.GITHUB_WORKSPACE}}
40 | run: |
41 | msbuild -t:restore ContextMenuCustom\ContextMenuCustomApp\ContextMenuCustomApp.csproj
42 |
43 | # build package
44 | - name: Build ContextMenuCustomHost
45 | working-directory: ${{env.GITHUB_WORKSPACE}}
46 | run: msbuild ContextMenuCustom\ContextMenuCustomHost\ContextMenuCustomHost.vcxproj /m /p:configuration="release" /p:SolutionDir=../ /p:platform="${{ matrix.platform }}" /p:packageType="${{ matrix.package }}"
47 |
48 | - name: Build ContextMenuCustomGithubPackage
49 | if: matrix.package == 'CMC_GITHUB_RELEASE'
50 | working-directory: ${{env.GITHUB_WORKSPACE}}
51 | run: msbuild ContextMenuCustom\ContextMenuCustomGithubPackage\ContextMenuCustomGithubPackage.wapproj /m /p:configuration="release" /p:platform="${{ matrix.platform }}" /p:AppxBundlePlatforms="${{ matrix.platform }}" /p:UapAppxPackageBuildMode=SideloadOnly /p:PackageCertificateKeyFile="${{github.workspace}}\GitHubActionsWorkflow.pfx" /p:PackageCertificatePassword=${{ secrets.Pfx_Key }} /p:AppxPackageDir="${{github.workspace}}\Packages\"
52 |
53 | - name: Build ContextMenuCustomDevPackage
54 | if: matrix.package == 'CMC_DEV_RELEASE'
55 | working-directory: ${{env.GITHUB_WORKSPACE}}
56 | run: msbuild ContextMenuCustom\ContextMenuCustomDevPackage\ContextMenuCustomDevPackage.wapproj /m /p:configuration="release" /p:platform="${{ matrix.platform }}" /p:AppxBundlePlatforms="${{ matrix.platform }}" /p:UapAppxPackageBuildMode=SideloadOnly /p:PackageCertificateKeyFile="${{github.workspace}}\GitHubActionsWorkflow.pfx" /p:PackageCertificatePassword=${{ secrets.Pfx_Key }} /p:AppxPackageDir="${{github.workspace}}\Packages\"
57 |
58 | - name: Build ContextMenuCustomAnyPackage
59 | if: matrix.package == 'CMC_ANY'
60 | working-directory: ${{env.GITHUB_WORKSPACE}}
61 | run: msbuild ContextMenuCustom\ContextMenuCustomAnyPackage\ContextMenuCustomAnyPackage.wapproj /m /p:configuration="release" /p:platform="${{ matrix.platform }}" /p:AppxBundlePlatforms="${{ matrix.platform }}" /p:UapAppxPackageBuildMode=SideloadOnly /p:PackageCertificateKeyFile="${{github.workspace}}\GitHubActionsWorkflow.pfx" /p:PackageCertificatePassword=${{ secrets.Pfx_Key }} /p:AppxPackageDir="${{github.workspace}}\Packages\"
62 |
63 |
64 | - name: Remove Cert
65 | run: Remove-Item -path "${{github.workspace}}\GitHubActionsWorkflow.pfx"
66 |
67 |
68 | - name: Upload Packages
69 | uses: actions/upload-artifact@v4
70 | with:
71 | name: ContextMenuCustom-${{ matrix.package }}-${{ matrix.platform }}
72 | path: |
73 | ${{github.workspace}}\Packages\**\*.msixbundle
74 | ${{github.workspace}}\Packages\**\*.msix
75 | ${{github.workspace}}\Packages\**\*.cer
76 | ${{github.workspace}}\Packages\**\Dependencies\${{ matrix.platform }}\*
77 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ################################################################################
2 | # 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。
3 | ################################################################################
4 |
5 | /7zContextMenu/7zContextMenuHost/CustomeExplorerCommand.zip
6 | /ContextMenuCustom/build.bat
7 | /build.bat
8 | /ContextMenuCustom/ContextMenuCustomHost/CMakeLists.txt
9 |
--------------------------------------------------------------------------------
/ContextMenuCustom/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/App.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/App.xaml.cs:
--------------------------------------------------------------------------------
1 | // Copyright (c) Microsoft Corporation and Contributors.
2 | // Licensed under the MIT License.
3 |
4 | using Microsoft.UI.Xaml;
5 | using Microsoft.UI.Xaml.Controls;
6 | using Microsoft.UI.Xaml.Controls.Primitives;
7 | using Microsoft.UI.Xaml.Data;
8 | using Microsoft.UI.Xaml.Input;
9 | using Microsoft.UI.Xaml.Media;
10 | using Microsoft.UI.Xaml.Navigation;
11 | using Microsoft.UI.Xaml.Shapes;
12 | using System;
13 | using System.Collections.Generic;
14 | using System.IO;
15 | using System.Linq;
16 | using System.Runtime.InteropServices.WindowsRuntime;
17 | using Windows.ApplicationModel;
18 | using Windows.ApplicationModel.Activation;
19 | using Windows.Foundation;
20 | using Windows.Foundation.Collections;
21 |
22 | // To learn more about WinUI, the WinUI project structure,
23 | // and more about our project templates, see: http://aka.ms/winui-project-info.
24 |
25 | namespace ContextMenuCustom
26 | {
27 | ///
28 | /// Provides application-specific behavior to supplement the default Application class.
29 | ///
30 | public partial class App : Application
31 | {
32 | ///
33 | /// Initializes the singleton application object. This is the first line of authored code
34 | /// executed, and as such is the logical equivalent of main() or WinMain().
35 | ///
36 | public App()
37 | {
38 | this.InitializeComponent();
39 | }
40 |
41 | ///
42 | /// Invoked when the application is launched.
43 | ///
44 | /// Details about the launch request and process.
45 | protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
46 | {
47 | m_window = new MainWindow();
48 | m_window.Activate();
49 | }
50 |
51 | private Window m_window;
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustom/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustom/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustom/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustom/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustom/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/Assets/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustom/Assets/StoreLogo.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustom/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/ContextMenuCustom.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | WinExe
4 | net6.0-windows10.0.19041.0
5 | 10.0.17763.0
6 | ContextMenuCustom
7 | app.manifest
8 | x86;x64;ARM64
9 | win10-x86;win10-x64;win10-arm64
10 | win10-$(Platform).pubxml
11 | true
12 | true
13 | False
14 | True
15 | 5DE7B5A9B8FD14785C7F31D7D850D51F857DEC2C
16 | SHA256
17 | True
18 | False
19 | True
20 | Never
21 | 0
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | PreserveNewest
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
51 |
52 |
53 |
54 |
55 |
60 |
61 | true
62 |
63 |
64 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/MainWindow.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/MainWindow.xaml.cs:
--------------------------------------------------------------------------------
1 | // Copyright (c) Microsoft Corporation and Contributors.
2 | // Licensed under the MIT License.
3 |
4 | using Microsoft.UI.Xaml;
5 | using Microsoft.UI.Xaml.Controls;
6 | using Microsoft.UI.Xaml.Controls.Primitives;
7 | using Microsoft.UI.Xaml.Data;
8 | using Microsoft.UI.Xaml.Input;
9 | using Microsoft.UI.Xaml.Media;
10 | using Microsoft.UI.Xaml.Navigation;
11 | using System;
12 | using System.Collections.Generic;
13 | using System.IO;
14 | using System.Linq;
15 | using System.Runtime.InteropServices.WindowsRuntime;
16 | using System.Threading.Tasks;
17 | using Windows.Foundation;
18 | using Windows.Foundation.Collections;
19 | using Windows.Storage;
20 | using Windows.System;
21 |
22 | // To learn more about WinUI, the WinUI project structure,
23 | // and more about our project templates, see: http://aka.ms/winui-project-info.
24 |
25 | namespace ContextMenuCustom
26 | {
27 | ///
28 | /// An empty window that can be used on its own or navigated to within a Frame.
29 | ///
30 | public sealed partial class MainWindow : Window
31 | {
32 | public MainWindow()
33 | {
34 | this.InitializeComponent();
35 | }
36 |
37 | private async void myButton_Click(object sender, RoutedEventArgs e)
38 | {
39 |
40 | var folder = await GetMenusFolderAsync();
41 | _ = await Launcher.LaunchFolderAsync(folder);
42 | }
43 |
44 | private const string MenusFolderName = "custom_commands";
45 | public async Task GetMenusFolderAsync()
46 | {
47 | var item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(MenusFolderName);
48 | if (item is StorageFile)
49 | {
50 | await item.DeleteAsync();
51 | }
52 | return await ApplicationData.Current.LocalFolder.CreateFolderAsync(MenusFolderName, CreationCollisionOption.OpenIfExists);
53 | }
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
14 |
15 |
19 |
20 |
21 | ContextMenuCustom
22 | ikas
23 | Assets\StoreLogo.png
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
39 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "profiles": {
3 | "ContextMenuCustom (Package)": {
4 | "commandName": "MsixPackage"
5 | },
6 | "ContextMenuCustom (Unpackaged)": {
7 | "commandName": "Project"
8 | }
9 | }
10 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustom/app.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
21 | true/PM
22 | PerMonitorV2, PerMonitor
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomAnyPackage/ContextMenuCustomAnyPackage.wapproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 15.0
5 |
6 |
7 |
8 | Debug
9 | x64
10 |
11 |
12 | Release
13 | x64
14 |
15 |
16 | Debug
17 | ARM64
18 |
19 |
20 | Release
21 | ARM64
22 |
23 |
24 |
25 | $(MSBuildExtensionsPath)\Microsoft\DesktopBridge\
26 |
27 |
28 |
29 | 76142e54-9126-49a1-9be3-4019ec96d42f
30 | 10.0.22621.0
31 | 10.0.22000.0
32 | zh-CN
33 | True
34 | $(NoWarn);NU1702
35 | 948914CC24B29D89B72470F7B0C2D92F1B2C550A
36 | ..\ContextMenuCustomApp\ContextMenuCustomApp.csproj
37 |
38 |
39 | en-US
40 |
41 |
42 | en-US
43 |
44 |
45 | en-US
46 |
47 |
48 | en-US
49 |
50 |
51 |
52 | Designer
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/StoreLogo.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomAnyPackage/Images/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomAnyPackage/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
15 |
19 |
20 |
21 | Custom Context Menu (Any)
22 | touchwp
23 | Images\StoreLogo.png
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
39 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/App.xaml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | #08000000
15 | #40FFFFFF
16 | #08000000
17 |
18 |
19 |
20 |
21 |
22 |
23 | #FF0063b1
24 |
25 | 1
26 |
27 |
28 |
29 | #15000000
30 | #2C3A3A3A
31 | #19000000
32 |
33 |
34 |
35 |
36 |
37 |
38 | #FF5fb2f2
39 |
40 | 1
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using ContextMenuCustomApp.Common;
2 | using ContextMenuCustomApp.View.Common;
3 | using System;
4 | using Windows.ApplicationModel;
5 | using Windows.ApplicationModel.Activation;
6 | using Windows.ApplicationModel.DataTransfer;
7 | using Windows.UI.Popups;
8 | using Windows.UI.ViewManagement;
9 | using Windows.UI.Xaml;
10 | using Windows.UI.Xaml.Controls;
11 | using Windows.UI.Xaml.Navigation;
12 |
13 | namespace ContextMenuCustomApp
14 | {
15 | sealed partial class App
16 | {
17 | public App()
18 | {
19 | AppContext.Current.Init();
20 | this.InitializeComponent();
21 | this.Suspending += OnSuspending;
22 | Patchs.Patch1.Run();
23 | }
24 |
25 | protected override void OnLaunched(LaunchActivatedEventArgs e)
26 | {
27 | AppContext.Current.WaitAll();
28 |
29 | ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.Auto;
30 |
31 | Frame rootFrame = Window.Current.Content as Frame;
32 | if (rootFrame == null)
33 | {
34 | rootFrame = new Frame();
35 | rootFrame.NavigationFailed += OnNavigationFailed;
36 | if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
37 | {
38 | }
39 | Window.Current.Content = rootFrame;
40 | SetTheme();
41 | }
42 |
43 | if (e.PrelaunchActivated == false)
44 | {
45 | if (rootFrame.Content == null)
46 | {
47 | rootFrame.Navigate(typeof(Shell), e.Arguments);
48 | }
49 | Window.Current.Activate();
50 | }
51 | }
52 |
53 | void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
54 | {
55 | throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
56 | }
57 |
58 | private void OnSuspending(object sender, SuspendingEventArgs e)
59 | {
60 | var deferral = e.SuspendingOperation.GetDeferral();
61 | deferral.Complete();
62 | }
63 |
64 | protected override async void OnActivated(IActivatedEventArgs args)
65 | {
66 | base.OnActivated(args);
67 | if (args.Kind == ActivationKind.CommandLineLaunch)
68 | {
69 | if (args is CommandLineActivatedEventArgs commandLineActivatedEventArgs)
70 | {
71 | var arguments = commandLineActivatedEventArgs.Operation.Arguments;
72 | var dialog = new MessageDialog(arguments);
73 | dialog.Commands.Add(new UICommand("Copy To Clipboard", (e) => {
74 | var dataPackage = new DataPackage
75 | {
76 | RequestedOperation = DataPackageOperation.Copy
77 | };
78 | dataPackage.SetText(arguments);
79 | Clipboard.SetContent(dataPackage);
80 | }));
81 | dialog.Commands.Add(new UICommand("Close"));
82 | _ = await dialog.ShowAsync();
83 | }
84 | }
85 | }
86 |
87 | public void SetTheme()
88 | {
89 | ThemeHelper.Initialize();
90 | var themeType = Settings.Default.ThemeType;
91 |
92 | if (themeType == 1)
93 | {
94 | ThemeHelper.RootTheme = ElementTheme.Dark;
95 | }
96 | else if (themeType == 2)
97 | {
98 | ThemeHelper.RootTheme = ElementTheme.Light;
99 | }
100 | else
101 | {
102 | ThemeHelper.RootTheme = ElementTheme.Default;
103 | }
104 |
105 | }
106 |
107 | }
108 | }
109 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/AppContext.cs:
--------------------------------------------------------------------------------
1 | using ContextMenuCustomApp.Common;
2 | using ContextMenuCustomApp.Service.Lang;
3 | using ContextMenuCustomApp.Service.Menu;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Threading.Tasks;
7 |
8 | namespace ContextMenuCustomApp
9 | {
10 | public sealed class AppContext
11 | {
12 | private Task _task;
13 | public AppLang AppLang { get; private set; }
14 | public Settings AppSetting { get; } = Settings.Default;
15 | public Dictionary Services { get; private set; } = new Dictionary();
16 |
17 | public void Init()
18 | {
19 | _task = Task.Run(async () =>
20 | {
21 | var languageService = new LanguageService();
22 | Services.Add(typeof(LanguageService), languageService);
23 | Services.Add(typeof(MenuService), new MenuService());
24 |
25 | AppLang = await languageService.LoadAsync().ConfigureAwait(false);
26 | });
27 | }
28 |
29 | public void WaitAll()
30 | {
31 | if (_task?.IsCompleted == false)
32 | {
33 | _task.Wait();
34 | }
35 | _task = null;
36 | }
37 |
38 | public T GetService()
39 | {
40 | return (T)Services[typeof(T)];
41 | }
42 |
43 | #region singleton
44 | public static readonly AppContext Current;
45 | static AppContext()
46 | {
47 | Current = new AppContext();
48 | }
49 | #endregion
50 | }
51 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/AppVersion.cs:
--------------------------------------------------------------------------------
1 | using Windows.ApplicationModel;
2 |
3 | namespace ContextMenuCustomApp
4 | {
5 | public static class AppVersion
6 | {
7 | public static int Current()
8 | {
9 | var version = Package.Current.Id.Version;
10 | return version.Major * 1000 + version.Minor;
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomApp/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomApp/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomApp/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomApp/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Assets/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomApp/Assets/StoreLogo.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomApp/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Common/AppDataSettings.cs:
--------------------------------------------------------------------------------
1 | using Windows.Storage;
2 |
3 | namespace ContextMenuCustomApp.Common
4 | {
5 | public class AppDataSettings
6 | {
7 | private readonly ApplicationDataContainer _container;
8 |
9 | public AppDataSettings(string typeName)
10 | {
11 | var localSettings = ApplicationData.Current.LocalSettings;
12 | _container = localSettings.CreateContainer(typeName, ApplicationDataCreateDisposition.Always);
13 | }
14 |
15 | public AppDataSettings()
16 | {
17 | _container = ApplicationData.Current.LocalSettings;
18 | }
19 |
20 | public T GetValue(string propertyName, T defaultValue = default)
21 | {
22 | if (string.IsNullOrEmpty(propertyName))
23 | {
24 | return defaultValue;
25 | }
26 |
27 | var value = _container.Values[propertyName];
28 | if (null != value)
29 | {
30 | return (T)value;
31 | }
32 |
33 | return defaultValue;
34 | }
35 |
36 | public bool SetValue(string propertyName, T value = default)
37 | {
38 | if (string.IsNullOrEmpty(propertyName))
39 | {
40 | return false;
41 | }
42 |
43 | _container.Values[propertyName] = value;
44 | return true;
45 | }
46 | }
47 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Common/Settings.cs:
--------------------------------------------------------------------------------
1 | namespace ContextMenuCustomApp.Common
2 | {
3 | public class Settings
4 | {
5 | private static readonly AppDataSettings MainSettingDao;
6 | private static readonly AppDataSettings DllSettingDao;
7 |
8 | public static readonly Settings Default;
9 | static Settings()
10 | {
11 | MainSettingDao = new AppDataSettings("app-settings");
12 | DllSettingDao = new AppDataSettings();
13 | Default = new Settings();
14 | }
15 |
16 | public bool CacheEnabled
17 | {
18 | get => MainSettingDao.GetValue(nameof(CacheEnabled), false);
19 | set => MainSettingDao.SetValue(nameof(CacheEnabled), value);
20 | }
21 |
22 | public int PatchVersion
23 | {
24 | get => MainSettingDao.GetValue(nameof(PatchVersion), 0);
25 | set => MainSettingDao.SetValue(nameof(PatchVersion), value);
26 | }
27 |
28 | public int AppVersion
29 | {
30 | get => MainSettingDao.GetValue(nameof(AppVersion), 0);
31 | set => MainSettingDao.SetValue(nameof(AppVersion), value);
32 | }
33 |
34 | public string AppLang
35 | {
36 | get => MainSettingDao.GetValue(nameof(AppLang), "");
37 | set => MainSettingDao.SetValue(nameof(AppLang), value);
38 | }
39 |
40 | public int ThemeType
41 | {
42 | get => MainSettingDao.GetValue(nameof(ThemeType), 0);
43 | set => MainSettingDao.SetValue(nameof(ThemeType), value);
44 | }
45 |
46 | public string MenuName
47 | {
48 | get => DllSettingDao.GetValue("Custom_Menu_Name", "Open With");
49 | set => DllSettingDao.SetValue("Custom_Menu_Name", value);
50 | }
51 |
52 | public string MenuDarkIcon
53 | {
54 | get => DllSettingDao.GetValue("Custom_Menu_Dark_Icon", string.Empty);
55 | set => DllSettingDao.SetValue("Custom_Menu_Dark_Icon", value);
56 | }
57 |
58 | public string MenuLightIcon
59 | {
60 | get => DllSettingDao.GetValue("Custom_Menu_Light_Icon", string.Empty);
61 | set => DllSettingDao.SetValue("Custom_Menu_Light_Icon", value);
62 | }
63 |
64 | public bool EnableDebug
65 | {
66 | get => DllSettingDao.GetValue("Custom_Menu_Enable_Debug", false);
67 | set => DllSettingDao.SetValue("Custom_Menu_Enable_Debug", value);
68 | }
69 |
70 | public T GetValue(string key, T defaultValue = default)
71 | {
72 | return MainSettingDao.GetValue(key, defaultValue);
73 | }
74 |
75 | public T SetValue(string key, T value)
76 | {
77 | MainSettingDao.SetValue(key, value);
78 | return value;
79 | }
80 |
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
13 |
17 |
18 |
19 |
20 |
21 | Custom Context Menu
22 | ikas
23 | Assets\StoreLogo.png
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
38 |
44 |
45 |
46 |
47 |
48 |
58 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Patchs/Patch1.cs:
--------------------------------------------------------------------------------
1 | using ContextMenuCustomApp.Common;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using Windows.ApplicationModel;
8 | using Windows.Storage;
9 |
10 | namespace ContextMenuCustomApp.Patchs
11 | {
12 | public class Patch1
13 | {
14 | public static void Run()
15 | {
16 | var appVersion = AppVersion.Current();
17 | var patchVersion = Settings.Default.PatchVersion;
18 | if (patchVersion > 0 && patchVersion < 2003)
19 | {
20 | FixCacheSetting();
21 | }
22 |
23 | if (patchVersion != appVersion)
24 | {
25 | Settings.Default.PatchVersion = appVersion;
26 | }
27 | }
28 |
29 | private static void FixCacheSetting()
30 | {
31 | try
32 | {
33 | var cacheTimeValue = ApplicationData.Current.LocalSettings.Values["Cache_Time"];
34 | if (cacheTimeValue is string cacheTime)
35 | {
36 | Settings.Default.CacheEnabled = !string.IsNullOrEmpty(cacheTime);
37 | }
38 | }
39 | catch (Exception )
40 | {
41 | // ignored
42 | }
43 | }
44 |
45 | }
46 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的一般信息由以下
6 | // 控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("ContextMenuCustomApp")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("ikas")]
12 | [assembly: AssemblyProduct("ContextMenuCustomApp")]
13 | [assembly: AssemblyCopyright("ikas@2021")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // 程序集的版本信息由下列四个值组成:
18 | //
19 | // 主版本
20 | // 次版本
21 | // 生成号
22 | // 修订号
23 | //
24 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
25 | //通过使用 "*",如下所示:
26 | // [assembly: AssemblyVersion("1.0.*")]
27 | [assembly: AssemblyVersion("1.0.0.0")]
28 | [assembly: AssemblyFileVersion("1.0.0.0")]
29 | [assembly: ComVisible(false)]
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Properties/Default.rd.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Service/Common/Json/JsonUtil.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json.Serialization;
2 | using Newtonsoft.Json;
3 |
4 | namespace ContextMenuCustomApp.Service.Common.Json
5 | {
6 | public static class JsonUtil
7 | {
8 | private static readonly JsonSerializerSettings JsonSerializerSettings = new JsonSerializerSettings
9 | {
10 | ContractResolver = new DefaultContractResolver
11 | {
12 | NamingStrategy = new CamelCaseNamingStrategy(),
13 | }
14 | };
15 |
16 | public static string Serialize(object obj, bool indented = false)
17 | {
18 | var formatting = indented ? Formatting.Indented : Formatting.None;
19 | return JsonConvert.SerializeObject(obj, formatting, JsonSerializerSettings);
20 | }
21 |
22 | public static T Deserialize(string json)
23 | {
24 | return JsonConvert.DeserializeObject(json, JsonSerializerSettings);
25 | }
26 |
27 | public static void Populate(string json, object value)
28 | {
29 | JsonConvert.PopulateObject(json, value, JsonSerializerSettings);
30 | }
31 |
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Service/Lang/LangInfo.cs:
--------------------------------------------------------------------------------
1 | using Windows.Globalization;
2 |
3 | namespace ContextMenuCustomApp.Service.Lang
4 | {
5 | public class LangInfo
6 | {
7 | public string Name { get; set; }
8 | public string FileName { get; set; }
9 | public bool IsDefault { get; set; }
10 | public string DisplayName { get; set; }
11 |
12 | public static LangInfo Create(string name, string fileName, bool isDefault)
13 | {
14 | var language = new Language(name);
15 | var langInfo = new LangInfo()
16 | {
17 | Name = name,
18 | FileName = fileName,
19 | IsDefault = isDefault,
20 | DisplayName = language.DisplayName
21 | };
22 | return langInfo;
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Service/Lang/LanguageService.cs:
--------------------------------------------------------------------------------
1 | using ContextMenuCustomApp.Common;
2 | using ContextMenuCustomApp.Service.Common.Json;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.IO;
6 | using System.Threading.Tasks;
7 | using Windows.Globalization;
8 | using Windows.Storage;
9 |
10 | namespace ContextMenuCustomApp.Service.Lang
11 | {
12 | public class LanguageService
13 | {
14 | private const string LanguagesFolderName = "languages";
15 |
16 | private readonly List _defaultLanguages = new List() { "en-US" };
17 |
18 | public async Task LoadAsync()
19 | {
20 | string langFileName = Settings.Default.AppLang;
21 |
22 | //default lang
23 | if (string.IsNullOrEmpty(langFileName) || !langFileName.EndsWith(".json"))
24 | {
25 | return new AppLang();
26 | }
27 |
28 | //custom lang
29 | try
30 | {
31 | return await LoadCustomAsync(langFileName);
32 | }
33 | catch (Exception)
34 | {
35 | return new AppLang();
36 | }
37 | }
38 |
39 | public Task LoadDefualtAsync(string langFileName = null)
40 | {
41 | return Task.FromResult(new AppLang());
42 | }
43 |
44 | public Task LoadCustomAsync(string langFileName)
45 | {
46 | return Task.Run(async () =>
47 | {
48 | var langFile = await GetCustomLanguageFileAsync(langFileName);
49 | var langContent = await FileIO.ReadTextAsync(langFile);
50 | return JsonUtil.Deserialize(langContent);
51 | });
52 | }
53 |
54 | public async Task> QueryLangList()
55 | {
56 | return await Task.Run(async () =>
57 | {
58 | var langInfoList = new List();
59 | _defaultLanguages.ForEach(name => langInfoList.Add(LangInfo.Create(name, name, true)));
60 |
61 | var langsFolder = await GetCustomLanguagesFolderAsync();
62 | var langFiles = await langsFolder.GetFilesAsync();
63 | foreach (var file in langFiles)
64 | {
65 | var fileName = file.Name;
66 | if (fileName.EndsWith(".json"))
67 | {
68 | var name = Path.GetFileNameWithoutExtension(fileName);
69 | LangInfo langInfo = LangInfo.Create(name, fileName, false);
70 | langInfoList.Add(langInfo);
71 | }
72 | }
73 | return langInfoList;
74 | });
75 | }
76 |
77 | public async Task GetCustomLanguagesFolderAsync()
78 | {
79 | var item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(LanguagesFolderName);
80 | if (item is StorageFolder storageFolder)
81 | {
82 | return storageFolder;
83 | }
84 | else
85 | {
86 | StorageFolder folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(LanguagesFolderName, CreationCollisionOption.OpenIfExists);
87 | return folder;
88 | }
89 | }
90 |
91 | public async Task GetCustomLanguageFileAsync(string langFileName)
92 | {
93 | string path = Path.Combine(AppDataPaths.GetDefault().LocalAppData, LanguagesFolderName, langFileName);
94 | StorageFile file = await StorageFile.GetFileFromPathAsync(path);
95 | return file;
96 | }
97 |
98 | public void UpdateLangSetting(LangInfo langInfo)
99 | {
100 | Settings.Default.AppLang = langInfo.FileName;
101 | ApplicationLanguages.PrimaryLanguageOverride = langInfo.Name;
102 | }
103 |
104 | }
105 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Service/Menu/DirectoryMatchFlagEnum.cs:
--------------------------------------------------------------------------------
1 | namespace ContextMenuCustomApp.Service.Menu
2 | {
3 | public enum DirectoryMatchFlagEnum
4 | {
5 | None = 0,
6 | Directory = 0b0001,
7 | Background = 0b0010,
8 | Desktop = 0b0100,
9 | Drive = 0b1000
10 | }
11 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Service/Menu/EnumItem.cs:
--------------------------------------------------------------------------------
1 | namespace ContextMenuCustomApp.Service.Menu
2 | {
3 | public class EnumItem
4 | {
5 | public string Label { get; set; }
6 | public int Value { get; set; }
7 | }
8 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Service/Menu/EnumItemUtil.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Collections.Immutable;
4 | using System.ComponentModel;
5 | using System.Linq;
6 |
7 | namespace ContextMenuCustomApp.Service.Menu
8 | {
9 | public static class EnumItemUtil
10 | {
11 | public static IReadOnlyList GetEnumItems() where T : struct
12 | {
13 | if (!typeof(T).IsEnum)
14 | {
15 | throw new ArgumentException("T must be an enumerated type");
16 | }
17 |
18 | return Enum.GetValues(typeof(T))
19 | .Cast()
20 | .Select(x => new EnumItem
21 | {
22 | Label = x.GetType().GetField(x.ToString()).GetCustomAttributes(false).OfType().FirstOrDefault()?.Description ?? x.ToString(),
23 | Value = Convert.ToInt32(x)
24 | })
25 | .ToImmutableList();
26 | }
27 | }
28 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Service/Menu/FileMatchFlagEnum.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 |
3 | namespace ContextMenuCustomApp.Service.Menu
4 | {
5 | public enum FileMatchFlagEnum
6 | {
7 | [DescriptionAttribute("Off")]
8 | None = 0,
9 | [DescriptionAttribute("Extension Like")]
10 | Ext = 1,
11 | [DescriptionAttribute("Name Regex")]
12 | Regex = 2,
13 | [DescriptionAttribute("Extension")]
14 | ExtList = 3,
15 | [DescriptionAttribute("All")]
16 | All = 4,
17 | }
18 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Service/Menu/FilesMatchFlagEnum.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 |
3 | namespace ContextMenuCustomApp.Service.Menu
4 | {
5 | public enum FilesMatchFlagEnum
6 | {
7 | [DescriptionAttribute("Off")]
8 | None = 0,
9 | [DescriptionAttribute("Each")]
10 | Each = 1,
11 | [DescriptionAttribute("Join")]
12 | Join = 2,
13 | }
14 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Service/Menu/MenuItem.cs:
--------------------------------------------------------------------------------
1 | using ContextMenuCustomApp.View.Common;
2 | using Newtonsoft.Json;
3 | using Newtonsoft.Json.Serialization;
4 | using Windows.Storage;
5 |
6 | namespace ContextMenuCustomApp.Service.Menu
7 | {
8 | [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy), ItemNullValueHandling = NullValueHandling.Ignore)]
9 | public class MenuItem : BaseModel
10 | {
11 | [JsonIgnore] public StorageFile File { get; set; }
12 |
13 | [JsonIgnore]
14 | public string FileName
15 | {
16 | get => File?.Name;
17 | set
18 | {
19 | OnPropertyChanged(nameof(FileName));
20 | }
21 | }
22 |
23 | private bool _enabled;
24 | [JsonIgnore]
25 | public bool Enabled
26 | {
27 | get => _enabled;
28 | set => SetProperty(ref _enabled, value);
29 | }
30 |
31 | private string _title;
32 | private string _exe;
33 | private string _param;
34 | private string _icon;
35 | private string _iconDark;
36 | private int _index;
37 |
38 | private bool _acceptDirectory;
39 | private int _acceptDirectoryFlag;
40 |
41 | private bool _acceptFile;
42 | private int _acceptFileFlag;
43 | private string _acceptExts;
44 | private string _acceptFileRegex;
45 |
46 | private string _pathDelimiter;
47 | private string _paramForMultipleFiles;
48 | private int _acceptMultipleFilesFlag;
49 | private int _showWindowFlag;
50 | private string _workingDirectory;
51 |
52 | public string Title
53 | {
54 | get => _title;
55 | set => SetProperty(ref _title, value);
56 | }
57 |
58 | public string Exe
59 | {
60 | get => _exe;
61 | set => SetProperty(ref _exe, value);
62 | }
63 |
64 | public string Param
65 | {
66 | get => _param;
67 | set => SetProperty(ref _param, value);
68 | }
69 |
70 | public string Icon
71 | {
72 | get => _icon;
73 | set => SetProperty(ref _icon, value);
74 | }
75 |
76 | public string IconDark
77 | {
78 | get => _iconDark;
79 | set => SetProperty(ref _iconDark, value);
80 | }
81 |
82 | public bool AcceptDirectory
83 | {
84 | get => _acceptDirectory;
85 | set => SetProperty(ref _acceptDirectory, value);
86 | }
87 |
88 | public int AcceptDirectoryFlag
89 | {
90 | get => _acceptDirectoryFlag;
91 | set => SetProperty(ref _acceptDirectoryFlag, value);
92 | }
93 |
94 | public bool AcceptFile
95 | {
96 | get => _acceptFile;
97 | set => SetProperty(ref _acceptFile, value);
98 | }
99 |
100 | public int AcceptFileFlag
101 | {
102 | get => _acceptFileFlag;
103 | set => SetProperty(ref _acceptFileFlag, value);
104 | }
105 |
106 | public string AcceptExts
107 | {
108 | get => _acceptExts;
109 | set => SetProperty(ref _acceptExts, string.IsNullOrEmpty(value) ? value : value.ToLower());
110 | } // to lower for match
111 |
112 | public string AcceptFileRegex
113 | {
114 | get => _acceptFileRegex;
115 | set => SetProperty(ref _acceptFileRegex, value);
116 | }
117 |
118 | public int AcceptMultipleFilesFlag
119 | {
120 | get => _acceptMultipleFilesFlag;
121 | set => SetProperty(ref _acceptMultipleFilesFlag, value);
122 | }
123 |
124 | public string PathDelimiter
125 | {
126 | get => _pathDelimiter;
127 | set => SetProperty(ref _pathDelimiter, value);
128 | }
129 |
130 | public string ParamForMultipleFiles
131 | {
132 | get => _paramForMultipleFiles;
133 | set => SetProperty(ref _paramForMultipleFiles, value);
134 | }
135 |
136 | public int Index
137 | {
138 | get => _index;
139 | set => SetProperty(ref _index, value);
140 | }
141 |
142 | public int ShowWindowFlag {
143 | get => _showWindowFlag;
144 | set => SetProperty(ref _showWindowFlag, value);
145 | }
146 |
147 | public string WorkingDirectory {
148 | get => _workingDirectory;
149 | set => SetProperty(ref _workingDirectory, value);
150 | }
151 | }
152 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Service/Menu/ShowWindowFlagEnum.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 |
3 | namespace ContextMenuCustomApp.Service.Menu
4 | {
5 | public enum ShowWindowFlagEnum
6 | {
7 | [DescriptionAttribute("Hide")]
8 | Hide = -1,
9 | [DescriptionAttribute("Show Normal")]
10 | ShowNormal = 0,
11 | [DescriptionAttribute("Show Minimized")]
12 | ShowMinimized = 1,
13 | [DescriptionAttribute("Show Maximized")]
14 | ShowMaximized = 2,
15 | }
16 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Shell.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
24 |
25 |
32 |
33 |
39 |
45 |
46 |
47 |
52 |
53 |
60 |
61 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/Themes/Generic.xaml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Common/Alert.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Threading.Tasks;
3 | using Windows.UI.Xaml.Controls;
4 |
5 | namespace ContextMenuCustomApp.View.Common
6 | {
7 | public static class Alert
8 | {
9 | public static async void InfoAsync(string content, string title = "Info", string closeButton = "Cancel")
10 | {
11 | var dialog = new ContentDialog
12 | {
13 | Title = title,
14 | PrimaryButtonText = "",
15 | CloseButtonText = closeButton,
16 | DefaultButton = ContentDialogButton.Close,
17 | Content = content
18 | };
19 | await dialog.ShowAsync();
20 | }
21 |
22 | public static async Task ChooseAsync(string content, string title = "", string primaryButton = "Ok", string closeButton = "Cancel")
23 | {
24 | var dialog = new ContentDialog
25 | {
26 | Title = title,
27 | PrimaryButtonText = primaryButton,
28 | CloseButtonText = closeButton,
29 | DefaultButton = ContentDialogButton.Primary,
30 | Content = content
31 | };
32 | var result = await dialog.ShowAsync();
33 | return result == ContentDialogResult.Primary;
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Common/BaseModel.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 | using System.Runtime.CompilerServices;
3 |
4 | namespace ContextMenuCustomApp.View.Common
5 | {
6 | public class BaseModel : INotifyPropertyChanged
7 | {
8 | public event PropertyChangedEventHandler PropertyChanged;
9 |
10 | protected virtual bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = null)
11 | {
12 | if (Equals(storage, value))
13 | {
14 | return false;
15 | }
16 |
17 | storage = value;
18 | OnPropertyChanged(propertyName);
19 | return true;
20 | }
21 |
22 | protected virtual void OnPropertyChanged(string propertyName)
23 | {
24 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Common/BaseViewModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Threading.Tasks;
3 |
4 | namespace ContextMenuCustomApp.View.Common
5 | {
6 | public abstract class BaseViewModel : BaseModel
7 | {
8 | private bool _busy;
9 | public bool IsBusy { get => _busy; set => SetProperty(ref _busy, value); }
10 |
11 | private string _message;
12 | public string Message { get => _message; set => SetProperty(ref _message, value); }
13 |
14 | public delegate void MessageEventHandler(string message, Exception exception);
15 | public event MessageEventHandler Handler;
16 |
17 | public void OnError(Exception e, string message = null)
18 | {
19 | Message = message ?? e.Message;
20 | Handler?.Invoke(message, e);
21 | }
22 |
23 | public void OnMessage(string message)
24 | {
25 | Handler?.Invoke(message, null);
26 | }
27 |
28 | public void Busy(bool busy, string message = null)
29 | {
30 | IsBusy = busy;
31 | Message = message ?? string.Empty;
32 | }
33 |
34 | public async Task RunWith(Func action)
35 | {
36 | Busy(true);
37 | Message = string.Empty;
38 | try
39 | {
40 | await action();
41 | }
42 | catch (Exception e)
43 | {
44 | Message = e.Message;
45 | Handler?.Invoke(Message, e);
46 | }
47 | finally
48 | {
49 | Busy(false);
50 | }
51 | }
52 |
53 | public async Task RunWith(Func> action)
54 | {
55 | Busy(true);
56 | Message = string.Empty;
57 | try
58 | {
59 | return await action();
60 | }
61 | catch (Exception e)
62 | {
63 | Message = e.Message;
64 | Handler?.Invoke(Message, e);
65 | }
66 | finally
67 | {
68 | Busy(false);
69 | }
70 |
71 | return default;
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Common/IMessageSupport.cs:
--------------------------------------------------------------------------------
1 | namespace ContextMenuCustomApp.View.Common
2 | {
3 | public interface IMessageSupport
4 | {
5 | void UpdateMessage(bool show, MessageType messageType, string message = "");
6 | }
7 |
8 | public enum MessageType
9 | {
10 | Info,
11 | Success,
12 | Warning,
13 | Error
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Common/IStatusSupport.cs:
--------------------------------------------------------------------------------
1 | namespace ContextMenuCustomApp.View.Common
2 | {
3 | public interface IStatusSupport
4 | {
5 | void UpdateStatus(bool busy, string message = "");
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Common/MessageHelper.cs:
--------------------------------------------------------------------------------
1 | using Windows.UI.Xaml;
2 | using Windows.UI.Xaml.Controls;
3 |
4 | namespace ContextMenuCustomApp.View.Common
5 | {
6 | public static class MessageHelper
7 | {
8 | private static void UpdateStatus(bool busy)
9 | {
10 | if (Window.Current.Content is Frame shell && shell?.Content is IStatusSupport statusSupport)
11 | {
12 | statusSupport.UpdateStatus(busy);
13 | }
14 | }
15 |
16 | public static void UpdateMessage(bool show, MessageType messageType, string message = "")
17 | {
18 | if (Window.Current.Content is Frame shell && shell?.Content is IMessageSupport messageSupport)
19 | {
20 | messageSupport.UpdateMessage(show, messageType, message);
21 | }
22 | }
23 | }
24 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Common/PageMessageExt.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.UI.Xaml.Controls;
3 |
4 | namespace ContextMenuCustomApp.View.Common
5 | {
6 | public class WeakEventHandler
7 | {
8 | private readonly WeakReference _weakReference;
9 | private readonly BaseViewModel _viewModel;
10 |
11 | public WeakEventHandler(BaseViewModel viewModel, Page page)
12 | {
13 | this._viewModel = viewModel;
14 | this._weakReference = new WeakReference(page);
15 | this._viewModel.Handler += OnEvent;
16 | }
17 |
18 | public void OnEvent(string message, Exception e)
19 | {
20 | if (_weakReference.TryGetTarget(out var page))
21 | {
22 | page.ShowMessage(message ?? e.Message, e == null ? MessageType.Success : MessageType.Error);
23 | }
24 | else
25 | {
26 | this._viewModel.Handler -= OnEvent;
27 | }
28 | }
29 | }
30 |
31 | public static class PageMessageExt
32 | {
33 | public static void RegisterMessageHandler(this Page page, BaseViewModel viewModel)
34 | {
35 | new WeakEventHandler(viewModel, page);
36 | }
37 |
38 | public static void ShowMessage(this Page page, string message, MessageType messageType)
39 | {
40 | if (page.Dispatcher.HasThreadAccess)
41 | {
42 | DoShowMessage(page, message, messageType);
43 | }
44 | else
45 | {
46 | _ = page.Dispatcher.TryRunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
47 | {
48 | DoShowMessage(page, message, messageType);
49 | });
50 | }
51 | }
52 |
53 | private static void DoShowMessage(Page page, string message, MessageType messageType)
54 | {
55 | if (page is IMessageSupport messageSupport)
56 | {
57 | messageSupport.UpdateMessage(true, messageType, message);
58 | }
59 | else
60 | {
61 | MessageHelper.UpdateMessage(true, messageType, message);
62 | }
63 | }
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Common/ThemeHelper.cs:
--------------------------------------------------------------------------------
1 | using Windows.UI;
2 | using Windows.UI.Core;
3 | using Windows.UI.ViewManagement;
4 | using Windows.UI.Xaml;
5 |
6 | namespace ContextMenuCustomApp.View.Common
7 | {
8 | public static class ThemeHelper
9 | {
10 | private static Window _currentApplicationWindow;
11 |
12 | public static ElementTheme RootTheme
13 | {
14 | get
15 | {
16 | if (Window.Current.Content is FrameworkElement rootElement)
17 | {
18 | return rootElement.RequestedTheme;
19 | }
20 |
21 | return ElementTheme.Default;
22 | }
23 | set
24 | {
25 | if (Window.Current.Content is FrameworkElement rootElement)
26 | {
27 | rootElement.RequestedTheme = value;
28 | }
29 | UpdateSystemCaptionButtonColors();
30 | }
31 | }
32 |
33 | public static void Initialize()
34 | {
35 | _currentApplicationWindow = Window.Current;
36 | }
37 |
38 | private static void UiSettings_ColorValuesChanged(UISettings sender, object args)
39 | {
40 | if (_currentApplicationWindow != null)
41 | {
42 | _ = _currentApplicationWindow.Dispatcher.RunAsync(CoreDispatcherPriority.High, UpdateSystemCaptionButtonColors);
43 | }
44 | }
45 |
46 | public static bool IsDarkTheme()
47 | {
48 | if (RootTheme == ElementTheme.Default)
49 | {
50 | return Application.Current.RequestedTheme == ApplicationTheme.Dark;
51 | }
52 | return RootTheme == ElementTheme.Dark;
53 | }
54 |
55 | public static void UpdateSystemCaptionButtonColors()
56 | {
57 | ApplicationViewTitleBar titleBar = ApplicationView.GetForCurrentView().TitleBar;
58 |
59 | if (IsDarkTheme())
60 | {
61 | titleBar.ButtonForegroundColor = Colors.White;
62 | }
63 | else
64 | {
65 | titleBar.ButtonForegroundColor = Colors.Black;
66 | }
67 |
68 | }
69 |
70 | public static void EnableSound(bool enable, bool withSpatial = false)
71 | {
72 | ElementSoundPlayer.State = enable ? ElementSoundPlayerState.On : ElementSoundPlayerState.Off;
73 |
74 | if (!withSpatial)
75 | {
76 | ElementSoundPlayer.SpatialAudioMode = ElementSpatialAudioMode.Off;
77 | }
78 | else
79 | {
80 | ElementSoundPlayer.SpatialAudioMode = ElementSpatialAudioMode.On;
81 | }
82 |
83 | }
84 |
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Converter/EqualsVisibilityConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.UI.Xaml;
3 | using Windows.UI.Xaml.Data;
4 |
5 | namespace ContextMenuCustomApp.View.Converter
6 | {
7 | public class EqualsVisibilityConverter : IValueConverter
8 | {
9 | public object Convert(object value, Type targetType, object parameter, string language)
10 | {
11 | if (null == value || parameter == null)
12 | {
13 | return Visibility.Collapsed;
14 | }
15 | return object.Equals(value.ToString(), parameter) ? Visibility.Visible : Visibility.Collapsed;
16 | }
17 |
18 | public object ConvertBack(object value, Type targetType, object parameter, string language)
19 | {
20 | throw new NotImplementedException();
21 | }
22 | }
23 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Converter/VisibilityConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.UI.Xaml;
3 | using Windows.UI.Xaml.Data;
4 |
5 | namespace ContextMenuCustomApp.View.Converter
6 | {
7 | public class VisibilityConverter : IValueConverter
8 | {
9 | public object Convert(object value, Type targetType, object parameter, string language)
10 | {
11 | bool visible = true;
12 | if (value is Visibility)
13 | {
14 | return value;
15 | }
16 | if (value is bool)
17 | {
18 | visible = (bool)value;
19 | }
20 | else if (value is int || value is short || value is long)
21 | {
22 | visible = 0 != (int)value;
23 | }
24 | else if (value is float || value is double)
25 | {
26 | visible = 0.0 != (double)value;
27 | }
28 | else if (value is string && string.IsNullOrEmpty((string)value))
29 | {
30 | visible = false;
31 | }
32 | else if (value == null)
33 | {
34 | visible = false;
35 | }
36 | if ((string)parameter == "!")
37 | {
38 | visible = !visible;
39 | }
40 |
41 | return visible ? Visibility.Visible : Visibility.Collapsed;
42 | }
43 |
44 | public object ConvertBack(object value, Type targetType, object parameter, string language)
45 | {
46 | throw new NotImplementedException();
47 | }
48 | }
49 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Menu/DirectoryMatchCheckbox.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
19 |
26 |
33 |
34 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Menu/DirectoryMatchCheckbox.xaml.cs:
--------------------------------------------------------------------------------
1 | using ContextMenuCustomApp.Common;
2 | using ContextMenuCustomApp.Service.Menu;
3 | using Windows.UI.Xaml;
4 | using Windows.UI.Xaml.Controls;
5 |
6 | namespace ContextMenuCustomApp.View.Menu
7 | {
8 | public sealed partial class DirectoryMatchCheckbox : UserControl
9 | {
10 | public AppLang AppLang { get; private set; }
11 | public DirectoryMatchCheckbox()
12 | {
13 | AppLang = AppContext.Current.AppLang;
14 | this.InitializeComponent();
15 | }
16 |
17 | public int Value
18 | {
19 | get => (int)GetValue(ValueProperty);
20 | set => SetValue(ValueProperty, value);
21 | }
22 |
23 | public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(nameof(Value), typeof(int), typeof(DirectoryMatchCheckbox), new PropertyMetadata(0, (o, v) =>
24 | {
25 | var self = (DirectoryMatchCheckbox)o;
26 | if (v.NewValue is int value)
27 | {
28 | self.DirectoryCheckbox.IsChecked = (value & (int)DirectoryMatchFlagEnum.Directory) == (int)DirectoryMatchFlagEnum.Directory;
29 | self.BackgroundCheckbox.IsChecked = (value & (int)DirectoryMatchFlagEnum.Background) == (int)DirectoryMatchFlagEnum.Background;
30 | self.DesktopCheckbox.IsChecked = (value & (int)DirectoryMatchFlagEnum.Desktop) == (int)DirectoryMatchFlagEnum.Desktop;
31 | self.DriveCheckbox.IsChecked = (value & (int)DirectoryMatchFlagEnum.Drive) == (int)DirectoryMatchFlagEnum.Drive;
32 | }
33 | else
34 | {
35 | self.DirectoryCheckbox.IsChecked = false;
36 | self.BackgroundCheckbox.IsChecked = false;
37 | self.DesktopCheckbox.IsChecked = false;
38 | self.DriveCheckbox.IsChecked = false;
39 | }
40 | }));
41 |
42 | private void Checkbox_Click(object sender, RoutedEventArgs e)
43 | {
44 | this.Value = (DirectoryCheckbox.IsChecked == true ? (int)DirectoryMatchFlagEnum.Directory : 0)
45 | | (BackgroundCheckbox.IsChecked == true ? (int)DirectoryMatchFlagEnum.Background : 0)
46 | | (DesktopCheckbox.IsChecked == true ? (int)DirectoryMatchFlagEnum.Desktop : 0)
47 | | (DriveCheckbox.IsChecked == true ? (int)DirectoryMatchFlagEnum.Drive : 0);
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Menu/MenuFileRenameDialog.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
22 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Menu/MenuFileRenameDialog.xaml.cs:
--------------------------------------------------------------------------------
1 | using ContextMenuCustomApp.Service.Menu;
2 | using System;
3 | using System.IO;
4 | using System.Threading.Tasks;
5 | using Windows.UI.Xaml;
6 | using Windows.UI.Xaml.Controls;
7 |
8 | namespace ContextMenuCustomApp.View.Menu
9 | {
10 | public sealed partial class MenuFileRenameDialog : UserControl
11 | {
12 | private readonly MenuItem _menuItem;
13 | public MenuFileRenameDialog(MenuItem menuItem)
14 | {
15 | this._menuItem = menuItem;
16 | this.InitializeComponent();
17 | }
18 |
19 | public async Task<(bool, string)> ShowAsync()
20 | {
21 | this.FileNameTextBox.Text = _menuItem.File != null ? _menuItem.File.Name : SyncFromMenuTitle(_menuItem.Title);
22 | UpdateSelection();
23 |
24 | var dialog = new ContentDialog
25 | {
26 | Title = "Rename Menu File",
27 | PrimaryButtonText = "Save",
28 | CloseButtonText = "Cancel",
29 | DefaultButton = ContentDialogButton.Primary,
30 | Content = this
31 | };
32 | var result = await dialog.ShowAsync();
33 | return (result == ContentDialogResult.Primary, this.FileNameTextBox.Text);
34 | }
35 |
36 | private void Button_Click(object sender, RoutedEventArgs e)
37 | {
38 | this.FileNameTextBox.Text = SyncFromMenuTitle(this.FileNameTextBox.Text);
39 | UpdateSelection();
40 | this.FileNameTextBox.Focus(FocusState.Programmatic);
41 | }
42 |
43 | private string SyncFromMenuTitle(string name)
44 | {
45 | if (string.IsNullOrEmpty(name))
46 | {
47 | return $"{_menuItem.Title}.json";
48 | }
49 |
50 | if (name.EndsWith(".json.disabled"))
51 | {
52 | return $"{_menuItem.Title}.json.disabled";
53 | }
54 |
55 | return $"{_menuItem.Title}{Path.GetExtension(name)}";
56 | }
57 |
58 | private void UpdateSelection()
59 | {
60 | var name = this.FileNameTextBox.Text;
61 | if (string.IsNullOrEmpty(name))
62 | {
63 | return;
64 | }
65 |
66 | var key = Path.GetFileNameWithoutExtension(name);
67 | if (name.EndsWith(".json.disabled"))
68 | {
69 | key = Path.GetFileNameWithoutExtension(key);
70 | }
71 |
72 | if (string.IsNullOrEmpty(key))
73 | {
74 | return;
75 | }
76 |
77 | this.FileNameTextBox.SelectionStart = 0;
78 | this.FileNameTextBox.SelectionLength = key.Length;
79 | }
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Setting/LanguageOverride.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
47 |
48 |
57 |
58 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Setting/LanguageOverride.xaml.cs:
--------------------------------------------------------------------------------
1 | using ContextMenuCustomApp.Common;
2 | using ContextMenuCustomApp.Service.Lang;
3 | using Windows.UI.Xaml;
4 | using Windows.UI.Xaml.Controls;
5 |
6 | namespace ContextMenuCustomApp.View.Setting
7 | {
8 | public sealed partial class LanguageOverride : UserControl
9 | {
10 | private SettingViewModel _settingViewModel;
11 |
12 | public readonly AppLang AppLang;
13 |
14 | public LanguageOverride()
15 | {
16 | AppLang = AppContext.Current.AppLang;
17 | this.InitializeComponent();
18 | Loaded += Control_Loaded;
19 | }
20 |
21 | private async void Control_Loaded(object sender, RoutedEventArgs e)
22 | {
23 | _settingViewModel = (SettingViewModel)DataContext;
24 | await _settingViewModel.LoadLanguages();
25 |
26 | LanguageOverrideComboBox.SelectedItem = _settingViewModel.GetCurrentLang();
27 | LanguageOverrideComboBox.SelectionChanged += LanguageOverrideComboBox_SelectionChanged;
28 | }
29 |
30 | private async void LanguageOverrideComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
31 | {
32 | var comboBox = sender as ComboBox;
33 | if (comboBox?.SelectedItem is LangInfo langInfo)
34 | {
35 | _settingViewModel.UpdateLangSetting(langInfo);
36 | }
37 | }
38 |
39 | private async void ExportButton_Click(object sender, RoutedEventArgs e)
40 | {
41 | if (LanguageOverrideComboBox?.SelectedItem is LangInfo langInfo)
42 | {
43 | await _settingViewModel.ExportLang(langInfo);
44 | }
45 | }
46 | }
47 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Setting/SettingPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using ContextMenuCustomApp.View.Common;
2 | using System;
3 | using Windows.ApplicationModel.Core;
4 | using Windows.Storage.Pickers;
5 | using Windows.UI.Xaml;
6 | using Windows.UI.Xaml.Controls;
7 | using Windows.UI.Xaml.Navigation;
8 |
9 | namespace ContextMenuCustomApp.View.Setting
10 | {
11 | public sealed partial class SettingPage : Page
12 | {
13 | private readonly SettingViewModel _viewModel;
14 | public SettingPage()
15 | {
16 | _viewModel = new SettingViewModel();
17 | this.DataContext = _viewModel;
18 | NavigationCacheMode = NavigationCacheMode.Required;
19 | this.InitializeComponent();
20 | this.RegisterMessageHandler(_viewModel);
21 | }
22 |
23 | protected override void OnNavigatedTo(NavigationEventArgs e)
24 | {
25 | }
26 |
27 | protected override void OnNavigatedFrom(NavigationEventArgs e)
28 | {
29 | }
30 |
31 | private async void OpenIconButton_OnClick(object sender, RoutedEventArgs e)
32 | {
33 | if (sender is Button button)
34 | {
35 | var fileOpenPicker = new FileOpenPicker
36 | {
37 | SuggestedStartLocation = PickerLocationId.ComputerFolder
38 | };
39 |
40 | string[] fileTypes = { ".dll", ".exe", ".ico", ".png", ".bmp", ".jpeg", ".jpg", ".heic", ".tif", "*" };
41 | foreach (string fileType in fileTypes)
42 | {
43 | fileOpenPicker.FileTypeFilter.Add(fileType);
44 | }
45 |
46 | var file = await fileOpenPicker.PickSingleFileAsync();
47 | if (null != file)
48 | {
49 | string iconPath = file.Name.EndsWith(".dll") || file.Name.EndsWith(".exe") ? $"\"{file.Path}\",0" : $"\"{file.Path}\"";
50 | switch (button.Tag)
51 | {
52 | case string tag when tag == "Dark":
53 | MenuDarkIconPath.Text = iconPath;
54 | break;
55 | default:
56 | MenuLightIconPath.Text = iconPath;
57 | break;
58 | }
59 | }
60 | }
61 | }
62 |
63 | private void Back_Click(object sender, RoutedEventArgs e)
64 | {
65 | if (Frame.CanGoBack)
66 | {
67 | Frame.GoBack();
68 | }
69 | }
70 |
71 | private async void RestartAppBtn_Click(object sender, RoutedEventArgs e)
72 | {
73 | await CoreApplication.RequestRestartAsync(string.Empty);
74 | }
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Setting/SettingViewModel.cs:
--------------------------------------------------------------------------------
1 | using ContextMenuCustomApp.Common;
2 | using ContextMenuCustomApp.Service.Common.Json;
3 | using ContextMenuCustomApp.Service.Lang;
4 | using ContextMenuCustomApp.View.Common;
5 | using System;
6 | using System.Collections.Generic;
7 | using System.Threading.Tasks;
8 | using Windows.ApplicationModel;
9 | using Windows.Storage;
10 | using Windows.Storage.Pickers;
11 | using Windows.System;
12 | using Windows.UI.Xaml;
13 |
14 | namespace ContextMenuCustomApp.View.Setting
15 | {
16 | public class SettingViewModel : BaseViewModel
17 | {
18 | public readonly Settings Settings;
19 | public readonly AppLang AppLang;
20 | private readonly LanguageService _languageService;
21 | public SettingViewModel()
22 | {
23 | Settings = AppContext.Current.AppSetting;
24 | AppLang = AppContext.Current.AppLang;
25 | _languageService = AppContext.Current.GetService();
26 | }
27 |
28 | public string Version()
29 | {
30 | var version = Package.Current.Id.Version;
31 | return $"Version: {version.Major}.{version.Minor}.{version.Build}";
32 | }
33 |
34 | public int ThemeType
35 | {
36 | get
37 | {
38 | return Settings.ThemeType;
39 | }
40 | set
41 | {
42 | Settings.ThemeType = value;
43 |
44 | if (value == 1)
45 | {
46 | ThemeHelper.RootTheme = ElementTheme.Dark;
47 | }
48 | else if (value == 2)
49 | {
50 | ThemeHelper.RootTheme = ElementTheme.Light;
51 | }
52 | else
53 | {
54 | ThemeHelper.RootTheme = ElementTheme.Default;
55 | }
56 | }
57 | }
58 |
59 | public async void OpenDataFolder()
60 | {
61 | var folder = ApplicationData.Current.LocalFolder;
62 | _ = await Launcher.LaunchFolderAsync(folder);
63 | }
64 |
65 | #region language
66 |
67 | private List _languages;
68 |
69 | public List Languages
70 | {
71 | get => _languages;
72 | set => SetProperty(ref _languages, value);
73 | }
74 |
75 | public async Task LoadLanguages()
76 | {
77 | Languages = await _languageService.QueryLangList();
78 | }
79 |
80 | public void UpdateLangSetting(LangInfo langInfo)
81 | {
82 | _languageService.UpdateLangSetting(langInfo);
83 | }
84 |
85 | public async Task ExportLang(LangInfo langInfo)
86 | {
87 | FileSavePicker fileSavePicker = new FileSavePicker
88 | {
89 | SuggestedStartLocation = PickerLocationId.Desktop,
90 | SuggestedFileName = langInfo.FileName
91 | };
92 |
93 | fileSavePicker.FileTypeChoices.Add("Json", new List() { ".json" });
94 | var file = await fileSavePicker.PickSaveFileAsync();
95 | if (file == null)
96 | {
97 | return;
98 | }
99 |
100 | AppLang applang = await _languageService.LoadDefualtAsync();
101 | await FileIO.WriteTextAsync(file, JsonUtil.Serialize(applang, true));
102 | }
103 |
104 | public LangInfo GetCurrentLang()
105 | {
106 | var langFileName = AppContext.Current.AppSetting.AppLang;
107 | return Languages.Find(x => x.FileName == langFileName);
108 | }
109 |
110 | public async void OpenLanguagesFolder()
111 | {
112 | var folder = await _languageService.GetCustomLanguagesFolderAsync();
113 | await Launcher.LaunchFolderAsync(folder);
114 | }
115 |
116 | #endregion
117 |
118 | }
119 | }
120 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Tip/TipDialog.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
17 |
21 |
22 |
26 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomApp/View/Tip/TipDialog.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Threading.Tasks;
3 | using Windows.UI.Xaml.Controls;
4 |
5 | namespace ContextMenuCustomApp.View.Tip
6 | {
7 | public sealed partial class TipDialog : UserControl
8 | {
9 | public TipDialog()
10 | {
11 | this.InitializeComponent();
12 | }
13 |
14 | public string Tip1 { get; set; }
15 | public string Tip1Content { get; set; }
16 | public string Tip2 { get; set; }
17 | public string Tip2Content { get; set; }
18 | public async Task ShowAsync()
19 | {
20 | var dialog = new ContentDialog
21 | {
22 | Title = AppContext.Current.AppLang.UpdateTipTitle,
23 | CloseButtonText = AppContext.Current.AppLang.UpdateTipCloseButton,
24 | DefaultButton = ContentDialogButton.Close,
25 | Content = this
26 | };
27 | await dialog.ShowAsync();
28 | }
29 |
30 | public static TipDialog CreateUpdateTipDialog()
31 | {
32 | var appLang=AppContext.Current.AppLang;
33 | return new TipDialog
34 | {
35 | Tip1 = appLang.UpdateTip1,
36 | Tip1Content = appLang.UpdateTip1Content,
37 | Tip2 = appLang.UpdateTip2,
38 | Tip2Content = appLang.UpdateTip2Content
39 | };
40 | }
41 | }
42 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/LargeTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/LargeTile.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/LargeTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/LargeTile.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/LargeTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/LargeTile.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/LargeTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/LargeTile.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/LargeTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/LargeTile.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SmallTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SmallTile.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SmallTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SmallTile.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SmallTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SmallTile.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SmallTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SmallTile.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SmallTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SmallTile.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SplashScreen.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SplashScreen.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SplashScreen.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SplashScreen.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SplashScreen.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SplashScreen.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SplashScreen.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/SplashScreen.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square150x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square150x150Logo.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square150x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square150x150Logo.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square150x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square150x150Logo.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square150x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square150x150Logo.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-16.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-24.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-256.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-32.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-48.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-unplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-unplated_targetsize-16.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-unplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-unplated_targetsize-256.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-unplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-unplated_targetsize-32.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-unplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.altform-unplated_targetsize-48.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.targetsize-16.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.targetsize-24.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.targetsize-256.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.targetsize-32.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Square44x44Logo.targetsize-48.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.backup(1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.backup(1).png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.backup(2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.backup(2).png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.backup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.backup.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/StoreLogo.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Wide310x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Wide310x150Logo.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Wide310x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Wide310x150Logo.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Wide310x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Wide310x150Logo.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Wide310x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomDevPackage/Images/Wide310x150Logo.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomDevPackage/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
15 |
19 |
20 |
21 | Custom Context Menu (Dev)
22 | touchwp
23 | Images\StoreLogo.png
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
39 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/LargeTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/LargeTile.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/LargeTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/LargeTile.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/LargeTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/LargeTile.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/LargeTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/LargeTile.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/LargeTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/LargeTile.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SmallTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SmallTile.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SmallTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SmallTile.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SmallTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SmallTile.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SmallTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SmallTile.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SmallTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SmallTile.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SplashScreen.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SplashScreen.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SplashScreen.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SplashScreen.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SplashScreen.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SplashScreen.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SplashScreen.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/SplashScreen.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square150x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square150x150Logo.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square150x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square150x150Logo.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square150x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square150x150Logo.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square150x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square150x150Logo.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-16.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-24.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-256.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-32.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-48.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-unplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-unplated_targetsize-16.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-unplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-unplated_targetsize-256.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-unplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-unplated_targetsize-32.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-unplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.altform-unplated_targetsize-48.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.targetsize-16.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.targetsize-24.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.targetsize-256.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.targetsize-32.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Square44x44Logo.targetsize-48.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.backup(1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.backup(1).png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.backup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.backup.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/StoreLogo.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Wide310x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Wide310x150Logo.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Wide310x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Wide310x150Logo.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Wide310x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Wide310x150Logo.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Wide310x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomGithubPackage/Images/Wide310x150Logo.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomGithubPackage/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
15 |
19 |
20 |
21 | Custom Context Menu (Github)
22 | touchwp
23 | Images\StoreLogo.png
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
39 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/BaseExplorerCommand.cpp:
--------------------------------------------------------------------------------
1 | #include "pch.h"
2 | #include "BaseExplorerCommand.h"
3 |
4 | IFACEMETHODIMP BaseExplorerCommand::GetTitle(_In_opt_ IShellItemArray* items, _Outptr_result_nullonfailure_ PWSTR* name) {
5 | *name = nullptr;
6 | auto title = wil::make_cotaskmem_string_nothrow(L"Open With");
7 | RETURN_IF_NULL_ALLOC(title);
8 | *name = title.release();
9 | return S_OK;
10 | }
11 |
12 | IFACEMETHODIMP BaseExplorerCommand::GetIcon(_In_opt_ IShellItemArray* items, _Outptr_result_nullonfailure_ PWSTR* icon) {
13 | *icon = nullptr;
14 | const auto customIcon = winrt::unbox_value_or(winrt::Windows::Storage::ApplicationData::Current().LocalSettings().Values().Lookup(m_theme_type == ThemeType::Dark ? L"Custom_Menu_Dark_Icon" : L"Custom_Menu_Light_Icon"), L"");
15 | if (customIcon.empty()) {
16 | const std::filesystem::path modulePath{ wil::GetModuleFileNameW(wil::GetModuleInstanceHandle()) };
17 | auto iconPath = wil::make_cotaskmem_string_nothrow((modulePath.wstring() + (m_theme_type == ThemeType::Dark ? L",-101" : L",-103")).c_str());
18 | RETURN_IF_NULL_ALLOC(iconPath);
19 | *icon = iconPath.release();
20 | }
21 | else {
22 | DEBUG_LOG(L"BaseExplorerCommand::GetIcon ,m_theme_type={},custom icon={}", static_cast(m_theme_type), customIcon);
23 | auto iconPath = wil::make_cotaskmem_string_nothrow(customIcon.c_str());
24 | RETURN_IF_NULL_ALLOC(iconPath);
25 | *icon = iconPath.release();
26 | }
27 | return S_OK;
28 | }
29 |
30 | IFACEMETHODIMP BaseExplorerCommand::GetToolTip(_In_opt_ IShellItemArray*, _Outptr_result_nullonfailure_ PWSTR* infoTip) {
31 | *infoTip = nullptr;
32 | return E_NOTIMPL;
33 | }
34 |
35 | IFACEMETHODIMP BaseExplorerCommand::GetCanonicalName(_Out_ GUID* guidCommandName) {
36 | *guidCommandName = GUID_NULL;
37 | return S_OK;
38 | }
39 |
40 | IFACEMETHODIMP BaseExplorerCommand::GetState(_In_opt_ IShellItemArray* selection, _In_ BOOL okToBeSlow, _Out_ EXPCMDSTATE* cmdState) {
41 | *cmdState = ECS_ENABLED;
42 | return S_OK;
43 | }
44 |
45 | IFACEMETHODIMP BaseExplorerCommand::Invoke(_In_opt_ IShellItemArray* selection, _In_opt_ IBindCtx*) noexcept try {
46 | return S_OK;
47 | }CATCH_RETURN();
48 |
49 | IFACEMETHODIMP BaseExplorerCommand::GetFlags(_Out_ EXPCMDFLAGS* flags) {
50 | *flags = ECF_DEFAULT;
51 | return S_OK;
52 | }
53 |
54 | IFACEMETHODIMP BaseExplorerCommand::EnumSubCommands(_COM_Outptr_ IEnumExplorerCommand** enumCommands) {
55 | *enumCommands = nullptr;
56 | return E_NOTIMPL;
57 | }
58 |
59 | IFACEMETHODIMP BaseExplorerCommand::SetSite(_In_ IUnknown* site) noexcept {
60 | m_site = site;
61 | return S_OK;
62 | }
63 |
64 | IFACEMETHODIMP BaseExplorerCommand::GetSite(_In_ REFIID riid, _COM_Outptr_ void** site) noexcept {
65 | RETURN_IF_FAILED(m_site.query_to(riid, site));
66 | return S_OK;
67 | }
68 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/BaseExplorerCommand.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 | #include
5 | #include
6 |
7 | #define DEBUG_LOG(message, ...) if(m_enable_debug) { \
8 | OutputDebugStringW(std::format(message, __VA_ARGS__).c_str());\
9 | }
10 |
11 | using namespace Microsoft::WRL;
12 |
13 | enum ThemeType {
14 | Light = 0,
15 | Dark = 1
16 | };
17 |
18 | enum FileType {
19 | File = 0,
20 | Directory = 1,
21 | Background = 2,
22 | Desktop = 3,
23 | Drive = 4,
24 | };
25 |
26 | class BaseExplorerCommand : public RuntimeClass, IExplorerCommand, IObjectWithSite> {
27 | public:
28 | IFACEMETHODIMP GetTitle(_In_opt_ IShellItemArray* items, _Outptr_result_nullonfailure_ PWSTR* name) override;
29 | IFACEMETHODIMP GetIcon(_In_opt_ IShellItemArray*, _Outptr_result_nullonfailure_ PWSTR* icon) override;
30 | IFACEMETHODIMP GetToolTip(_In_opt_ IShellItemArray*, _Outptr_result_nullonfailure_ PWSTR* infoTip) override;
31 | IFACEMETHODIMP GetCanonicalName(_Out_ GUID* guidCommandName) override;
32 | IFACEMETHODIMP GetState(_In_opt_ IShellItemArray* selection, _In_ BOOL okToBeSlow, _Out_ EXPCMDSTATE* cmdState) override;
33 | IFACEMETHODIMP Invoke(_In_opt_ IShellItemArray* selection, _In_opt_ IBindCtx*) noexcept override;
34 | IFACEMETHODIMP GetFlags(_Out_ EXPCMDFLAGS* flags) override;
35 | IFACEMETHODIMP EnumSubCommands(__RPC__deref_out_opt IEnumExplorerCommand** enumCommands) override;
36 | IFACEMETHODIMP SetSite(_In_ IUnknown* site) noexcept override;
37 | IFACEMETHODIMP GetSite(_In_ REFIID riid, _COM_Outptr_ void** site) noexcept override;
38 |
39 | protected:
40 | wil::com_ptr_nothrow m_site;
41 | ThemeType m_theme_type{ Light };
42 | bool m_enable_debug{ true };
43 | };
44 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/ContextMenuCustomHost.rc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomHost/ContextMenuCustomHost.rc
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/CustomExplorerCommand.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include "BaseExplorerCommand.h"
3 | #include "CustomSubExplorerCommand.h"
4 | #include
5 | //#define CMC_GITHUB_RELEASE
6 | //#define CMC_STORE_RELEASE
7 | //#define CMC_ANY
8 | class
9 | #if defined(CMC_STORE_RELEASE)
10 | __declspec(uuid("46F650E5-9959-48D6-AC13-A9637C5B3787"))
11 | #elif defined(CMC_GITHUB_RELEASE)
12 | __declspec(uuid("EB9DD180-53C8-4E8E-B61F-36FDD0D0CD13"))
13 | #elif defined(CMC_ANY)
14 | __declspec(uuid("9DD7188B-41FA-4C01-BFB2-F82DC1521DAD"))
15 | #else // debug or test
16 | __declspec(uuid("62213977-E22F-49D5-B4DB-29E72E6A5D37"))
17 | #endif
18 | CustomExplorerCommand: public BaseExplorerCommand{
19 | public:
20 | CustomExplorerCommand();
21 | IFACEMETHODIMP GetFlags(_Out_ EXPCMDFLAGS* flags) override;
22 | IFACEMETHODIMP GetState(_In_opt_ IShellItemArray* selection, _In_ BOOL okToBeSlow, _Out_ EXPCMDSTATE* cmdState) override;
23 | IFACEMETHODIMP GetTitle(_In_opt_ IShellItemArray* items, _Outptr_result_nullonfailure_ PWSTR* name) override;
24 | IFACEMETHODIMP GetIcon(_In_opt_ IShellItemArray*, _Outptr_result_nullonfailure_ PWSTR* icon) override;
25 | IFACEMETHODIMP GetCanonicalName(_Out_ GUID* guidCommandName) override;
26 | IFACEMETHODIMP EnumSubCommands(__RPC__deref_out_opt IEnumExplorerCommand** enumCommands) override;
27 | IFACEMETHODIMP Invoke(_In_opt_ IShellItemArray* selection, _In_opt_ IBindCtx*) noexcept override;
28 | void ReadCommands(bool multipleFiles, bool isDirectory, bool isBackground, bool isDesktop, const std::wstring& currentPath);
29 | HRESULT FindLocationFromSite(IShellItem** location) const noexcept;
30 |
31 | private:
32 | std::vector> m_commands;
33 |
34 | };
35 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/CustomExplorerCommandEnum.cpp:
--------------------------------------------------------------------------------
1 | #include "pch.h"
2 | #include "CustomExplorerCommandEnum.h"
3 |
4 | CustomExplorerCommandEnum::CustomExplorerCommandEnum(std::vector>& commands) :
5 | m_current(0) {
6 | m_commands = commands;
7 | }
8 |
9 | IFACEMETHODIMP CustomExplorerCommandEnum::Next(ULONG celt, __out_ecount_part(celt, *pceltFetched) IExplorerCommand** apUICommand, __out_opt ULONG* pceltFetched) {
10 | ULONG fetched{0};
11 | wil::assign_to_opt_param(pceltFetched, 0ul);
12 |
13 | const auto size = m_commands.size();
14 | if (m_current < size) {
15 | auto current = m_commands.cbegin();
16 | current += m_current;
17 | while (fetched < celt && m_current < size) {
18 | current->CopyTo(&apUICommand[0]);
19 | ++current;
20 | m_current++;
21 | fetched++;
22 | }
23 | }
24 |
25 | wil::assign_to_opt_param(pceltFetched, fetched);
26 | return (fetched == celt) ? S_OK : S_FALSE;
27 | }
28 |
29 | IFACEMETHODIMP CustomExplorerCommandEnum::Skip(ULONG celt) {
30 | if ((m_current + static_cast(celt)) >= m_commands.size()) {
31 | return S_FALSE;
32 | }
33 | m_current += celt;
34 | return S_OK;
35 | }
36 |
37 | IFACEMETHODIMP CustomExplorerCommandEnum::Reset() {
38 | m_current = 0;
39 | return S_OK;
40 | }
41 |
42 | IFACEMETHODIMP CustomExplorerCommandEnum::Clone(__deref_out IEnumExplorerCommand** ppenum) {
43 | if (ppenum == nullptr) {
44 | return E_POINTER;
45 | }
46 |
47 | const auto newEnum = Make(m_commands);
48 | newEnum->m_current = m_current;
49 | return newEnum->QueryInterface(IID_PPV_ARGS(ppenum));
50 | }
51 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/CustomExplorerCommandEnum.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include "CustomSubExplorerCommand.h"
7 |
8 | using namespace Microsoft::WRL;
9 |
10 | class CustomExplorerCommandEnum final : public RuntimeClass, IEnumExplorerCommand> {
11 | public:
12 | explicit CustomExplorerCommandEnum(std::vector>& commands);
13 | IFACEMETHODIMP Next(ULONG celt, __out_ecount_part(celt, *pceltFetched) IExplorerCommand** apUICommand, __out_opt ULONG* pceltFetched) override;
14 | IFACEMETHODIMP Skip(ULONG /*celt*/) override;
15 | IFACEMETHODIMP Reset() override;
16 | IFACEMETHODIMP Clone(__deref_out IEnumExplorerCommand** ppenum) override;
17 |
18 | private:
19 | std::vector> m_commands;
20 | size_t m_current;
21 | };
22 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/CustomSubExplorerCommand.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include "BaseExplorerCommand.h"
3 | #include
4 |
5 | enum FilesMatchFlagEnum {
6 | FILES_OFF = 0,
7 | FILES_EACH = 1,
8 | FILES_JOIN = 2
9 | };
10 |
11 | enum FileMatchFlagEnum {
12 | FILE_OFF = 0,
13 | FILE_EXT = 1,
14 | FILE_REGEX = 2,
15 | FILE_EXT2 = 3,
16 | FILE_ALL = 4
17 | };
18 |
19 | enum DirectoryMatchFlagEnum {
20 | DIRECTORY_OFF = 0,
21 | DIRECTORY_DIRECTORY = 0b0001,
22 | DIRECTORY_BACKGROUND = 0b0010,
23 | DIRECTORY_DESKTOP = 0b0100,
24 | DIRECTORY_DRIVE = 0b1000
25 | };
26 |
27 | constexpr std::wstring_view PARAM_PATH = L"{path}";
28 | constexpr std::wstring_view PARAM_NAME = L"{name}";
29 | constexpr std::wstring_view PARAM_EXT = L"{extension}";
30 | constexpr std::wstring_view PARAM_PARENT = L"{parent}";
31 | constexpr std::wstring_view PARAM_NAME_NO_EXT = L"{nameNoExt}";
32 |
33 | class CustomSubExplorerCommand final : public BaseExplorerCommand {
34 | public:
35 | CustomSubExplorerCommand(const winrt::hstring& configContent, ThemeType themeType,bool enableEnbug);
36 | IFACEMETHODIMP GetTitle(_In_opt_ IShellItemArray* items, _Outptr_result_nullonfailure_ PWSTR* name) override;
37 | IFACEMETHODIMP GetIcon(_In_opt_ IShellItemArray*, _Outptr_result_nullonfailure_ PWSTR* icon) override;
38 | IFACEMETHODIMP GetState(_In_opt_ IShellItemArray* selection, _In_ BOOL okToBeSlow, _Out_ EXPCMDSTATE* cmdState) override;
39 | IFACEMETHODIMP Invoke(_In_opt_ IShellItemArray* selection, _In_opt_ IBindCtx*) noexcept override;
40 | virtual bool Accept(bool multipleFiles, FileType fileType, const std::wstring& name, const std::wstring& ext);
41 |
42 | private:
43 | void Execute(HWND parent, const std::wstring& path);
44 | std::wstring _exe;
45 | std::wstring _param;
46 | bool _accept_directory;
47 | bool _accept_file;
48 | std::wstring _accept_exts;
49 | int _accept_multiple_files_flag;
50 | std::wstring _path_delimiter;
51 | std::wstring _param_for_multiple_files;
52 | std::wstring _icon;
53 | std::wstring _icon_dark;
54 | std::wstring _title;
55 | std::wstring _accept_file_regex;
56 | int _accept_file_flag;
57 | int _accept_directory_flag;
58 | int _show_window_flag;
59 | std::wstring _working_directory;
60 |
61 | public:
62 | int m_index;
63 | };
64 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/PathHelper.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 |
9 | class PathHelper {
10 | public:
11 | static void getExt(const std::wstring& path, bool& isDirectory, std::wstring& name, std::wstring& ext) {
12 | if (!path.empty()) {
13 | const std::filesystem::path file(path);
14 | isDirectory = is_directory(file);
15 | name = file.filename();
16 | if (!isDirectory) {
17 | ext = file.extension();
18 | if (!ext.empty()) {
19 | std::ranges::transform(ext, ext.begin(), towlower); // TODO check
20 | }
21 | }
22 | }
23 | }
24 |
25 | static std::wstring getPath(IShellItemArray* selection) {
26 | if (selection) {
27 | DWORD count;
28 | if (SUCCEEDED(selection->GetCount (&count)) && count > 0) {
29 | winrt::com_ptr item;
30 | if (SUCCEEDED(selection->GetItemAt(0, item.put()))) {
31 | wil::unique_cotaskmem_string path;
32 | if (SUCCEEDED(item->GetDisplayName (SIGDN_FILESYSPATH, path.put ()))) {
33 | return std::wstring{path.get()};
34 | }
35 | }
36 | }
37 | }
38 | return std::wstring{};
39 | }
40 |
41 | static std::wstring getPath(IShellItem* item) {
42 | if (item) {
43 | wil::unique_cotaskmem_string path;
44 | if (SUCCEEDED(item->GetDisplayName (SIGDN_FILESYSPATH, path.put ()))) {
45 | return std::wstring{path.get()};
46 | }
47 | }
48 | return std::wstring{};
49 | }
50 |
51 | static std::wstring getPaths(IShellItemArray* selection, const std::wstring& delimiter) {
52 | if (selection) {
53 | DWORD count;
54 | if (SUCCEEDED(selection->GetCount (&count)) && count > 0) {
55 | DWORD i = 0;
56 | std::wstringstream pathStream;
57 | while (i < count) {
58 | winrt::com_ptr item;
59 | if (SUCCEEDED(selection->GetItemAt(i++, item.put()))) {
60 | wil::unique_cotaskmem_string path;
61 | if (SUCCEEDED(item->GetDisplayName(SIGDN_FILESYSPATH, path.put()))) {
62 | pathStream << L'"';
63 | pathStream << path.get();
64 | pathStream << L'"';
65 | if (i < count) {
66 | pathStream << delimiter;
67 | }
68 | }
69 | }
70 | }
71 | return pathStream.str();
72 | }
73 | }
74 | return std::wstring{};
75 | }
76 |
77 | static std::vector getPathList(IShellItemArray* selection) {
78 | if (selection) {
79 | DWORD count;
80 | if (SUCCEEDED(selection->GetCount (&count)) && count > 0) {
81 | std::vector paths;
82 | DWORD i = 0;
83 | while (i < count) {
84 | winrt::com_ptr item;
85 | if (SUCCEEDED(selection->GetItemAt(i++, item.put()))) {
86 | wil::unique_cotaskmem_string path;
87 | if (SUCCEEDED(item->GetDisplayName(SIGDN_FILESYSPATH, path.put()))) {
88 | paths.emplace_back(path.get());
89 | }
90 | }
91 | }
92 | return paths;
93 | }
94 | }
95 | return std::vector(0);
96 | }
97 |
98 | static void replaceAll(std::wstring& src, const std::wstring_view& from, const std::wstring& to) {
99 | if (src.length() == 0) {
100 | return;
101 | }
102 |
103 | const auto fromLength = from.length();
104 | if (fromLength == 0) {
105 | return;
106 | }
107 |
108 | const auto toLength = to.length();
109 | for (auto pos = src.find(from); pos != std::string::npos; pos = src.find(from, pos + toLength)) {
110 | src.replace(pos, fromLength, to);
111 | }
112 | }
113 | };
114 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/Source.def:
--------------------------------------------------------------------------------
1 | LIBRARY
2 |
3 | EXPORTS
4 | DllCanUnloadNow PRIVATE
5 | DllGetClassObject PRIVATE
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/dllmain.cpp:
--------------------------------------------------------------------------------
1 | #include "pch.h"
2 | #include
3 | #include
4 | #include
5 | #include "CustomExplorerCommand.h"
6 |
7 | BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
8 | {
9 | switch (ul_reason_for_call)
10 | {
11 | case DLL_PROCESS_ATTACH:
12 | {
13 | DisableThreadLibraryCalls(hModule);
14 | break;
15 | }
16 | case DLL_THREAD_ATTACH:
17 | case DLL_THREAD_DETACH:
18 | case DLL_PROCESS_DETACH:
19 | {
20 | break;
21 | }
22 | }
23 | return TRUE;
24 | }
25 |
26 | CoCreatableClass(CustomExplorerCommand);
27 | CoCreatableClassWrlCreatorMapInclude(CustomExplorerCommand);
28 |
29 | STDAPI DllCanUnloadNow()
30 | {
31 | return Module::GetModule().Terminate() ? S_OK : S_FALSE;
32 | }
33 |
34 | STDAPI DllGetClassObject(_In_ REFCLSID rclsid, _In_ REFIID riid, _Outptr_ LPVOID FAR *ppv)
35 | {
36 | #if defined(CMC_ANY)
37 | return Module::GetModule().GetClassObject(__uuidof(CustomExplorerCommand), riid, ppv);
38 | #else
39 | return Module::GetModule().GetClassObject(rclsid, riid, ppv);
40 | #endif
41 | }
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/framework.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #define WIN32_LEAN_AND_MEAN
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 |
12 | #include
13 | #include
14 | #include
15 | #include
16 |
17 | #pragma comment(lib, "shlwapi.lib")
18 | #pragma comment(lib, "runtimeobject.lib")
19 | #pragma comment(lib, "windowsapp")
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/icon1.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomHost/icon1.ico
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/icon2.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomHost/icon2.ico
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/pch.cpp:
--------------------------------------------------------------------------------
1 | #include "pch.h"
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/pch.h:
--------------------------------------------------------------------------------
1 | #ifndef PCH_H
2 | #define PCH_H
3 |
4 | #include "framework.h"
5 |
6 | #endif //PCH_H
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomHost/resource.h:
--------------------------------------------------------------------------------
1 | //{{NO_DEPENDENCIES}}
2 | //
3 | #define IDI_ICON1 101
4 | #define IDB_PNG1 102
5 | #define IDI_ICON2 103
6 |
7 | // Next default values for new objects
8 | //
9 | #ifdef APSTUDIO_INVOKED
10 | #ifndef APSTUDIO_READONLY_SYMBOLS
11 | #define _APS_NEXT_RESOURCE_VALUE 104
12 | #define _APS_NEXT_COMMAND_VALUE 40001
13 | #define _APS_NEXT_CONTROL_VALUE 1001
14 | #define _APS_NEXT_SYMED_VALUE 101
15 | #endif
16 | #endif
17 |
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/LargeTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/LargeTile.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/LargeTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/LargeTile.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/LargeTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/LargeTile.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/LargeTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/LargeTile.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/LargeTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/LargeTile.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/SmallTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/SmallTile.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/SmallTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/SmallTile.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/SmallTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/SmallTile.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/SmallTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/SmallTile.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/SmallTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/SmallTile.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/SplashScreen.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/SplashScreen.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/SplashScreen.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/SplashScreen.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/SplashScreen.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/SplashScreen.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/SplashScreen.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/SplashScreen.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square150x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square150x150Logo.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square150x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square150x150Logo.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square150x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square150x150Logo.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square150x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square150x150Logo.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-16.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-24.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-256.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-32.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-lightunplated_targetsize-48.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-unplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-unplated_targetsize-16.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-unplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-unplated_targetsize-256.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-unplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-unplated_targetsize-32.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-unplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.altform-unplated_targetsize-48.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.targetsize-16.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.targetsize-24.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.targetsize-256.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.targetsize-32.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Square44x44Logo.targetsize-48.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/StoreLogo.backup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/StoreLogo.backup.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/StoreLogo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/StoreLogo.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/StoreLogo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/StoreLogo.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/StoreLogo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/StoreLogo.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/StoreLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/StoreLogo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/StoreLogo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/StoreLogo.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Wide310x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Wide310x150Logo.scale-100.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Wide310x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Wide310x150Logo.scale-125.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Wide310x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Wide310x150Logo.scale-150.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Images/Wide310x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/ContextMenuCustom/ContextMenuCustomPackage/Images/Wide310x150Logo.scale-400.png
--------------------------------------------------------------------------------
/ContextMenuCustom/ContextMenuCustomPackage/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
15 |
19 |
20 |
21 | Custom Context Menu
22 | touchwp
23 | Images\StoreLogo.png
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
39 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # Custom Context Menu
3 |
4 | Add Custom Context Menu For Windows11
5 |
6 |
7 |
8 |
9 |
10 | ## Download
11 |
12 | Windows store|Github release|Github Action
13 | ------------ | ------------- | -------------
14 |
|Github release | Github Action
15 | free , no limit , buy = coffee | use self-signed certificate | test only
16 | store package | github package , dev package | github package, dev package
17 |
18 | * store : ...m9vp3t2f55f5t.Msixbundle
19 | * github : ContextMenuCustomGithubPackage
20 | * dev : ContextMenuCustomDevPackage
21 |
22 | *from v3.8,store package,github package,dev package can be installed at the same time*
23 |
24 |
25 | ## Guides
26 | https://github.com/ikas-mc/ContextMenuForWindows11/wiki
27 |
28 |
29 | ## Samples
30 | https://github.com/ikas-mc/ContextMenuForWindows11/tree/main/menuSample
31 |
32 |
33 |
34 |
35 | 1. download file and copy to menu folder
36 | 2. toggle cache when cache is on
37 |
38 | ```
39 | Compress By 7z.json
40 | Debug Echo 2.json
41 | Debug Echo 3.json
42 | Debug Echo.json
43 | Echo path.json
44 | Extract by 7z (only v3.9+).json
45 | Extract by 7z.json
46 | Install Apk By Adb.json
47 | Open In Explorer.json
48 | Open In Windows Photo Viewer.json
49 | Open TortoiseGit Sync Window.json
50 | Open With Notepad.json
51 | Open With VScode.json
52 | Push File By Adb.json
53 | Send Image To Wsa By Adb.json
54 |
55 | // powershell and multity files
56 | Calculate Md5 By PowerShell.json
57 | ```
58 | some from https://github.com/ikas-mc/ContextMenuForWindows11/issues
59 | thanks for share
60 |
61 |
62 |
63 | ## Build
64 | https://github.com/ikas-mc/ContextMenuForWindows11/blob/main/build.md
65 |
66 |
67 |
--------------------------------------------------------------------------------
/build.md:
--------------------------------------------------------------------------------
1 | # how to build
2 |
3 | ## build ContextMenuCustomHost
4 | 1. install nuget package: Microsoft.Windows.CppWinRT and Microsoft.Windows.ImplementationLibrary
5 | 2. clean project, select debug or release,repeat this step every time you modify the configuration
6 | (you can change the output to ContextMenuCustomApp debug or release bin folder)
7 |
8 | ## build ContextMenuCustomApp
9 | 1. change PackageCertificateKey
10 | 2. build
11 |
12 | ## build ContextMenuCustomPackage
13 |
14 | 1. change PackageCertificateKey
15 | 2. set this project as startup project
16 | 3. build and run
17 |
18 | # publish
19 | 1. clean all
20 | 2. select release,rebuild ContextMenuCustomHost project
21 | 3. publish on ContextMenuCustomPackage project
22 |
23 |
24 |
25 | ## some helpful links
26 |
27 |
28 | https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/desktop-to-uwp-extensions#context-menu
29 |
30 | https://github.com/MicrosoftDocs/winrt-related/blob/docs/winrt-related-src/schemas/appxpackage/uapmanifestschema/element-desktop5-itemtype.md
31 |
32 | https://github.com/microsoft/Windows-classic-samples/tree/master/Samples/Win7Samples/winui/shell/appshellintegration/ExplorerCommandVerb
33 |
34 | https://github.com/microsoft/AppModelSamples/tree/0f88fe0a8bbb90051f6c126741b881288bb5cabb/Samples/SparsePackages/PhotoStoreContextMenu
35 |
36 | https://github.com/microsoft/terminal/tree/fb597ed304ec6eef245405c9652e9b8a029b821f/src/cascadia/ShellExtension
37 |
38 | https://github.com/MicrosoftDocs/windows-uwp/blob/docs/hub/apps/desktop/modernize/integrate-packaged-app-with-file-explorer.md
39 |
40 | https://docs.microsoft.com/en-us/cpp/cppcx/wrl/windows-runtime-cpp-template-library-wrl?view=msvc-170
41 |
--------------------------------------------------------------------------------
/install.md:
--------------------------------------------------------------------------------
1 | ## Install vc++ (version < 1.2.9)
2 |
3 | winget install Microsoft.VC++2015-2019Redist-x64
4 | or
5 | download https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-160
6 |
7 | ## Open dev mode
8 |
9 | Win Start > Settings > Privacy > For Developers > Developer Mode
10 |
11 | ## Install
12 |
13 | 1. extract zip
14 | 2. open powershell
15 | 3. run
16 | ```powershell
17 | Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
18 | ./Install.ps1
19 | Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
20 |
21 | ```
22 |
--------------------------------------------------------------------------------
/menuSample/Calculate Md5 By PowerShell.json:
--------------------------------------------------------------------------------
1 | {"title":"Calculate MD5 By PowerShell","exe":"PWSH","param":"-noexit -Command Get-FileHash -LiteralPath \\\"{path}\\\" -Algorithm MD5 | format-list","icon":"\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\",0","index":3,"acceptDirectory":false,"acceptExts":"*","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":2,"pathDelimiter":"\\\",\\\"","paramForMultipleFiles":"-noexit -Command Get-FileHash -LiteralPath \\\"{path}\\\" -Algorithm MD5 | format-list"}
--------------------------------------------------------------------------------
/menuSample/Compress By 7z.json:
--------------------------------------------------------------------------------
1 | {"title":"Compress By 7z","exe":"\"C:\\Program Files\\7-Zip\\7zG.exe\"","param":"a -ad \"{parent}\\{name}.7z\" \"{path}\"","icon":"\"C:\\Program Files\\7-Zip\\7zFM.exe\",0","index":10,"acceptDirectory":true,"acceptExts":"*","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":2,"pathDelimiter":" ","paramForMultipleFiles":"a -ad \"{parent}\\files.7z\" {path}"}
--------------------------------------------------------------------------------
/menuSample/Debug Echo 2.json:
--------------------------------------------------------------------------------
1 | {"title":"Debug Echo 2","exe":"customeContextMenuDebug.exe","param":"{path}","icon":"","index":2,"acceptDirectory":true,"acceptExts":"","acceptFileFlag":0,"acceptFileRegex":"","acceptMultipleFilesFlag":2,"pathDelimiter":",","paramForMultipleFiles":"{path}"}
--------------------------------------------------------------------------------
/menuSample/Debug Echo 3.json:
--------------------------------------------------------------------------------
1 | {"title":"Debug Echo 3","exe":"customeContextMenuDebug.exe","param":"'{path}'","icon":"","index":3,"acceptDirectory":true,"acceptExts":"","acceptFileFlag":0,"acceptFileRegex":"","acceptMultipleFilesFlag":2,"pathDelimiter":"','","paramForMultipleFiles":"'{path}'"}
--------------------------------------------------------------------------------
/menuSample/Debug Echo.json:
--------------------------------------------------------------------------------
1 | {"title":"Debug Echo","exe":"customeContextMenuDebug.exe","param":" \"{path}\"","icon":"","index":1,"acceptDirectory":true,"acceptExts":"*","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":2,"pathDelimiter":",","paramForMultipleFiles":" {path}"}
--------------------------------------------------------------------------------
/menuSample/Echo path.json:
--------------------------------------------------------------------------------
1 | {"title":"Echo path","exe":"Powershell","param":" -noexit echo '{path}'","icon":"","index":4,"acceptDirectory":true,"acceptExts":"*","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":2,"pathDelimiter":"','","paramForMultipleFiles":" -noexit echo '{path}'"}
--------------------------------------------------------------------------------
/menuSample/Extract by 7z (only v3.9+).json:
--------------------------------------------------------------------------------
1 | {"title":"Extract by 7z (only v3.9+)","exe":"\"C:\\Program Files\\7-Zip\\7zG.exe\"","param":"x \"{path}\" -o\"{parent}\\{nameNoExt}\"","icon":"\"C:\\Program Files\\7-Zip\\7zFM.exe\",0","index":12,"acceptDirectory":false,"acceptExts":".zip .rar .tar .gz .7z .cab .iso .appx .apk","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":1,"pathDelimiter":"","paramForMultipleFiles":""}
--------------------------------------------------------------------------------
/menuSample/Extract by 7z.json:
--------------------------------------------------------------------------------
1 | {"title":"Extract by 7z","exe":"\"C:\\Program Files\\7-Zip\\7zG.exe\"","param":"x \"{path}\" -o\"{path}\"~","icon":"\"C:\\Program Files\\7-Zip\\7zG.exe\",0","index":11,"acceptDirectory":false,"acceptExts":".7z,.rar,.zip,.tar,.tar.gz,.iso","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":1,"pathDelimiter":"","paramForMultipleFiles":""}
--------------------------------------------------------------------------------
/menuSample/Install Apk By Adb.json:
--------------------------------------------------------------------------------
1 | {"title":"Install Apk By Adb","exe":"PowerShell","param":" -noexit adb install -r -t \\\"{path}\\\"","icon":"","index":32,"acceptDirectory":false,"acceptExts":".apk","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":1,"pathDelimiter":"","paramForMultipleFiles":""}
--------------------------------------------------------------------------------
/menuSample/Open In Explorer.json:
--------------------------------------------------------------------------------
1 | {"title":"Open In Explorer","exe":"explorer","param":"\"{path}\"","icon":"","index":22,"acceptDirectory":true,"acceptExts":"*","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":1,"pathDelimiter":"","paramForMultipleFiles":""}
--------------------------------------------------------------------------------
/menuSample/Open In Windows Photo Viewer.json:
--------------------------------------------------------------------------------
1 | {"title":"Open In Windows Photo Viewer","exe":"rundll32","param":"\"C:\\Program Files\\Windows Photo Viewer\\PhotoViewer.dll\", ImageView_Fullscreen {path}","icon":"\"C:\\Program Files\\Windows Photo Viewer\\PhotoViewer.dll\",0","index":23,"acceptDirectory":false,"acceptExts":".jpg .jpeg .bmp .png .webp","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":1,"pathDelimiter":"","paramForMultipleFiles":""}
--------------------------------------------------------------------------------
/menuSample/Open TortoiseGit Sync Window.json:
--------------------------------------------------------------------------------
1 | {"title":"Open TortoiseGit Sync Window","exe":"\"C:\\Program Files\\TortoiseGit\\bin\\TortoiseGitProc.exe\"","param":"/command:sync /path:\"{path}\"","icon":"","index":24,"acceptDirectory":true,"acceptExts":"","acceptFileFlag":0,"acceptFileRegex":"","acceptMultipleFilesFlag":1,"pathDelimiter":"","paramForMultipleFiles":""}
--------------------------------------------------------------------------------
/menuSample/Open With Notepad.json:
--------------------------------------------------------------------------------
1 | {"title":"Open With Notepad","exe":"\"C:\\Windows\\notepad.exe\"","param":"\"{path}\"","icon":"\"C:\\Windows\\notepad.exe\",0","index":20,"acceptDirectory":false,"acceptExts":".txt .xml .java .html .md .js .bat .cmd .vbs .ps","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":1,"pathDelimiter":"","paramForMultipleFiles":""}
--------------------------------------------------------------------------------
/menuSample/Open With VScode.json:
--------------------------------------------------------------------------------
1 | {"title":"Open With VScode","exe":"\"C:\\Users\\ikas\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe\"","param":"\"{path}\"","icon":"\"C:\\Users\\ikas\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe\",0","index":21,"acceptDirectory":true,"acceptExts":"*","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":1,"pathDelimiter":"","paramForMultipleFiles":""}
--------------------------------------------------------------------------------
/menuSample/Push File By Adb.json:
--------------------------------------------------------------------------------
1 | {"title":"Push File By Adb","exe":"PowerShell","param":"adb push \\\"{path}\\\" /storage/emulated/0/Download/\\\"{name}\\\"","icon":"","index":31,"acceptDirectory":false,"acceptExts":"*","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":0,"pathDelimiter":"","paramForMultipleFiles":""}
--------------------------------------------------------------------------------
/menuSample/Send Image To Wsa By Adb.json:
--------------------------------------------------------------------------------
1 | {"title":"Send Image To Wsa By Adb","exe":"PowerShell","param":"if ((adb connect 127.0.0.1:58526) -like \\\"*connected*\\\") { adb push -p \\\"{path}\\\" \\\"/sdcard/Download/{name}\\\" | adb shell \\\"am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d 'file:///storage/emulated/0/Download/{name}'\\\"}else{msg \\\"wsa is not running\\\"}","icon":"","index":30,"acceptDirectory":false,"acceptExts":".png .jpg .jpeg .bmp .tiff","acceptFileFlag":1,"acceptFileRegex":"","acceptMultipleFilesFlag":0,"pathDelimiter":"","paramForMultipleFiles":""}
--------------------------------------------------------------------------------
/privacy.md:
--------------------------------------------------------------------------------
1 | # Privacy Statement
2 |
3 | ## What information this apps collects
4 |
5 | this apps nerver collect your information!
6 |
7 | ## App Store
8 | see microsoft
9 | https://privacy.microsoft.com/en-us/privacystatement/
10 |
--------------------------------------------------------------------------------
/screenshots/menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/screenshots/menu.png
--------------------------------------------------------------------------------
/screenshots/samples.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ikas-mc/ContextMenuForWindows11/85f2ab7bee05e1638b9e463027f75191c77317bc/screenshots/samples.png
--------------------------------------------------------------------------------