もくじ
https://tera1707.com/entry/2022/02/06/144447
やりたいこと
パッケージアプリにはURI起動
という方法で、アプリを起動できるらしい。
やり方調べてみる。
やったこと
Package.appxmanifest
ファイルを開いて、<Extensions>
に、<uap:Extension Category="windows.protocol">
を追加する。
具体的には、下記のようにする。
<Applications> <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="$targetentrypoint$"> <uap:VisualElements DisplayName="WindowMessageSender (Package)" Description="WindowMessageSender (Package)" BackgroundColor="transparent" Square150x150Logo="Images\Square150x150Logo.png" Square44x44Logo="Images\Square44x44Logo.png"> <uap:DefaultTile Wide310x150Logo="Images\Wide310x150Logo.png" /> <uap:SplashScreen Image="Images\SplashScreen.png" /> </uap:VisualElements> <Extensions> <uap3:Extension Category="windows.appExecutionAlias" Executable="WindowMessageSender\WindowMessageSender.exe" EntryPoint="Windows.FullTrustApplication"> <uap3:AppExecutionAlias> <desktop:ExecutionAlias Alias="WindowMessageSender.exe" /> </uap3:AppExecutionAlias> </uap3:Extension> <uap:Extension Category="windows.protocol">★ココ <uap:Protocol Name="wmsender"> <uap:Logo>images\StoreLogo.png</uap:Logo> <uap:DisplayName>WindowMessageSenderURI</uap:DisplayName> </uap:Protocol> </uap:Extension> </Extensions> </Application> </Applications>
コード側で、URI起動されたことを知る
using Microsoft.UI.Xaml; using Microsoft.Windows.AppLifecycle; using System.Diagnostics; using Windows.ApplicationModel.Activation; namespace WindowMessageSender { public partial class App : Application { public App() { this.InitializeComponent(); } protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args) { var actEventArgs = Microsoft.Windows.AppLifecycle.AppInstance.GetCurrent().GetActivatedEventArgs(); if (actEventArgs.Kind == ExtendedActivationKind.Protocol) { var d = actEventArgs.Data as IProtocolActivatedEventArgs; if (d != null) { var uri = d.Uri; var uriString = uri.AbsoluteUri; Debug.WriteLine(uri); Debug.WriteLine(uriString); } } m_window = new MainWindow(); m_window.Activate(); } private Window m_window; } }
起動時、「wmsender:」で起動すると、
こうなる。、
また、起動時、「wmsender:aaaa/bbbb#12345」で起動すると、
こうなる。→引数、ではないが、URIになにかパラメータを載せることで、情報を渡すことができる。
参考
Handle URI activation
UWPのやり方なので、そのままではいかなかった。ので↓を見た。
https://learn.microsoft.com/en-us/windows/uwp/launch-resume/handle-uri-activation
URI アクティベーションを通じて WinUI Maui を開く方法は?
ここのやり方をまねしたのが今回のサンプルコード。
https://stackoverflow.com/questions/72606737/how-to-open-winui-maui-through-uri-activation