t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBScriptとSAPIとタスクスケジューラで、一定時間ごとに音声で休憩を促す仕組みを構築

前回の記事で紹介した音声読み上げの仕組みをVBScriptに移植して、タスクに登録することで一定時間ごとに音声で休憩を促してくれる仕組みを作った。Windows 8.1以降で動作すると思われる。7は多分、音声合成エンジンが標準で入っていないのでダメ。

今回は英語メッセージを読み上げるサンプルを紹介する。これは単に自己満足なので日本語が良い方は前回記事を参考にボイスを切り替えると良い。

■前回の記事
thom.hateblo.jp

VBSの準備

以下のようなコードを準備して、適当な場所にSpeakMessage.vbsとして保存する。
保存場所はバッチ用なので普段触らない場所が良いと思う。私の場合はCドライブ直下にTaskというフォルダを作ってその中に入れた。

Call SpeakMessage

Sub SpeakMessage()
    With CreateObject("SAPI.SpVoice")
        Set .Voice = .GetVoices().Item(1)
        .Speak "Hey Thom! It's time to take a break. Stop using computer and take a rest while 5 minutes."
    End With
End Sub

フランクでフレンドリーな感じにしたかったのだけれど、英語として合ってるのかは自信ない。

Googleさんに和訳してもらうとこんな感じ。
f:id:t-hom:20180103163842p:plain

タスクの登録

まず、タスクスケジューラを起動する。
Windows 10の場合、1)スタート→2)Windows 管理ツール→3)タスクスケジューラと辿る。
f:id:t-hom:20180103164554p:plain

起動したら操作メニューからタスクの作成を実行。
f:id:t-hom:20180103164948p:plain

全般タブでは任意の名前を設定する。今回はInformBreakTimeとした。
f:id:t-hom:20180103165118p:plain

トリガータブでは新規ボタンをクリックし、出てきたウインドウで次の赤枠のとおり設定する。
f:id:t-hom:20180103165610p:plain
青枠の箇所は任意。1時間に1回なら、キリの良い時間に開始設定しておくと良い。

操作タブでは新規ボタンをクリックし、出てきたウインドウで操作がプログラムの開始になっていることを確認し、参照ボタンをクリックする。
f:id:t-hom:20180103165858p:plain

先ほど作成したSpeakMessage.vbsを選択し、次の良いにセットされたらOKで閉じる。
f:id:t-hom:20180103170011p:plain


これで設定は完了したのでタスクの作成ウインドウもOKで閉じる。

タスクスケジューラライブラリに表示されたらタスクスケジューラを閉じて作業完了。
f:id:t-hom:20180103170252p:plain

ちなみにタスクスケジューラライブラリから目的のタスクを右クリックすることで手動実行したり無効にしたり、削除したりできる。
手動で実行すると音声が終わってもタスクが終了しなかったので、右クリックして終了させる。
f:id:t-hom:20180103170521p:plain

その際に次のようなメッセージが出るが、OKで良い。
f:id:t-hom:20180103170541p:plain

これで1時間ごとに自動で休憩を促してくれるようになる。
なお、自動実行の場合は実行が終わると状態が準備完了に戻る。

おわりに

5分経過した後に「作業にもどってOK」の旨を通知するスクリプトを書いても良いなと思った。
やり方としては、ひとつのVBSの中で5分Waitさせても良いし、2つスクリプトを作ってタスクをもう一つ登録するのも良い。
あるいはスクリプトに引数を持たせて1つのスクリプト、2つのタスクで引数によってメッセージを切り替えるという手もある。

モニターの見過ぎや、座りっぱなしは健康に悪い。適宜休憩をとろう。

追記

後から気付いたけど、これ5分休憩よりも「5分間、部屋の掃除をしなさい」という指示に変えたほうが良さげ。
体力仕事の休憩は文字通り体を休めることだけれど、コンピューター作業の休憩は逆に体を動かすことなので。
綺麗な部屋と健康を得られるので一石二鳥。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。