前回、毎朝必要なメッセージの通知を試みた筆者、アイコンとメッセージは設定時刻に表示されて、メールボックスを先に開くと忘れがちになる"クリックするだけの"デイリータスクを無事に処理することができたのだが、ひとつの課題が生じた。
○NotifyIconで生じた課題
task.ShowBalloonTip(300000, "9時通知", "おい貴様、起きろ!朝9時だ。
で設定した300000ミリ秒が想像通りには機能しない。NotifyIconの仕様は通知であるためそこまで、長く表示することはできないようだ。テストしたときに表示時間がまったく頭に入っていなかったため、表示されて成功と判断していた。これでは、もし離席やPC以外の作業を行っていた場合に華麗にスルーしてしまう。気付いていないわけだから、リアルな災難に遭遇してしまう。
ループで処理すれば、いけるのではないか?と以下のようなコードを試してみたところ
Add-Type -AssemblyName System.Windows.Forms
for ($i = 0; $i -lt 60; $i++) {
$task = New-Object System.Windows.Forms.NotifyIcon
$task.Icon = [System.Drawing.SystemIcons]::Information
$task.Visible = $true
$task.ShowBalloonTip(5000, "9時通知", "通知 $($i+1)", 2)
Start-Sleep -Seconds 6
$task.Dispose()
}
やはり、NotifyIconではこちらの目的にぴったりと合わないようだ。
○MessageBoxを使ってみる
"通知"するのではなく、こちらのクリックで終了するようにしたいわけなので、ここはVisualBasicやExcel VBAなどでも触ったことのあるMessageBox(Microsoftの.NET Framework APIリファレンス)をシンプルに使ってみようと考えた。
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show(
"9時です。メールを開く前にすることありますよね?わかりますよね?メールを開くと忘れますよ?",
"強制通知",
[System.Windows.Forms.MessageBoxButtons]::OK,
[System.Windows.Forms.MessageBoxIcon]::Error
実行してみると、
と表示される。一応の目的(クリックするまで表示される)を達成することは可能だ。
MessageBoxButtons(APIリファレンス)では、
[System.Windows.Forms.MessageBoxButtons]::OK,
のOK部分を以下のように変えると表示されるボタンをいくつかの種類に変えられる。
また、アイコンを変えるにはSystem.Windows.Forms.MessageBoxIcon(APIリファレンス)の::Errorを変えればよい。
[System.Windows.Forms.MessageBoxIcon]::Warning
○日々の運用を考えてカスタマイズしてみる
毎朝、定時にPC画面に表示されるという何よりも最優先なアテンションを構築したわけだ。ここに表示されるメッセージは、デスクトップに配置したtestMorning.ps1ファイルをテキストエディターで文言を変えるだけで、翌日から反映されるが、幅を持たせ箇条書きにしておくとよいだろう。PowerShellのヒアドキュメント@"...."@で囲んでおけば、箇条書きを含むそのままの形で表示される。
Add-Type -AssemblyName System.Windows.Forms
$msg = @"
9時です。メールを開く前にやること
・その日の提出物確認
・スマホやモバイル端末の充電状況確認
・無駄なメールは後回し
※メールを先に開くと負けです
"@
[System.Windows.Forms.MessageBox]::Show(
$msg,
"朝通知",
[System.Windows.Forms.MessageBoxButtons]::OKCancel ,
[System.Windows.Forms.MessageBoxIcon]::Warning)
提出物はSaaSでブラウザから行えるので、リンクで目的地を設定しておけば一段と機能がグレードアップする。[ok]を押したらStart-Processを使ってブラウザでURLを開く処理を追加する。
Add-Type -AssemblyName System.Windows.Forms
$msg = @"
9時です。メールを開く前にやること
・その日の提出物確認
・スマホやモバイル端末の充電状況確認
・無駄なメールは後回し
※メールを先に開くと負けです
"@
$result = [System.Windows.Forms.MessageBox]::Show(
$msg,
"朝通知",
[System.Windows.Forms.MessageBoxButtons]::OKCancel,
[System.Windows.Forms.MessageBoxIcon]::Warning
)
if ($result -eq "OK") {
Start-Process "https://news.mynavi.jp/"
}
タスクスケジューラーからテスト実行してみる。
こうしておけば、メールを開く前に最優先の処理が自動的に行える。とりあえずは機能しそうだ。
![美酵 ビファ クレンズドリング 栄養機能⾷品 30包約30日分 [ 発酵 と マグネシウム の力で 美容と健康をサポートし 満腹感 のある 置き換えダイエット ]](https://m.media-amazon.com/images/I/51FnYyHl-kL._SL500_.jpg)
![明治薬品 シボラナイト2 150粒(30日分) [シリアルナンバー付] [ ダイエットサプリ ブラックジンジャー ポリメトキシフラボン 腹部の脂肪を減らす ]](https://m.media-amazon.com/images/I/41U8wqxGJVL._SL500_.jpg)



![hiritu(ヒリツ) バランスリペアシャンプー&ヘアトリートメント オーロラ [シリーズ最高峰のツヤ] きらめき髪 ツヤ髪 浮き毛パヤ毛抑制 ダメージ毛を集中補修 PPT系洗浄成分 アミノ酸系洗浄成分 毛髪補修成分 カシス&パチュリの香り 香水シャンプー](https://m.media-amazon.com/images/I/41FoHN-YVXL._SL500_.jpg)





