作った通知用アプリについて
- C#を使用する
- トースト通知(Toast Notification、右下に出てくる短冊状のアレ)で何かを知らせる
- TCPソケットで通知内容を受信する
- システムトレイ(System Tray)=タスクトレイ(Task Tray)にアイコンを出し、メニューから終了できる
WPFとUWPって何?
結論
- WPF:Windowsのデスクトップアプリを作る時に使用するフレームワーク
- UWP:Windows(Phoneとかも含めた)全般でアプリを動作させるプラットフォーム
- Win10のデスクトップ用アプリwithシステムトレイはWPFが楽
- UWP app with Systray extension – Insights into the Universal Windows Platform
- これから分かるようにUWPからでも可能だが面倒(に感じた)
WPFでどうすればタスクトレイにアイコンを出せるの?
結論
- Visual Studioでちゃちゃっと出来る
終了機能を作る前に実行しちまった!どうやって消すんだ…
結論
Threadが古い!?Taskって何だよ!
結論
- 分からねえ・・
- Taskを使ったTCP接続のサンプル → C#でTCP接続テスト / fujimisakari blog
###TCP通信が外部PCと繋がらん
結論
- ファイアウォールでポートを解放
-
Windows Defender ファイアウォールを介したアプリまたは機能を許可
で作成したEXEファイルを登録- EXEファイルを初めて起動した時にOSが聞いてくれるはず
ToastNotificationManager.CreateToastNotifier(applicationId)のapplicationIdとは
- ToastNotificationManager.CreateToastNotifier Method (Windows.UI.Notifications) - Windows UWP applications | Microsoft Docs
- Application User Model IDs (AppUserModelIDs) - Windows applications | Microsoft Docs
結論
- Application User Model IDs (AppUserModelIDs)
- このメソッドを使うときには必須
- 登録済みのID一覧は手軽に取得できる
通知よ、ユーザーが反応するまで消えてくれるな
結論
- toastのscenarioを
reminder
に設定すればOK - マウスでトーストをクリックするまで残り続けるようになる
- 以下は2種類の作り方での例
ToastContent content = new ToastContent()
{
Scenario = ToastScenario.Reminder,
//(略)
}
<toast scenario="reminder" launch="app-defined-string">
<!--(略)-->
</toast>
出ない通知
- エラーログを送りつけたら、通知が発生しない
ASCII文字のみの場合
Unhandled Exception: System.Exception: 通知の内容のサイズが大きすぎます。
通知の内容のサイズが大きすぎます。
at Windows.UI.Notifications.ToastNotifier.Show(ToastNotification notification)
at ToastTest.NotifyToaster.Fire(String msg)
マルチバイト文字混じりの場合
Unhandled Exception: System.ArgumentException: Value does not fall within the expected range.
at Windows.UI.Notifications.ToastNotifier.Show(ToastNotification notification)
at ToastTest.NotifyToaster.Fire(String msg)
結論
- Notification Window font size is suddenly huge - Malwarebytes 3 Support Forum - Malwarebytes Forums
- 通知内の文字バイト数はざっくり4000以下に収めよう!
- そもそも、通知領域的に(
,
や.
で)600字が限度- 横長文字ならもっと少ない