web-dev-qa-db-ja.com

Windows10トースト通知デスクトップアプリケーション

一部のWindows10機能を既存のWindowsデスクトップアプリケーションに統合しようとしています。 ToastNotificationsの統合に少し行き詰まっています。トースト通知の例を使用して( https://code.msdn.Microsoft.com/windowsdesktop/sending-toast-notifications-71e230a2/ )通知を送信および非表示にするコードを実装できました。また、ユーザーが「アクティブ」通知をクリックすると、アプリケーションのイベントハンドラーが呼び出されることも機能します。

ただし、通知が「アクションセンター」で「アーカイブ」されるとすぐに、ユーザーが通知をクリックしても何も起こりません。このような状況でクリックにどのように反応できますか?

ご協力いただきありがとうございます、

ルカス

11
Lukas

私は WinToast を開発しました。これは、Windows ToastNotificationを簡単に統合するためにC++で記述されたライブラリです。私はこれを使用して、Toast通知をさまざまなプロジェクト、特にQtFrameworkに統合しました。

ネイティブのトースト通知には、 Com Fundamentals のいくつかの機能が必要です。これらの機能は、最新バージョンのWindows(サポートされている最小クライアント:Windows 8)でのみ使用できます。

そのため、ライブラリは必要なすべてのライブラリを動的にロードします。 WinToastを使用して、アプリケーションを古いバージョンのWindowsと互換性のあるものにします。リポジトリでの使用方法を説明する添付の例があります。

トーストを表示するには、テンプレートとカスタムハンドラーを作成し、起動します。

WinToastHandlerExample* handler = new WinToastHandlerExample;
WinToastTemplate templ  = WinToastTemplate(WinToastTemplate::ImageWithTwoLines);
templ.setImagePath(L"C:/example.png");
templ.setTextField(L"title", WinToastTemplate::FirstLine);
templ.setTextField(L"subtitle", WinToastTemplate::SecondLine);

if (!WinToast::instance()->showToast(templ, handler)) {
   std::wcout << L"Could not launch your toast notification!";
}
16
mohabouje

Win32アプリからアクションセンター(およびインタラクティブトースト)を使用する方法を説明するWindows 10の更新されたドキュメントがあります: https://docs.Microsoft.com/en-us/windows/uwp/design/Shell/tiles-および-notifications/send-local-toast-desktop

基本的には、COMサーバーを使用する必要があります。 ToastNotification自体のActivatedイベントはランタイムイベントです...プログラムが閉じられ、ユーザーがアクションセンターからトーストをクリックした場合は役に立ちません。したがって、Activatedは、トーストが最初にポップアップしたときにユーザーがトーストをクリックした場合にのみ起動します。ユーザーがアクションセンターからトーストをクリックしても起動しません。これがCOMサーバーの目的です(またはUWPアプリのOnActivatedメソッドの目的です)。

4
Andrew Leader

そのサンプルはWindows8用です。 Windows 10 Tech Previewのアクションセンターは新しく、新しい機能を使用するためのSDKはまだありません。

3