ネイティブ メッセージング モジュールでエッジ拡張機能を使用してモーダル ダイアログを表示する方法はありますか?
バックグラウンド
ユーザーのアクティビティを監視し、特定の条件でカスタム モーダル UI を表示するエンタープライズ エッジ拡張機能に取り組んでいます。インプロセス ネイティブ メッセージング UWP モジュールで簡単な拡張機能を作成し、簡単なメッセージ ボックスを表示しようとしました。
明らかに、そのような OnAppServiceRequestReceived ハンドラーのコード:
var dialog = new MessageDialog("Test");
await dialog.ShowAsync();
動作せず、次のエラーが発生します
An exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.ni.dll but was not handled in user code
WinRT information: This API must be called from a thread with a CoreWindow or a window must have been set explicitly.
どうにかして Edge のメイン ウィンドウを取得したり、それを処理できる独自の UI スレッドを作成したりできるかどうかはわかりません。私もそのように試しました:
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
async () =>
{
// UI update code goes here!
var dialog = new MessageDialog("Your message here");
await dialog.ShowAsync();
});
しかし、NullReferenceExceptionが発生します。これは、コードが別のユニバーサルWindowsアプリケーションで実行されることを意味しますが、同じプロセスで親アプリにアクセスできるかどうか疑問に思います。
あなたのアイデアに感謝します。
更新 16.03.2017
デスクトップ ブリッジ アプリケーションからモーダル ダイアログを実行する方法を見つけました。GetForegroundWindow WinApi 関数の結果をダイアログの親として使用すると、すべて正常に動作します。ただし、デスクトップ ブリッジ コンポーネントなしでそれを行う方法はまだわかりません。