Windows

Windowsの通知機能がよくわからない

投稿日:

もくじ

この記事にはおそらく読者の求める情報は載っていないことをおことわりしておきます。

はじめに

発端の説明

Windows 10には通知センターというものがあって、いろいろな通知がここに溜まるようになってます。
メールが届いたとかなんだとか。
で、自分はバーチャルユーチューバーが好きなんですが、バーチャルユーチューバーはみんな口を揃えて「チャンネル登録とベルボタンをお願いします」って言うわけです。
ベルボタンっていうのは動画投稿とかライブ配信とかをYoutubeが通知してくる機能なんですが。
この、ベルボタンの通知がWindows 10の通知センターに届くわけなんですわ。

発端

んでこのベルボタン、「Youtube to 俺」の通知なんですけど、俺のどこに届くかって俺の全部に届くんですよ。
AndroidもiPhoneもWindowsも。届きすぎ。
スマホはまだその場で見るからいいんですけども、お家のWindowsを起動すると停止中に溜まっていた通知がドバァってあふれるんですわ。
こりゃひでぇ、って思いまして。そもそもスマホで同じ通知受け取ってんだから、この通知要らんわって。

そう思って、Windowsに来たYoutubeの通知を消すプログラムがほしいなって感じました。

Windows.UI.Notifications

んで「Windows 通知」とかでググってたんですが、どうもこの通知は「トースト通知 (Toast Notification)」と呼ばれているらしく。
「Windows.UI.Notifications」っていうなんか種類の何かで制御ができるらしい。

Powershellで出してみる

ははぁんよくわかんねぇな、って思ったんですが、Windowsの機能はたいがいPowershellでなんとかなるもんで、きっとサンプルシェルがあるだろうと探してたら案の定ありました。下記のページ。
[powershell]トースト通知を行う。

このとおりにシェルを動かしたらとりあえずトースト通知を出す方はなんとかなりました。

Powershellで制御してみる

ToastNotificationHistory

出せたんだから消せるだろう、と思って、ToastNotificationHistoryオブジェクトを取得することはできたんです。普通に。
で、GetHistoryメソッドを呼んでみたところ、どうもアプリケーション単位の取得になるらしく、他人の出した通知が見れない。
ApplicationIDとやらが分かれば制御が効きそうなんですが、他のアプリケーションのIDなんてどうやって引っ張ってきたらいいのか分からない。
どうやらこの方向性は無理そうかな、と。

UserNotificationListener

んで次に出てきたのがこのUserNotificationListener。通知リスナーっていうらしい。
雰囲気的に、リアルタイムの通知監視っぽいんですが、どうやら今溜まっている通知が全部取れそう、っぽいことを書いてあるブログがちらほら。
ようやく正解が来たかな、と思ってPowershellのサンプルシェルを探してみたらなかなか出てこない。
しゃーないので自分で書くか、と思って適当に書いてみたんですがうまくいかない。


$listener = [Windows.UI.Notifications.Management.UserNotificationListener, Windows.UI.Notifications, ContentType = WindowsRuntime]::get_Current()
$listener.GetNotificationsAsync(1)

こういうシェルを書いたんですが、「System.__ComObject」ってのが出てきてニッチもサッチもいかない。
どうもリファレンスによるとGetNotificationsAsyncメソッドは「IAsyncOperation<IReadOnlyList>」って型を返すらしく、これが上手く処理できないっぽい。
ネットでは「await」だの「async」だの難しい英単語が書いてあるC#のサンプルコードが散見されるものの、これをPowershellで処理できるかどうかよくわかんない。
あー、Powershell限界かなー、って思った。

C#の世界に触れてみる

んでC#を試してみることに。せっかくなので今風にVisual Studio Codeなんかをインストールしてみたりして、フフーンかっこいいぜ、とか思っていた(私の中ではVSCodeを使っている段階でとてもカッコイイ今風のプログラマのつもり)んですわ。
C# および Visual Studio Code の使用を開始する ってページの通りにやったら、とりあえずC#のコードが動くようになった。

で、そこからUserNotificationListenerのサンプルコードをはっつけてビルドするとなんかエラーがでる。
どうも参照がどうとかで怒られる。出だしのWindows.UI.Notificationsっていうのが見つかんないらしい。
.NETにはNuGetっていうパッケージマネージャ(?)があって、VSCodeはそれと連動させてパッケージを自動で落としてくるように設定されたらしいんだけど、
Windows.UI.NotificationsはNuGetにないらしい。公式パッケージだから?

詰まった

さぁ詰まった。
なんか.NETは.NET Coreと.NET Frameworkとがあって、自分がインストールしたのは.NET Coreなんだけどソレがいけなかったのか、
それともVSCodeなんて今風(?)なエディタ使うのがダメで、素直にVisutal Studio 2017とかを使うべきだったのか、
もしくは上手いことやれば今のままでもなんとか上手くいくのか。
Windows.UI.NotificationsっていうのはどうやらUWPって仕組みの上に乗っかっているAPIらしいんだけど、このUWP(ユニバーサルWindowsプラットフォーム)っていうのもよく分からんし、ググったら「スマホ業界で爆死したのに何がユニバーサルだ(笑)」みたいなこと言われてて見捨てられ感あるし、もうなにがなにやら。
たすけてエロい人!

-Windows

執筆者:

関連記事

no image

GIMPとマウスジェスチャーソフトのStrokesPlusが干渉した話

言いたいことはタイトルの通りで、それを読んでもらえればそれ以上言うことはないのでもうお帰り頂いて結構なんですけど。 現象 駄コラを作ろうとしてGIMPを触っていたら、「画面上のボタンをクリックしても反 …

キズナアイのVRを体験してきた

はいどーも! バーチャルブロガーのぎんしゃりです! 今日はこの「PCでVR (Windows Mixed Reality) やろうぜ!」キャンペーン!っていうのをやっていきたいと思います!! ざっくり …

no image

メインマシンをSSDに移行する

いい加減、HDDが遅くなってきた気がするのでSSDに移行したい。 もくじ 参考資料 Windows7の標準機能「ボリュームの縮小」でパーティション容量が縮小できない問題について How to crea …